|
- #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機(jī)發(fā)送的內(nèi)容*/
- void send_str();/*聲明發(fā)送字符串函數(shù)*/
- bit scan_key();/*聲明按鍵函數(shù)*/
- void proc_key();/*聲明按鍵處理函數(shù)*/
- void send_char(unsigned char td);/*聲明發(fā)送字符函數(shù)*/
- void delayms(unsigned char ms);/*聲明延時(shí)函數(shù)*/
- sbit K1=P1^4;
- void main()
- {
- TMOD=0x20;/*定時(shí)器1工作于8位自動(dòng)重載模式,用于產(chǎn)生波特率 */
- TH1=0xFD; /*波特率9600*/
- TL1=0xFD;
- SCON=0x50;/*設(shè)定串行口工作方式*/
- PCON=0xef;/*波特率不倍增*/
- TR1=1; /*啟動(dòng)定時(shí)器1*/
- IE=0x00;/*禁止任何中斷*/
- while(1)
- {
- if(scan_key())
- delayms(10); /*延時(shí)去抖動(dòng)*/
- if(scan_key())
- {
- key_v=key_s;
- proc_key();
- }
- if(RI) /*是否傳來數(shù)據(jù)*/
- {
- RI=0;
- tmp=SBUF; /*暫存接受到的數(shù)據(jù)*/
- delayms(10);
- P0=display_code[tmp-0x30]; /*數(shù)據(jù)傳送到PO口*/
- send_char(tmp); /*回傳接受的數(shù)據(jù)*/
- }
- }
- }
- 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) /*傳送一個(gè)字符*/
- {
- SBUF=td;
- while(!T1); /*等待數(shù)據(jù)傳送*/
- T1=0; /*清除數(shù)據(jù)傳送標(biāo)志*/
- }
- void send_str() /*傳送字符串*/
- {
- unsigned char i=0;
- while(str[i]!='\0')
- {
- SBUF=str[i];
- T1=0; /*清除數(shù)據(jù)傳送標(biāo)志*/
- i++;
- }
- }
- void delayms(unsigned char ms) /*延時(shí)子程序*/
- {
- unsigned char j;
- while(ms--)
- {
- for(j=0;j<120;j++);
- }
- }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|