可預置十六位計數器的效果如下:
初始界面:
單刀雙置開關SW1打到下面,左邊的LED燈亮,上下兩個按鈕開始工作,按下上面的按鈕顯示加1,按下下面的按鈕顯示減1
單刀雙置開關SW1打到上面,左邊的LED燈不亮,4×4 矩陣鍵盤 KEYBOARD開始工作,從左到右,從上到下分別為0到F(第一個為0)輸入是從左到右開始的,eg:要顯示16這個數值,先輸入1,2位共陰極數碼管右邊部分為0,左邊部分為1;再輸入6,2位共陰極數碼管右邊部分為1,左邊部分為6.
(代碼在附件中給出,格式為c語言代碼,由Keil4編譯運行)
單片機源程序如下:
- #include "at89x51.h"
- unsigned char low=0;
- unsigned char high=0;
- unsigned char led_disp[] = {
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71
- }; //0-f
- void delay_ms(unsigned int a)
- {
- unsigned int i;
- while(a--)
- {
- i = 70;
- while(i--);
- }
- }
- //反轉法
- unsigned char translate(unsigned char x)
- {
- unsigned char y;
- if(x==7) //0111
- y=3;
- else if(x==11) //1011
- y=2;
- else if(x==13) //1101
- y=1;
- else if(x==14) //1110
- y=0;
- return y;
- }
- unsigned char getKey(unsigned char *key)
- {
- unsigned char r, c, t;
- P3 = 0xf0; //列線置1,行線置0
- if(P3 != 0xf0) //按鍵按下
- {
- //消抖
- delay_ms(15);
- if(P3 != 0xf0)
- {
- t = P3;
- //取列號
- c = (t & 0xf0) >> 4;
- c = translate(c);
- //將列值輸出,行線置1
- P3 = t | 0x0f;
- //取行號
- r = (P3 & 0x0f);
- r = translate(r);
- *key = r*4+c;
- //等待按鍵放開
- P3 = 0xf0;
- while(P3 != 0xf0);
- return 1;
- }
- }
- return 0;
- }
- void dispHigh(unsigned char v)
- {
- P2=0;
- P1_7 = 1;
- P1_6 = 0;
- P2 = led_disp[v];
- delay_ms(5);
- }
- void dispLow(unsigned char v)
- {
- P2=0;
- P1_6 = 1;
- P1_7 = 0;
- P2 = led_disp[v];
- delay_ms(5);
- }
- void main(void)
- {
- unsigned char k;
- //P2 = 0;//預置
- if(P1_5==1)
- {
- P2=0;
- P1_4=1;//左邊的LED不亮,鍵盤計數
- while(1){
- if(getKey(&k))
- {
- high= low;
- low = k;//低位置數
- }
- dispLow(low);//低位顯示
- dispHigh(high);
- if(P1_5==0)
- break;
- }
- }
- if(P1_5==0)
- {
- P2=0;
- P1_4=0;//左邊的LED亮,加減計數
- while(1)
- {
- delay_ms(15);
- if(P1_0==0)
- {
- delay_ms(300);
- low++;
- if(low==16)
- {
- low=0;
- high++;
- if(high==16)
- {
- low=0;
- high=0;
- }
- }
- }
- else if(P1_1==0)
- {
- delay_ms(300);
- low--;
- if(low==-1)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
可預置十六位計數器.zip
(223.04 KB, 下載次數: 41)
2019-4-24 17:05 上傳
點擊文件名下載附件
|