51单片机学习之陆 —— 1.5 数码管的动态显示
扫描二维码
随时随地手机看文章
1 学习回顾,上节课学习了静态显示
我们显示了第一位数码管,并让其显示了8
现在我们试着多一些花样
1 点亮所有数码管让其显示6
编程
代码
注意上面已经写好了函数leddata
P0 = ox00;让所有数码管都打开
P0 = leddata[3];让数码管显示三
这时就达成了我们的目的了
2 让数码管从0到9循环显示间隔500毫秒
编程
代码:
#include
2 #define uint unsigned int
3 #define uchar unsigned char
4 sbit du = P2^6; //声明U1锁存器的锁存端
5 sbit we = P2^7; //声明U2锁存器的锁存端
6 uchar i;
7
8 unsigned code leddata[]={
9
10 0x3F, //"0"
11 0x06, //"1"
12 0x5B, //"2"
13 0x4F, //"3"
14 0x66, //"4"
15 0x6D, //"5"
16 0x7D, //"6"
17 0x07, //"7"
18 0x7F, //"8"
19 0x6F, //"9"
20 0x77, //"A"
21 0x7C, //"B"
22 0x39, //"C"
23 0x5E, //"D"
24 0x79, //"E"
25 0x71, //"F"
26 0x76, //"H"
27 0x38, //"L"
28 0x37, //"n"
29 0x3E, //"u"
30 0x73, //"P"
31 0x5C, //"o"
32 0x40, //"-"
33 0x00, //熄灭
34 0x00 //自定义
35
36 };
37
38 void delay(uint xms)
39 {
40 uint x, y;
41 for(x=xms; x>0; x--)
42 for(y=114; y>0; y--);
43 }
44
45 void main()
46 {
47 while(1)
48 {
49
50 we = 1; //打开U2锁存器
51 P0 = 0x00; //送入位选信号
52 we = 0; //关闭U2锁存器 其数据已被锁存
53
54
55 du = 1; //打开U1锁存器
56 P0 = leddata[i]; //送入端选信号
57 du = 0; //关闭U1锁存器
58
59 delay(500);
60 i++;
61 if(i == 10)
62 i=0;
63
64
65 }
66 }
头文件和宏定义
延时函数, 当y=114时,在11.0592mhz时差不多1ms
要延时500ms 就让x = 500即可
while 大循环
段选中
P0 = leddata[i];
其中i是定义的变量,没赋初值时自动赋初值0
延时500ms 后i++
由于是0 - 9
所以用if 判断i==10
假如加到10就清零。
这样就实现了我们的目标
2 数码管的动态显示
原理 :
数码管动态显示的实质就是利用了人眼视觉的暂留和二极管的余晖作用
由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
2 编程 目标-第一个数码管显示1 时间500ms 熄灭 第二个显示2 时间500ms
到第六个显示6 一直循环下去
#include2#defineuintunsignedint3#defineucharunsignedchar4sbitdu=P2^6;5sbitwe=P2^7;6unsignedcodeleddata[]={780x3F,//"0"90x06,//"1"100x5B,//"2"110x4F,//"3"120x66,//"4"130x6D,//"5"140x7D,//"6"150x07,//"7"160x7F,//"8"170x6F,//"9"180x77,//"A"190x7C,//"B"200x39,//"C"210x5E,//"D"220x79,//"E"230x71,//"F"240x76,//"H"250x38,//"L"260x37,//"n"270x3E,//"u"280x73,//"P"290x5C,//"o"300x40,//"-"310x00,//熄灭320x00//自定义3334};353637voiddelay(uintxms)38{39uintx,y;40for(x=xms;x>0;x--)41for(y=114;y>0;y--);42}4344voidmain()45{46while(1)47{48du=1;49P0=leddata[1];50du=0;51P0=0xff;52we=1;53P0=0xfe;54we=0;55delay(500);5657du=1;58P0=leddata[2];59du=0;60P0=0xff;61we=1;62P0=0xfd;63we=0;64delay(500);6566du=1;67P0=leddata[3];68du=0;69P0=0xff;70we=1;71P0=0xfb;72we=0;73delay(500);7475du=1;76P0=leddata[4];77du=0;78P0=0xff;79we=1;80P0=0xf7;81we=0;82delay(500);8384du=1;85P0=leddata[5];86du=0;87P0=0xff;88we=1;89P0=0xef;90we=0;91delay(500);9293du=1;94P0=leddata[6];95du=0;96P0=0xff;97we=1;98P0=0xdf;99we=0;100delay(500);101102}103104105106107}