欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

STC89C52单片机 数码管静态显示

发布时间:2025/5/22 编程问答 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 STC89C52单片机 数码管静态显示 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

数码管显示原理

数码管根据内部连接不同分为共阴极和共阳极。八段数码管内部有8颗LED组成,如果想要显示特定字形只需控制相应的LED亮起,其他LED熄灭即可。

静态与动态显示

静态显示:

LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个9位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。
缺点:使用的IO口比较多。

动态显示

动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余晖和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。

74HC573锁存器的工作原理

芯片文档查询网址: https://www.alldatasheet.com/

上拉电阻的作用

上拉就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用。下位同理,也是将不确定的信号通过一个电阻钳位在低电平。

当P0口作为输入、输出口时,上电复位后处于开漏模式。P0口内部无上拉电阻,所以作I/0口必须外接10K-4.7K的上拉电阻。

点亮一位数字"1"

#include <reg52.h> #include <intrins.h>#define uint unsigned int #define uchar unsigned charsbit DU = P2^6;//数码管段选 sbit WE = P2^7;//数码管段选void main(){ // main函数自身会循环WE = 1; // 打开位选锁存器P0 = 0XFE; // 1111 1110 选通第一位数码管 // P0 = 0X00; // 0000 0000 表示选通所有位数码管WE = 0; // 锁存位选数据DU = 1; // 打开段选锁存器P0 = 0X06; // 0000 0110 显示“1”DU = 0; // 锁存段选数据while(1){// P0 = 0X01; // 当锁存器中的数值被锁定后,无法直接修改数码管的值,需要打开位选锁存器才能进行修改} }

点亮两位数字"2"

#include <reg52.h> #include <intrins.h>#define uint unsigned int #define uchar unsigned charsbit DU = P2^6;//数码管段选 sbit WE = P2^7;//数码管段选void main(){ // main函数自身会循环WE = 1; // 打开位选锁存器P0 = 0XFC; // 1111 1100 选通第一位和第二位数码管 // P0 = 0X00; // 0000 0000 表示选通所有位数码管WE = 0; // 锁存位选数据DU = 1; // 打开段选锁存器P0 = 0X5B; // 0101 1011 显示“2”DU = 0; // 锁存段选数据while(1){// P0 = 0X01; // 当锁存器中的数值被锁定后,无法直接修改数码管的值,需要打开锁存器才能进行修改} }

点亮三位数字"3"

#include <reg52.h> #include <intrins.h>#define uint unsigned int #define uchar unsigned charsbit DU = P2^6;//数码管段选 sbit WE = P2^7;//数码管段选void main(){ // main函数自身会循环WE = 1; // 打开位选锁存器P0 = 0XF8; // 1111 1000 选通第一位、第二位和第三位数码管 // P0 = 0X00; // 0000 0000 表示选通所有位数码管WE = 0; // 锁存位选数据DU = 1; // 打开段选锁存器P0 = 0X4F; // 0100 1111 显示“3”DU = 0; // 锁存段选数据while(1){// P0 = 0X01; // 当锁存器中的数值被锁定后,无法直接修改数码管的值,需要打开锁存器才能进行修改} }

点亮数码管最后一位数字"8"

#include <reg52.h> #include <intrins.h>#define uint unsigned int #define uchar unsigned charsbit DU = P2^6;//数码管段选 sbit WE = P2^7;//数码管段选void main(){ // main函数自身会循环WE = 1; // 打开位选锁存器P0 = 0X7F; // 1111 1000 选通第八位数码管 // P0 = 0X00; // 0000 0000 表示选通所有位数码管WE = 0; // 锁存位选数据DU = 1; // 打开段选锁存器P0 = 0X7F; // 0111 1111 显示“8”DU = 0; // 锁存段选数据while(1){// P0 = 0X01; // 当锁存器中的数值被锁定后,无法直接修改数码管的值,需要打开锁存器才能进行修改} }

使第三个(从左至右)数码管显示数字 6

#include <reg52.h> #include <intrins.h>#define uint unsigned int #define uchar unsigned charsbit DU = P2^6;//数码管段选 sbit WE = P2^7;//数码管段选void main(){ // main函数自身会循环P0 = 0X00; //清除断码WE = 1; // 打开位选锁存器P0 = 0X03; // 0000 0011 选通第3位、第4位、第5位、第6位、第7位、第8位数码管 // P0 = 0X00; // 0000 0000 表示选通所有位数码管WE = 0; // 锁存位选数据DU = 1; // 打开段选锁存器P0 = 0X7D; // 0111 1101 对应的数码管字母 acdefg 显示“6”DU = 0; // 锁存段选数据 }

总结

以上是生活随笔为你收集整理的STC89C52单片机 数码管静态显示的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。