3*8 键盘输入 led数码管向前滚动输入 0~f C51 单片机 protues仿真+代码
压缩包里有 protues仿真工程 和keil 代码
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include<reg51.h>
- #include<absacc.h>
- #define COM8279 XBYTE[0x7fff] //这个是命令口。是CS
- #define DAT8279 XBYTE[0x7eff] //这个是数据口。是A0
- #define uchar unsigned char
- uchar code table[]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};//0-F,-
- uchar idata keybuffer[6]={16,16,16,16,16,16}; // 临时放需要显示的数字的地方
- sbit clflag=ACC^7;
- uchar key;
- uchar Keyflag;
- uchar run_once=1;
- uchar flag_display;
- uchar p;
- void delay(uchar x) //延时子程序
- {
- uchar i;
- for(i=0;i<x;i++);
-
- }
- void Display() //显示函数
- {
-
- uchar i;
- COM8279=0X90;
- for(i=0;i<6;i++)
- {
- COM8279=i+0x80;
- DAT8279=table[keybuffer[i]];
- delay(10);
- }
- }
- void Disp(d) //显示函数,
- {
- COM8279=0X90;
- COM8279=0x80;
- DAT8279=table[d];
- delay(10);
- }
-
- void Key_0(void) interrupt 0 using 1 //键盘按键使用外部中断0
- {
- uchar ch;
- COM8279=0x40;
- ch=DAT8279;
- ch&=0x3f;
- key=ch;
-
- flag_display=1;
-
-
-
-
- if(key==0)
- {
- if(run_once==1)
- {
- run_once=0;
- return;
- }
-
- }
- if(key!=0x00&&key!=0x01&&key!=0x02&&key!=0x03&&key!=0x04&&key!=0x05&&key!=0x06&&key!=0x07&&key!=0x08
- &&key!=0x09&&key!=0x0a&&key!=0x0b&&key!=0x0c&&key!=0x0d&&key!=0x0e&&key!=0x0f)
- {
-
- key=17;
- }
-
-
-
-
- if(p>6)
- {
- p = 0;
-
- }
- keybuffer[5]=keybuffer[4];
- keybuffer[4]=keybuffer[3];
- keybuffer[3]=keybuffer[2];
- keybuffer[2]=keybuffer[1];
- keybuffer[1]= keybuffer[0];
- keybuffer[0]=key;
- Keyflag=1;
- p++;
-
-
-
- }
- void KeyTest(uchar keyh) //键盘按键处理及通道选择程序
- {
-
- if(key!=0x00&&key!=0x01&&key!=0x02&&key!=0x03&&key!=0x04&&key!=0x05&&key!=0x06&&key!=0x07&&key!=0x08
- &&key!=0x09&&key!=0x0a&&key!=0x0b&&key!=0x0c&&key!=0x0d&&key!=0x0e&&key!=0x0f)
- {
-
- Disp(0x10);
- }
-
-
-
- switch (keyh)
- {
- case 0x00:{//按键0
- Disp(key);
- break;}
- case 0x01:{//按键1
- Disp(key);
- break;}
- case 0x02:{//按键2
- Disp(key);
- break;}
- case 0x03:{//按键3
- Disp(key);
- break;}
- case 0x04:{//按键4
- Disp(key);
- break;}
- case 0x05:{//按键5
- Disp(key);
- break;}
- case 0x06:{//按键6
- Disp(key);
- break;}
- case 0x07:{//按键7
- Disp(key);
- break;}
- case 0x08:{//按键0
- Disp(key);
- break;}
- case 0x09:{//按键1
- Disp(key);
- break;}
- case 0x0a:{//按键5
- Disp(key);
- break;}
- case 0x0b:{//按键6
- Disp(key);
- break;}
- case 0x0c:{//按键7
-
- Disp(key);
- case 0x0d:{//按键0
- Disp(key);
- break;}
- case 0x0e:{//按键1
-
- Disp(key);
- break;}
-
- case 0x0f:{//按键1
- Disp(key);
-
- break;}
-
- default:
- break; }
- }
- }
- void main(void)
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
多键值输入显示.zip
(147.26 KB, 下载次数: 57)
|