()EZ5`{)2P%@JXMT2K1H6PG.png (65.72 KB, 下載次數: 59)
下載附件
2021-5-25 20:13 上傳
//程序:ex6_1.c
//功能:甲機發送數據程序,采用查詢方式實現
#include <reg51.h> //包含頭文件reg51.h,定義51單片機的專用寄存器
void main() //主函數
{
unsigned char i;
unsigned char send[]={9,3,5,4,6,7}; //定義要發送的動態密碼數據
TMOD=0x20; //定時器T1工作于方式2
TL1=0xf4; //波特率為2400bps
TH1=0xf4;
TR1=1;
SCON=0x40; //定義串行口工作于方式1
for (i=0;i<6;i++)
{
SBUF=send[ i]; // 發送第i個數據
while(TI==0); // 查詢等待發送是否完成
TI=0; // 發送完成,TI由軟件清0
}
while(1);
}
- //程序:ex6_2.c
- //功能:乙機接收及顯示程序,采用查詢方式實現,采用中斷方式實現的程序參見
- //6.3節中的ex6_5.c程序
- #include <reg51.h> //包含頭文件reg51.h,定義51單片機的專用寄存器
- code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- //定義0~9共陽極顯示字型碼
- unsigned char buffer[]={0x00,0x00,0x00,0x00,0x00,0x00};//定義接收數據緩沖區
- void disp(void); //顯示函數聲明
- void main() //主函數
- {
- unsigned char i;
- TMOD=0x20; //定時器T1工作于方式2
- TL1=0xf4; //波特率定義
- TH1=0xf4;
- TR1=1;
- SCON=0x40; //定義串行口工作于方式1
- REN=1; //接收允許
- for(i=0;i<6;i++)
- {
- while(RI==0); //查詢等待,RI為1時,表示接收到數據
- buffer[i]=SBUF; //接收數據
- RI=0; //RI由軟件清0
- }
- for(;;) disp(); //顯示接收數據
- }
- //函數名:disp
- //函數功能:在6個LED上顯示buffer中的6個數
- //入口參數:無
- //出口參數:無
- void disp()
- {
- unsigned char w,i,j;
- w=0x01; //位碼賦初值
- for(i=0;i<6;i++)
- {
- P1=tab[buffer[i]]; // 送共陽極顯示字型段碼,buffer[i]作為數組分量的下標
- P2=~w; // 送反相后的位碼
- for(j=0;j<255;j++);// 顯示延時
- w<<=1;
- }
- }
復制代碼
|