仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:
- #include<reg51.h>
- #include<absacc.h>
- #define COM8279 XBYTE[0x7fff]
- #define DAT8279 XBYTE[0x7eff]
- #define uchar unsigned char
- uchar code table[]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- uchar idata keybuffer[3]={0,0,0};
- sbit clflag=ACC^7;
- uchar key;
- uchar Keyflag;
- uchar p=0;
- void delay(uchar x)
- {
- uchar i;
- for(i=0;i<x;i++);
- }
- void Display()
- {
- uchar i;
- COM8279=0X90;
- for(i=0;i<3;i++)
- {
- COM8279=i+0x80;
- DAT8279=table[keybuffer[i]];
- delay(10);
- }
- }
- void Disp(d)
- {
- COM8279=0X90;
- COM8279=0x80;
- DAT8279=table[key];
- delay(10);
- }
- void Key_0(void) interrupt 0 using 1
- {
- uchar ch;
- COM8279=0x40;
- ch=DAT8279; ch&=0x3f;
- key=ch;
- if(p>2)p=0;
- if(key<0x0a)
- {
- keybuffer[p]=key;
- }
- Keyflag=1;
- p++;
- }
- void KeyTest(uchar keyh)
- {
- switch (keyh)
- {
- case 0x00:{
- Disp(key);
- break;}
- case 0x01:{
- Disp(key);
- break;}
- case 0x02:{
- Disp(key);
- break;}
- case 0x03:{
- Disp(key);
- break;}
- case 0x04:{
- Disp(key);
- break;}
- case 0x05:{
- Disp(key);
- break;}
- case 0x06:{
- Disp(key);
- break;}
- case 0x07:{
- Disp(key);
- break;}
- case 0x08:{
- Disp(key);
- break;}
- case 0x09:{
- Disp(key);
- break;}
- default:break;}
- }
- void main(void)
- {
- uchar j;
- PCON=0x00;
- SCON=0x50;
- IE=0; EA=1;
- EX0=1; ET0=1;
- COM8279=0xd1;
- do
- {ACC=COM8279;}
- while(clflag==1);
- COM8279=0x00;
- COM8279=0x2a;
- while(1)
- {
- if((Keyflag==1)&&(key==0x0b))
- {
- {for(j=0;j<3;j++)
- keybuffer[j]=0;
- }
- Keyflag=0;
- }
- Display();
- }
- }
復制代碼
所有資料51hei提供下載:
仿真代碼.7z
(48.11 KB, 下載次數: 54)
2021-12-13 22:20 上傳
點擊文件名下載附件
|