【STC15单片机】按键&静态数码管显示0~9

简介: 【STC15单片机】按键&静态数码管显示0~9


单片机型号说明:IAP15F2K61S2

新建工程时单片机型号选择STC15F2K60S2


本开发板支持的显示器件:

LED灯数码管、点阵屏、LCD1602、LCD12864


数码管工作原理

蓝桥杯单片机开发板所用的数码管共阳极的,给0就亮

e248de59cf5af5cd94da2bae4ce50fb0_038e5ebeb95c4c7d82eeb0a332722404.png

c36b969765fa2b22f9bb77009be0dcfa_96b600c553214977aceb83a0d8e47336.png

假设想用一位数码管显示一个0,那个就g和dp给1,使其灭

其他都给0,从dp到g到f到e.....0.到a这样数1和0,

就是1100 0000 = 0xC0

其他的可以自己推导

51单片机中数码管码表推导文章链接:

image.png

不懂得可以查看上面这篇文章

27ec459bd48297cb219f409490feac4c_02265133a5da4b0da95985754a4ddbae.gif


共阳极数码管段码表

f386663eee5c943e312cb849dd65197f_266d9c8623054b8eb414bd5a10579e26.png

将数码管段码表推导一下,存放在数组里,用的时候非常方便

1. /*共阳极码表 ABCDEF都是大写*/
2. unsigned char tab[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x80, 0xC6, 0xC0, 0x86, 0x8E, 0xBF, 0xFF};
3.             //0     1     2     3     4     5     6     7     8     9     A     B     C     D     E     F     -    灭

共阴极数码管段码表

1. //共阴极数码管段码表
2. char NixieTable[20]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};
3.         //number    0    1    2    3    4    5    6    7    8    9    A    B    C   D    E    F // 空 0x00
4. 
5. //共阴极数码管段码或上一个0x80,就带小数点了( |0x80 )
6. //带小数点  共阴数码管段码
7. unsigned char code Pnumber[] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};

程序部分:0、1、2、3间隔0.5s循环显示

1. #include <STC15F2K60S2.H>
2. 
3. void Delay_ms(int xms) //15单片机延时函数
4. {
5.  int i;
6.  long a;
7.  for (i = xms; i > 0; i --)
8.    for(a = 810; a > 0; a --);
9. }
10. 
11. void main()
12. {
13.   P2 = 0xA0; P0 = 0x00; P2 = 0xC0; P0 = 0xFF; P2 = 0xFF;  //初始化,P0控制数码管
14.   while(1)
15.   {
16.     P0 = 0xC0;
17.     Delay_ms(500);
18.     P0 = 0xF9;
19.     Delay_ms(500);
20.     P0 = 0xA4;
21.     Delay_ms(500);
22.     P0 = 0xB0;
23.     Delay_ms(500);
24.   }
25. }

效果是啥玩意啊,八个数码管全亮了,而且延时时间也不是0.5s,感觉不太专业的样子fa400034207e6508b72acb382d89d0a3_2c0545bcb0a7400daf7c4182c5473067.jpeg42aefad3efad9f085df979ff142250c1_9a5d20849e8e43909b072105ee80ab3d.jpeg


矩阵键盘&数码管综合应用

现在将矩阵键盘数码管静态显示结合起来,实现按键,显示对应的数值

数码管部分  在上面

矩阵按键部分   上一篇文章有源码   有需要的童靴直接粘贴了

image.png

主控部分   将按键数值依次对应1234567890ABCDEF

1. #include <STC15F2K60S2.H>
2. #include "juzhen.h"
3. #include "smg.h"
4. 
5. #define uchar unsigned char
6. 
7. uchar keynum;
8. 
9. void main()
10. {
11.   P2 = 0xA0; P0 = 0x00; P2 = 0xC0; P0 = 0xFF; P2 = 0xFF;  //初始化,P0控制数码管
12. 
13.   while(1)
14.   {
15.     keynum = KeyJZ_16();
16. 
17.     if     (keynum == 7)  P0 = tab[1];
18.     else if (keynum == 11)  P0 = tab[2];
19.     else if (keynum == 15)  P0 = tab[3];
20.     else if (keynum == 19)  P0 = tab[4];
21.     else if (keynum == 6) P0 = tab[5];
22.     else if (keynum == 10)  P0 = tab[6];
23.     else if (keynum == 14)  P0 = tab[7];
24.     else if (keynum == 18)  P0 = tab[8];
25.     else if (keynum == 5) P0 = tab[9];
26.     else if (keynum == 9) P0 = tab[0];
27.     else if (keynum == 13)  P0 = tab[10];
28.     else if (keynum == 17)  P0 = tab[11];
29.     else if (keynum == 4) P0 = tab[12];
30.     else if (keynum == 8) P0 = tab[13];
31.     else if (keynum == 12)  P0 = tab[14];
32.     else if (keynum == 16)  P0 = tab[15]; 
33.   }
34. }


相关文章
|
5天前
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
|
5天前
【51单片机】在LCD1602上显示时间:包含按键进行校准时间+闹钟功能:按键设置闹钟响铃时间,以及响铃的时间长度
【51单片机】在LCD1602上显示时间:包含按键进行校准时间+闹钟功能:按键设置闹钟响铃时间,以及响铃的时间长度
|
5天前
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
|
5天前
|
C语言
【51单片机】LCD1602显示字符串,时间、时间+按键校准、秒表计时的功能代码。
【51单片机】LCD1602显示字符串,时间、时间+按键校准、秒表计时的功能代码。
|
5天前
51单片机汇编语言点亮一位数码管,并计时(超详细分析汇编语言)
51单片机汇编语言点亮一位数码管,并计时(超详细分析汇编语言)
|
5天前
【51单片机】开发板上矩阵键盘键码在数码管上的显示,按下键盘在数码管上显示对应段码
【51单片机】开发板上矩阵键盘键码在数码管上的显示,按下键盘在数码管上显示对应段码
|
5天前
|
算法
51单片机不用定时器的数码管倒计时
51单片机不用定时器的数码管倒计时
【51单片机】利用【时间延迟】的原理规避【按键抖动问题】
【51单片机】利用【时间延迟】的原理规避【按键抖动问题】
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)

热门文章

最新文章