|
如果沒有改的話,應該適用于儀電學院的嵌入式內容吧。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (107.47 KB, 下載次數: 44)
下載附件
2022-8-4 02:47 上傳
5fed7eabd4b890f265d5d665bd928db.jpg (223.08 KB, 下載次數: 42)
下載附件
2022-8-1 13:01 上傳
ecbe8906060473f2dedad671d982113.jpg (52.26 KB, 下載次數: 41)
下載附件
keil4 的代碼
2022-8-1 13:01 上傳
675cf3a94211d8a702117a6bc974d2c.jpg (62.26 KB, 下載次數: 33)
下載附件
2022-8-1 13:01 上傳
單片機源程序如下:
- #include <reg51.h> //此文件中定義了單片機的一些特殊功能寄存器
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define out P3 //作為譯碼管信號輸出端口
- #define outk P1
- uchar scan(void);
- uchar code seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- void led(void);
- void delay(int m);
- unsigned char L[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
- void main()
- {
- uchar key;
- unsigned char i;
- while(1)
- {
- for(i=0;i<8;i++)
- {
- P0=~L[i];
- key=scan();
- if(key!=-1)
- out=seg[key];
- delay(200);
- }
- }
- }
- //鍵盤掃描函數
- uchar scan(void)
- {
- uchar k=-1,m,n,temp;
- outk=0xf0; //設置按鍵是否有被按下
- if((outk&0xf0)!=0xf0)
- {
- for(m=0;m<4;m++) //分別掃描1-4行
- {
- outk=~(0x01<<m); //設置第一行對應位=0,其余為1(將0x01轉換為2進制,左移m位,后面補0)
- for(n=0;n<4;n++) //掃描列
- {
- temp=outk;
- temp=temp>>(4+n); //高4位挪到低4位,然后再移位比較
- if((temp&0x01)==0) //用最低位判斷是否為0
- {
- delay(20);
- if((temp&0x01)==0)
- {k=n+m*4;break;} //哪一行的那一列計算,二次判斷去抖
- }
- }
- if(k!=-1){break;}
- }
- }
- return(k);
- }
- //延時函數
- void delay(int m)
- {
- int i,j;
- for(i=0;i<m;i++)
- {for(j=0;j<125;j++);}//時鐘頻率為12MHz,ms
- }
復制代碼
e28b3e48a29eff2b5eeac45894779f3.jpg (54.79 KB, 下載次數: 40)
下載附件
使用keil4打開
2022-8-1 13:01 上傳
Keil代碼與Proteus8.8仿真下載:
流水燈 按鍵顯示.zip
(114.9 KB, 下載次數: 33)
2022-8-1 12:56 上傳
點擊文件名下載附件
流水燈 按鍵顯示 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|