(五)数码管仿真 02
电路图:注意 为了省事 把 数码管串联的电阻省去了
参考代码: 这里 检测按键并不好,抄的另外一篇日志,具体还要看书
#include<reg52.h> #include<intrins.h> #define uchar8 unsigned char #define uint16 unsigned int sbit key1=P2^0; sbit key2=P2^1; sbit key3=P2^2; sbit key4=P2^3; uchar8 code seg[]={ 0x3F,0x06,0x5B,0x4F,0x66 }; // 共阴数码管 /*****************************/ // 函数名称: DelayMS( ) // 函数功能: 延时 // 入口函数: 延时毫秒 // 出口函数: 无 /************************* *******************/ void DelayMs(uint16 val) { uint16 i,j; for( i=0;i<val;i++) for(j=0;j<113;j++); } /****************************/ // 函数名称: keyscan( ) // 函数功能: 检测按键 // 入口函数: 无 // 出口函数: keyscan_num /*****************************/ uchar8 keyscan() { uchar8 keyscan_num=0 ,temp; P2=0xff; // 置电平 temp=P2; // 读P2口电平,送入 temp 中(因为这时候可能改变按键了) // if(~(temp&0xff)) 不会用,先不看,用下面的 if(temp!=0xff) // 说明有键按下 { if(key1==0) { keyscan_num=1; } else if(key2==0) { keyscan_num=2; } else if(key3==0) { keyscan_num=3; } else if(key4==0) { keyscan_num=4; } else keyscan_num=0; // 依旧为0 } return keyscan_num; } void main() { uchar8 ledshow; while(1) { ledshow=keyscan(); // 切记 不是写 keyscan_num 要多看C语言 P1=seg[ledshow]; DelayMs(1000); } }
疑问: 虽然达到了按键控制 选择来显示 1234 的目的,但是不太好