利用單片機、4*4矩陣鍵盤和8位數碼管,虛擬HD7279部分輸入功能 按下數字鍵,將按下鍵對應位置值(0-9)顯示在8位數碼管最右邊,原先內容依次左移一位
仿真圖
源程序:
- #include<reg51.h>
- #define KEYPORT P1
- #define SEGPORT P0
- #define uchar unsigned char
- sbit TPORT=P3^0;
- sbit SPORT=P3^1;
- sbit FPORT=P3^2;
- uchar value;
- uchar flag=0;
- uchar one,two,three,four,five,six,seven,eight;
- void JKEY();
- void RKEY();
- void DISPLAY();
- void delay();
- void delay2ms();
- unsigned char code SEG[17]={
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
- void main()
- {
- one=two=three=four=five=six=seven=eight=16;
- while(1)
- {
- RKEY();
- DISPLAY();
- }
- }
- void JKEY(void)
- {
- KEYPORT=0x0f;
- if(KEYPORT!=0x0f)
- {
- delay();
- if(KEYPORT!=0x0f)
- {
- KEYPORT=0x0f;
- switch(KEYPORT)
- {
- case(0x07): value=0;break;
- case(0x0b): value=1;break;
- case(0x0d): value=2;break;
- case(0x0e): value=3;break;
- }
- KEYPORT=0xf0;
- switch(KEYPORT)
- {
- case(0x70): value=value;break;
- case(0xb0): value=value+4;break;
- case(0xd0): value=value+8;break;
- case(0xe0): value=value+12;break;
- }
-
- while(KEYPORT!=0xf0)
- {
- DISPLAY();
- }
- flag=1;
- }
- }
-
- }
- void RKEY()
- {
- JKEY();
- if(flag) //當有按鍵按下 左移
- {
- flag=0;
- one=two;
- two=three;
- three=four;
- four=five;
- five=six;
- six=seven;
- seven=eight;
- eight=value;
- }
- }
- void DISPLAY()
- {
- P2=0X00;
- SEGPORT=SEG[one];
- delay2ms();
- P2=0X01;
- SEGPORT=SEG[two];
- delay2ms();
- P2=0X02;
- SEGPORT=SEG[three];
- delay2ms();
- P2=0X03;
- SEGPORT=SEG[four];
- delay2ms();
- P2=0X04;
- SEGPORT=SEG[five];
- delay2ms();
- P2=0X05;
- SEGPORT=SEG[six];
- delay2ms();
- P2=0X06;
- SEGPORT=SEG[seven];
- delay2ms();
- P2=0X07;
- SEGPORT=SEG[eight];
- delay2ms();
- }
- void delay(void)
- {
- unsigned char a,b;
- for(b=249;b>0;b--)
- for(a=17;a>0;a--);
- }
- void delay2ms(void)
- {
- unsigned char a,b;
- for(b=133;b>0;b--)
- for(a=6;a>0;a--);
- }
復制代碼
仿真文件和與源碼下載:
虛擬HD7279.zip
(119.95 KB, 下載次數: 52)
2016-5-14 15:41 上傳
點擊文件名下載附件
|