注意:此程序需要用到单片机74H138模块,才能通过独立键盘控制动态数码管
- #include<reg52.h> //此文件中定义了单片机的一些特殊功能
- #define uint unsigned int
- #define uchar unsigned char
- sbit k1=P1^0; //定义 P10 口是 k1
- sbit k2=P1^1; //定义 P11 口是 k2
- sbit k3=P1^2; //定义 P12 口是 k3
- sbit k4=P1^3; //定义 P13 口是 k4
- sbit k5=P1^4; //定义 P14 口是 k5
- sbit k6=P1^5; //定义 P15 口是 k6
- sbit k7=P1^6; //定义 P16 口是 k7
- sbit k8=P1^7; //定义 P17 口是 k8
- sbit LSA=P0^0;
- sbit LSB=P0^1;
- sbit LSC=P0^2;
- uchar code smgduan[17]={0x06,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};// 显 示0~F 的值
- void delay(uint i)
- {
- while(i--);
- }
- void keypros1()
- {
- if(k1==0) //检测按键 K1 是否按下
- {
- delay(1000); //消除抖动 一般大约 10ms
- if(k1==0) //再次判断按键是否按下
- {
- LSA=0;LSB=0;LSC=0;//显示第 0 位;
- }
- while(!k1); //检测按键是否松开
- }
- }
- void keypros2()
- {
- if(k2==0) //检测按键 K2 是否按下
- {
- delay(1000); //消除抖动 一般大约 1ms
- if(k2==0) //再次判断按键是否按下
- {
- LSA=1;LSB=0;LSC=0;//显示第 1 位
- }
- while(!k2); //检测按键是否松开
- }
- }
- void keypros3()
- {
- if(k3==0) //检测按键 K3 是否按下
- {
- delay(1000); //消除抖动 一般大约 1ms
- if(k3==0) //再次判断按键是否按下
- {
- LSA=0;LSB=1;LSC=0;//显示第 2 位
- }
- while(!k3); //检测按键是否松开
- }
- }
- void keypros4()
- {
- if(k4==0) //检测按键 K4 是否按下
- {
- delay(1000); //消除抖动 一般大约 1ms
- if(k4==0) //再次判断按键是否按下
- {
- LSA=1;LSB=1;LSC=0; //显示第 3 位
- }
- while(!k4); //检测按键是否松开
- }
- }
- void keypros5()
- {
- if(k5==0) //检测按键 K5 是否按下
- {
- delay(1000); //消除抖动 一般大约 1ms
- if(k5==0) //再次判断按键是否按下
- {
- LSA=0;LSB=0;LSC=1;//显示第 4 位
- }
- while(!k5); //检测按键是否松开
- }
- }
- void keypros6()
- {
- if(k6==0) //检测按键 K6 是否按下
- {
- delay(1000); //消除抖动 一般大约 1ms
- if(k6==0) //再次判断按键是否按下
- {
- LSA=1;LSB=0;LSC=1;//显示第 5 位
- }
- while(!k6); //检测按键是否松开
- }
- }
- void keypros7()
- {
- if(k7==0) //检测按键 K7 是否按下
- {
- delay(1000); //消除抖动 一般大约 1ms
- if(k7==0) //再次判断按键是否按下
- {
- LSA=0;LSB=1;LSC=1;//显示第 6 位
- }
- while(!k7); //检测按键是否松开
- }
- }
- void keypros8()
- {
- if(k8==0) //检测按键 K8 是否按下
- {
- delay(1000); //消除抖动 一般大约 1ms
- if(k8==0) //再次判断按键是否按下
- {
- LSA=1;LSB=1;LSC=1;//显示第 7 位
- }
- while(!k8); //检测按键是否松开
- }
- }
- void DigDisplay()
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- switch(i) //位选,选择点亮的数码管,
- {
- case(0):
- keypros1();
- break;//显示第 0 位
- case(1):
- keypros2();
- break;//显示第 1 位
- case(2):
- keypros3();
- break;//显示第 2 位
- case(3):
- keypros4();
- break;//显示第 3 位
- case(4):
- keypros5();
- break;//显示第 4 位
- case(5):
- keypros6();
- break;//显示第 5 位
- case(6):
- keypros7();
- break;//显示第 6 位
- case(7):
- keypros8();
- break;//显示第 7 位
- }
- P2=smgduan[i];//发送段码
- delay(10000); //间隔一段时间扫描
- P2=0x00;//消隐
- }
- }
- void main()
- {
- while(1)
- {
- DigDisplay(); //数码管显示函数
- }
- }
复制代码
|