大家可以參考一下
單片機源程序如下:
- #include <reg51.h>
- typedef unsigned char u8;
- typedef unsigned int u16;
- sbit seg_sel=P1^4;
- sbit bit_sel=P1^5;
- #define DATA P0
-
- u8 code seg_table[]= //數據表格
- {
- 0xc0,0xf9,0xa4,0xb0,
- 0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,
- 0xc6,0xa1,0x86,0x8e,
- };
- u8 code bit_table[]=
- {
- 0x10,0x20,0x40,0x80,
- 0x01,0x02,0x04,0x08,
- };
-
- void delay(u16 num) //延時程序
- {
- u16 x,y;
- for(x=num;x>0;x--)
- for(y=110;y>0;y--)
- {
- ;
- }
- }
- void display_led(u8 which_bit, u8 which_number) //數碼管顯示程序
- {
- bit_sel = 1;
- DATA = bit_table[which_bit];
- bit_sel = 0;
- //delay(200);
- seg_sel = 1;
- DATA = seg_table[which_number];
- seg_sel=0;
- delay(200);
- }
- u8 key_scan (void) //編碼程序
- {
- u8 temp,temp2;
- P2=0xf0; //輸出
- temp=P2; //讀入P2值
- if(temp!=0xf0)
- {
- delay(50); //消抖
- temp=P2;
- if(temp!=0xf0)
- {
- temp2=temp&0xf0; //保留高四位
- P2=0x0f; //輸出
- delay(10); //使電平值充分讀入
- temp=P2;
- temp2 |=temp; //保留低四位
- return temp2;
- }
- //while(P2!=0x0f);
- }
- }
- u8 encode(u8 cod) //解碼程序
- {
- u8 num;
- switch(cod)
- {
- case 0xee : num=0 ; break;
- case 0xde : num=1 ; break;
- case 0xbe : num=2 ; break;
- case 0x7e : num=3 ; break;
- case 0xed : num=4 ; break;
- case 0xdd : num=5 ; break;
- case 0xbd : num=6 ; break;
- case 0x7d : num=7 ; break;
- case 0xeb : num=8 ; break;
- case 0xdb : num=9 ; break;
- case 0xbb : num=10; break;
- case 0x7b : num=11; break;
- case 0xe7 : num=12; break;
- case 0xd7 : num=13; break;
- case 0xb7 : num=14; break;
- case 0x77 : num=15; break;
- default : break;
- }
- return cod;
- }
- void main(void)
- {
- u8 num,cod;
- P0 = 0xff;
- P1 = 0xff;
- seg_sel = 0;
- bit_sel = 0;
- while(1)
- {
- cod=key_scan(); //判斷和編碼
- num=encode(cod); //解碼
- display_led(1,num); //顯示
- }
- }
復制代碼
所有程序51hei提供下載:
矩陣數碼管2.zip
(30.5 KB, 下載次數: 7)
2020-6-9 19:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|