說明:該程序可以實現(xiàn)將甲機按下的鍵值發(fā)送到乙機,并且在兩個單片機開發(fā)板上同時顯示出來。
IMG_20180614_121418.jpg (3.87 MB, 下載次數(shù): 66)
下載附件
實圖
2018-6-14 12:15 上傳
1.發(fā)送函數(shù) - #include "reg52.h"
- #include "intrins.h"
- #include "absacc.h"
- #define uchar unsigned char
- #define uint unsigned int
- uchar code shuma[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
- uchar code keyzhi[4][4]={ 0, 1, 2, 3, //鍵值二維數(shù)組
- 4, 5, 6, 7,
- 8, 9, 10, 11,
- 12, 13, 14, 15 };
- uchar idata dis_buf[6]={ 16, 16, 16, 16, 16, 16 }; //數(shù)據(jù)緩沖區(qū)
- uchar keyval;
- uchar sum;
- sbit duan=P2^6;
- sbit wei=P2^7;
- void Delay1ms(void) //延時1ms函數(shù)
- {
- unsigned char a;
- for(a=0;a<125;a++);
- }
- void display()
- {
- uchark,bitcode,segcode;
- bitcode=0xfe; //起始位碼
- for(k=0;k<6;k++)
- {
- segcode=dis_buf[k]; //取數(shù)據(jù)
- P0=shuma[segcode]; //查表送段碼
- duan=1;
- duan=0;
- P0=bitcode; //送位碼
- wei=1;
- Delay1ms();
- P0=0xff; //消影
- wei=0;
- bitcode=bitcode<<1; //更新位碼
- bitcode=bitcode|0x01;
- }
- }
- void weiyi()
- {
- dis_buf[0]=dis_buf[1];
- dis_buf[1]=dis_buf[2];
- dis_buf[2]=dis_buf[3];
- dis_buf[3]=dis_buf[4];
- dis_buf[4]=dis_buf[5];
- dis_buf[5]=keyval ;
- }
- void keyscan() //鍵掃描函數(shù)
- {
- uchar hang,lie;
- uint l=0;
- P3=0x0f;
- if(P3!=0x0f)
- {
- display();
- display();
- display();
- display();
- P3=0x0f;
- if(P3!=0x0f)
- {
- switch(P3)
- {
- case 0x07:hang=3;break;
- case 0x0b:hang=2;break;
- case 0x0d:hang=1;break;
- case 0x0e:hang=0;break;
- }
- P3=0xf3;
- display();
- switch(P3)
- {
- case 0x73:lie=3;break;
- case 0xb3:lie=2;break;
- case 0xd3:lie=1;break;
- case 0xe3:lie=0;break;
- }
- while((l<300)&&(P3!=0xf3)) //檢測按鍵松手檢測
- {
- display();
- l++;
- }
- keyval=keyzhi[hang][lie]; //獲取鍵值
- weiyi(); P1=dis_buf[5];
- }
- }
- }
- void init() //串口初始化
- {
- TMOD=0x20;
- TH1=0xfa;
- TL1=0xfa;
- PCON=0x00;
- SCON=0x50;
- REN=1;
- TR1=1;
- }
- void send() //發(fā)送函數(shù)
- {
- uchar i;
- do{
- display();
- display();
- display();
- display();
- display();
- SBUF=0xaa; P1=0x00;
- while(TI==0)display(); P1=0x0f;
- TI=0;
- while(RI==0)display(); P1=0xf0;
- RI=0;}while(SBUF!=0xbb);
- do{
- sum=0;
- for(i=0;i<6;i++)
- {
- display();
- display();
- SBUF=dis_buf[ i];
- [ i] sum+=dis_buf[ i];
- while(TI==0)display();
- TI=0;
- }
- display();
- display();
- SBUF=sum;
- while(TI==0)display();TI=0;
- while(RI==0)display();RI=0;
- }while(SBUF!=0x00);
- }
- void main() //主函數(shù)
- {
- init();
- while(1)
- {
- display();
- keyscan();
- send();
- }
- }
- 2.接收程序
- #include "reg52.h"
- #include "intrins.h"
- #include "absacc.h"
- #define uchar unsigned char
- #define uint unsigned int
- uchar code shuma[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40 };
- uchar code keyzhi[4][4]={ 0, 1, 2, 3, //鍵值二維數(shù)組
- 4, 5, 6, 7,
- 8, 9, 10, 11,
- 12, 13, 14, 15 };
- uchar idata dis_buf[6]={ 16, 16, 16, 16, 16, 16 }; //數(shù)據(jù)緩沖區(qū)
- uchar sum;
- sbit duan=P2^6;
- sbit wei=P2^7;
- void Delay1ms(void) //延時1ms函數(shù)
- {
- unsigned char a;
- for(a=0;a<125;a++);
- }
- void display()
- {
- uchar k,bitcode,segcode;
- bitcode=0xfe; //起始位碼
- for(k=0;k<6;k++)
- {
- segcode=dis_buf[k]; //取數(shù)據(jù)
- P0=shuma[segcode]; //查表送段碼
- duan=1;
- duan=0;
- P0=bitcode; //送位碼
- wei=1;
- Delay1ms();
- P0=0xff; //消影
- wei=0;
- bitcode=bitcode<<1; //更新位碼
- bitcode=bitcode|0x01;
- }
- }
- void init() //串口初始化
- {
- TMOD=0x20;
- TH1=0xfa;
- TL1=0xfa;
- PCON=0x00;
- SCON=0x50;
- REN=1;
- TR1=1;
- }
- void receive() //接收函數(shù)
- {
- uchar i;
- RI=0;P1=0xf0;
- while(RI==0)display(); RI=0;P1=0x00;
- while(SBUF!=0xaa)
- {
- SBUF=0xff;
- while(TI==0)display();
- TI=0;
- display();
- display();
- }
- SBUF=0xbb;
- while(TI==0)display();
- TI=0;
- sum=0;
- for(i=0;i<6;i++)
- {
- display();
- while(RI==0)display();RI=0;
- dis_buf[ i]=SBUF;
- sum+=dis_buf[ i];
- P1=dis_buf[5];
- }
- while(RI==0)display();RI=0;
- if(SBUF==sum)
- {
- SBUF=0x00;
- }
- else
- {
- SBUF=0xff;
- }
- while(TI==0)display();
- TI=0;
- }
- void main() //主函數(shù)
- {
- init();
- while(1)
- {
- display();
- receive();
- }
- }
復(fù)制代碼
|