声明:【51单片机学习过程记录】全是我自己学习、实践所记录的过程,我只是菜鸟,所有论点和观点仅代表我个人,不能确定是这个技术的真理。我的目的是学习和有可能成为可以向别人分享的经验,因此有错误我会虚心接受,并认真改正。
aa原理图分析:
和上一篇 数码管的静态显示 分析一样。
bb代码程序:
#include <reg52.h>
#define uchar unsigned char
sbit duan=P2^6;
sbit wei=P2^7;
uchar code table[]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f};
/*
code的作用是告诉单片机,定义的数据要放在ROM(程序存储区)里面,其实是
相当于汇编里面的寻址MOVX,因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器),
所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data是存入RAM的意思。
*/
void delay(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
uchar i;
while(1)
{
/**************************************************************
P0=0xfc;
wei=1;
wei=0;
P0=0x3f;
duan=1;
duan=0;
delay();
静态显示中代码,此处无需给P0赋值0xff去消影,改变在于,
先给P0赋予处理的值,然后再对MC74HC573的LE锁存脚进行操作,
即置高和置低,那么上一步操作中P0的值则不会对接下来的操作造成影响。
***************************************************************/
for(i=0;i<10;i++)
{
P0=0xfe; //第一个数码管
wei=1;
wei=0;
P0=table[0]; //显示0
duan=1;
duan=0;
delay(10);
P0=0xfd; //第二个数码管
wei=1;
wei=0;
P0=table[1]; //显示1
duan=1;
duan=0;
delay(10);
}
}
}
cc代码分析:
为代码中的注释部分。
dd总结:
数码管的静态显示,是指定某一个或者几个数码管,然后显示数据。
动态显示方式,所谓动态显示,是指无论在任何时刻,只有一个数码管处于显示状态,每个数码管轮流显示。
当数码管越多的时候,动态显示就可以采用扫描方式用更少的IO去实现显示,即节省IO,这是动态显示的优点。
动态显示的缺点是占用cpu的资源较多。
(静态和动态显示的比较可以百度查阅)