1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > STC89C52单片机 数码管静态显示

STC89C52单片机 数码管静态显示

时间:2019-09-24 18:00:26

相关推荐

STC89C52单片机 数码管静态显示

数码管显示原理

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

静态与动态显示

静态显示:

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

缺点:使用的IO口比较多。

动态显示

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

74HC573锁存器的工作原理

芯片文档查询网址: /

上拉电阻的作用

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

当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; // 锁存段选数据}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。