单片机交流
直播中

李萍

7年用户 1406经验值
私信 关注
[问答]

如何利用51单片机实现LED和数码管静态显示?

如何利用51单片机实现LED和数码管静态显示?

回帖(1)

刘庸宏

2021-10-21 16:54:54
前言

最近在学习C51单片机,我的开发板是TX-1C,看的视频是郭天祥。写这个原因一则是温故而知新,二则自己写程序的时候老是忘记比如中断初始化要控制那些位,以后方便自己查询^-^。
LED






其中74HC573功能表:





从两图中可以知道:OE置L,LE置H,输入和输出一样(89C52芯片周围的引脚默认为高电平)只要将P1口中对应的引脚置为0,LED灯就会亮
#include***it led = P1 ^ 0;  //***it 可以进行位操作其中'^'                    //后面接的数表示控制了前面(P1)                    //的第几位,也可直接 比如P1 = 0xf0                    //将LED 1,2,3,4点亮void main(){    while(1){        led = 0;    }} 数码管静态显示






说明:通过对P0控制wela,选择要显示哪几个数码管,将wela = 0,锁存住前面的信息,然后打开dula,因为是共阴极所以只要使得相应的那一位为1就显示。





比如上图abcdef = 1 其余为0,就显示出0

//控制前三位从0x0到0xf循环
#include
#define uint unsigned int
#define uchar unsigned char
***it dula=P2^6;
***it wela=P2^7;
uchar num;
uchar code table[]={         
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};   //code的作用是告诉单片机,定义的数据要放在ROM(程序存储区)里面
void delay(uint z);
void main()
{
    wela=1;//选择要打开哪几个数码管显示
    P0=0xf8;//0xf8 == 11111000B 就是第1,2,3位打开
    wela=0;//根据74HC573可知,这样输出的数据都是之前的,即锁存住了前面的值
    while(1){
        dula=1;
        P0=table[(num ++) % 16];
        dula=0;
        delay(1000);       //延时函数
    }
}


void delay(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
总结

没啥好总结的:-),入坑51单片机最简单的两个案例。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分