当前位置:首页 > 51单片机键盘数码管显示 - 利用8255和51单片机实现数码管显示按键数值的程序(带程序) - 图文
【单片机源程序】
#include
#define uchar unsigned char //宏的定义变量类型 uchar 代替 unsigned char #define uint unsigned int //宏的定义变量类型 uint 代替 unsigned int
#define PA8255 XBYTE[0x4000] // 8255的A口地址 #define PB8255 XBYTE[0x4001] // 8255的B口地址 #define PC8255 XBYTE[0x4002] // 8255的C口地址 #define PD8255 XBYTE[0x4003] // 8255的控制口地址
uchar temp,key; //定义变量temp,key为按键键值,无实际意义
void delay(uint z) //延迟程序 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }
void ini_8255() //初始化8255函数 {
PD8255 = 0x81; }
void display() //显示函数,不可删除,删除出现连闪情况 {
PB8255 = 0xff; // PB8255全部置1,数码管清0 PA8255 = 0x00; // PA8255全部置0,对数码管进行位选,选中六个数码管 delay(100); //延迟 }
void keyscan(void) //按键扫描程序,让数码管显示按键数值 {
PC8255 = 0xef; //PC8255选中JL1列,JL1置0,其他置1
if(temp != 0xef) { delay(10); //延迟防抖 temp = PC8255;
switch(temp) { case 0xee: key = 0x0f; PB8255 = 0x8e; //第15按键键值,数码管显示‘F’ break;
case 0xed: key = 0x0b; PB8255 = 0x83; //第11按键键值,数码管显示‘B’ break;
case 0xeb: key = 0x07; PB8255 = 0xf8; //第7按键键值,数码管显示‘7’ break;
case 0xe7: key = 0x03; PB8255 = 0xb0; //第3按键键值,数码管显示‘3’ break; } while(temp != PC8255); }
PC8255 = 0xdf; if(temp != 0xdf) //PC8255选中JL2列,JL2置0,其他置1 { delay(10); temp = PC8255; switch(temp) { case 0xde: key = 0x0e; PB8255 = 0x86; //第14按键键值,数码管显示‘E’ break;
case 0xdd: key = 0x0a; PB8255 = 0x88; //第10按键键值,数码管显示‘A’ break;
case 0xdb: key = 0x06; PB8255 = 0x82; //第6按键键值,数码管显示‘6’ break;
case 0xd7: key = 0x02; PB8255 = 0xa4; //第2按键键值,数码管显示‘2’ break; } while(temp != PC8255); }
PC8255 = 0xbf; //PC8255选中JL3列,JL3置0,其他置1 if(temp != 0xbf) { delay(10); temp = PC8255; switch(temp) { case 0xbe: key = 0x0c; PB8255 = 0xa1; //第13按键键值,数码管显示‘C’
共分享92篇相关文档