前幾天做的關于串口通訊的課程設計,結合了矩陣按鍵,以及8位的數碼管動態顯示。
程序效果:初始時發送端跟清空端無任何顯示,當發送端的矩陣按鍵按下某一個時,
接受端就接受到對應的鍵值。并且顯示在數碼管上,顯示效果是按下一個按鍵數碼管就
多顯示一個,按到第9下的時候,數碼管全部不顯示,回歸到初始狀態。
壓縮包中有原理圖跟源程序
發送端代碼:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define GPIO_DIG P0
#define GPIO_KEY P1
uchar KeyValue; //存放鍵值
void delay(uint z); //延時函數,10us
void send(uchar num1); //發送函數
void keyscan(); //矩陣鍵盤掃描函數
void UsartInit(); //波特率設置函數
void main()
{
UsartInit();
GPIO_DIG=0x00; //數碼管初始消影
while(1)
{
keyscan(); //不斷掃描鍵盤發送掃描結果
}
}
void delay(uint z) //延時函數
{
while(z--);
}
void UsartInit() //波特率設置函數
{
TMOD=0x20; //設置定時器1為工作方式2
TH1=0xfd; //裝初值設置波特率
TL1=0xfd;
TR1=1; //打開定時器1
SCON=0X50;
PCON=0X00;
}
void send(uchar num1) //發送函數
{
SBUF=num1;
while(!TI);
TI=0;
}
void keyscan() //矩陣鍵盤掃描函數
{
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f) //讀取按鍵是否按下
{
delay(1000); //延時10ms進行消抖
if(GPIO_KEY!=0x0f) //再次檢測鍵盤是否按下
{
//測試列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=1;break;
case(0X0d): KeyValue=2;break;
case(0X0e): KeyValue=3;break;
}
//測試行
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}
send(KeyValue); //傳送鍵值
while((a<50)&&(GPIO_KEY!=0xf0)) //檢測按鍵松手檢測
{
delay(1000);
a++;
}
}
}
}
壓縮包中有原理圖同全套代碼,歡迎借鑒。。
D單片機間串口通信_矩陣按鍵_動態數碼管.zip
(230.22 KB, 下載次數: 31)
2018-12-22 14:57 上傳
點擊文件名下載附件
|