- #include<reg51.h>
- #include<intrins.h>
- unsigned char key_s,key_v,tmp;
- unsigned char display_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x82,0xF8,0x80,0x90};
- char code str[]="welcome!\n\r";/*定义向PC机发送的内容*/
- void send_str();/*声明发送字符串函数*/
- bit scan_key();/*声明按键函数*/
- void proc_key();/*声明按键处理函数*/
- void send_char(unsigned char td);/*声明发送字符函数*/
- void delayms(unsigned char ms);/*声明延时函数*/
- sbit K1=P1^4;
- void main()
- {
- TMOD=0x20;/*定时器1工作于8位自动重载模式,用于产生波特率 */
- TH1=0xFD; /*波特率9600*/
- TL1=0xFD;
- SCON=0x50;/*设定串行口工作方式*/
- PCON=0xef;/*波特率不倍增*/
- TR1=1; /*启动定时器1*/
- IE=0x00;/*禁止任何中断*/
- while(1)
- {
- if(scan_key())
- delayms(10); /*延时去抖动*/
- if(scan_key())
- {
- key_v=key_s;
- proc_key();
- }
- if(RI) /*是否传来数据*/
- {
- RI=0;
- tmp=SBUF; /*暂存接受到的数据*/
- delayms(10);
- P0=display_code[tmp-0x30]; /*数据传送到PO口*/
- send_char(tmp); /*回传接受的数据*/
- }
- }
- }
- bit scan_key() /*扫描按键*/
- {
- key_s=0x00;
- key_s|=K1;
- return(key_s^key_v);
- }
- void proc_key() /*按键处理*/
- {
- if((key_v&0x01)==0) /*k1按键按下*/
- {
- send_str(); /*传送字符串*/
- }
- }
- void send_char(unsigned char td) /*传送一个字符*/
- {
- SBUF=td;
- while(!T1); /*等待数据传送*/
- T1=0; /*清除数据传送标志*/
- }
- void send_str() /*传送字符串*/
- {
- unsigned char i=0;
- while(str[i]!='\0')
- {
- SBUF=str[i];
- T1=0; /*清除数据传送标志*/
- i++;
- }
- }
- void delayms(unsigned char ms) /*延时子程序*/
- {
- unsigned char j;
- while(ms--)
- {
- for(j=0;j<120;j++);
- }
- }
复制代码
|