菜鸟求助 单片机串口发送字符
***********************************************************************/
#include<reg51.h>
sbit LED1=P1^0;
sbit LED2=P1^2;
/********************************************************************
* 名称 : Com_Init()
* 功能 : 初始化串口程序,晶振11.0592, 波特率9600
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Init(void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断
ES = 1; //打开串口中断
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main()
{
Com_Init();
LED1=1;
LED2=1;
TI=0;
if(0==LED1) // 如果LED1低电平 ,则单片机发送a到PC机
{
SBUF='a';
LED2 = 0;
while(TI==0);
}
}
改程序能实现 LED1低电平 ,则单片机发送a到PC机,但是一直在发送,怎么控制 LED1低电平后, 只发一次。断开后,再让它低电平,再发送一次。
求解答 求修改
设置个全局变量,上电时为0,发送后置1,检测到为0时,才允许发送。
#include<reg51.h>
sbit LED1=P1^0;
sbit LED2=P1^2;
#define uchar unsigned char
#define uint unsigned int
/********************************************************************
* 名称 : Com_Init()
* 功能 : 初始化串口程序,晶振11.0592, 波特率9600
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Init(void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断
ES = 1; //打开串口中断
}
/****************延时函数*********************************************/
void delayms(uchar z)
{
uchar i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main()
{
Com_Init();
LED1=1;
LED2=1;
TI=0;
if(!LED1) //如果检测到低电平,说明按键按下
{
delayms(5);
if(!LED1) //再次确认按键是否按下,没有按下则退出
{
SBUF='a';
LED2 = 0;
while(TI==0);
while(!LED1); //如果确认按下按键等待按键释放
}
}
}
我已经仿真过了 可以的 按键检测要注意 不然按键按下程序一直循环运行就会循环发送
你忘了要检测按键按下了一次,当然你自己认为自己只是按下了一次,其实已经闭合了好几十ms以上
这样的话程序其实执行了很多次了 所以发送了很多
你程序写的还是比较规范的 值得表扬
恩 ,!
谢谢大师啊!
一个字符可以这样控制,那么一个字符串呢?