动态数码管显示
动态数码管显示,仿真和显示+手把手软件仿真和实物仿真教学
·
动态数码管显示
前言
动态数码管显示,程序步骤,
1.了解动态数码管显示原理
2.编程实现
一、什么是动态数码管?
1.静态数码管
给对应的段码就能显示相应的数字…
2.动态数码管
二、编程实现步骤
简单理解:三极管是NPN 级, b级连接单片机,单片机引脚输出“1”,be级电压约等于0.7v,ce级导通,数码管得电,
反之,单片机io口输出“0”,be级电压为0,数码管没有电流流过,失电。
- 简述
三极管开关属于电流控制开关,Ib控制Ic,与MOSFET管电压控制相反:
NPN和PNP的电流方向、电压极性相反。
1)NPN :以B→E 电流控制C→E 电流。 正常放大时, 即VC > VB > VE
2)PNP :以E→B 电流控制E→C 电流。 正常放大时, 即VE > VB > VC
总之,VB在中间,VC 和 VE 在两边。而且BJT各极的电压与电流方向是一致的,不会出现电流从低电位处流行高电位的情况。
NPN和PNP区别:箭头所指,即电流流向。如图:
PNP的反向电流可以使用I/O口直接提供,注意I/O口的最大承受电压,最好E极电压等于I/O口的高电平。对于E电压比较大的情况下可以使用文章最后的电源控制电路。
原理图:
1.基本步骤
- 1.给段码
- 2.给位选
2.写程序
代码如下(示例):
显示一位数码管
在这里插入代码片
P0=0XF9; //“1”的共阳级段码
P2=0X01;//第一位数码管的位选 0000 0001 除了第一个数码管别的都是灭的
3.仿真实现
新建工程
在这里插入代码片
#include <reg51.h>
void delay(unsigned int ms)// 0-65535
{
while(ms--);
}
unsigned char leddata[]={
0xC0, //"0"
0xF9, //"1"
0xA4, //"2"
0xB0, //"3"
0x99, //"4"
0x92, //"5"
0x82, //"6"
0xF8, //"7"
0x80, //"8"
0x90, //"9"
0x88, //"A"
0x83, //"B"
0xC6, //"C"
0xA1, //"D"
0x86, //"E"
0x8E, //"F"
0x89, //"H"
0xC7, //"L"
0xC8, //"n"
0xC1, //"u"
0x8C, //"P"
0xA3, //"o"
0xBF, //"-"
0xFF, //熄灭
0xFF //自定义
};
void main()
{
char i=0;
while(1)
{
for(i=0;i<8;i++)
{
P0=leddata[i+1];//段码 因为从开始,但是i从开始,所以用i+1
P2=0X01<<i;//位选 i=0,左移0位 0000 0001 i=1 0000 0010
delay(10000);//为了让你看见这个数码管亮了,所以延时
}
}
}
显示有问题:效果不是8个一起亮
修改延时可行吗?
自己测?
使用不修改延时的方法
解释:
4.硬件实现
在这里插入代码片
#include <reg51.h>
void delay(unsigned int ms)// 0-65535
{
while(ms--);
}
//unsigned char leddata[]={
//
// 0xC0, //"0"
// 0xF9, //"1"
// 0xA4, //"2"
// 0xB0, //"3"
// 0x99, //"4"
// 0x92, //"5"
// 0x82, //"6"
// 0xF8, //"7"
// 0x80, //"8"
// 0x90, //"9"
// 0x88, //"A"
// 0x83, //"B"
// 0xC6, //"C"
// 0xA1, //"D"
// 0x86, //"E"
// 0x8E, //"F"
// 0x89, //"H"
// 0xC7, //"L"
// 0xC8, //"n"
// 0xC1, //"u"
// 0x8C, //"P"
// 0xA3, //"o"
// 0xBF, //"-"
// 0xFF, //熄灭
// 0xFF //自定义
//
// };
unsigned char leddata[]={
0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
0x77, //"A"
0x7C, //"B"
0x39, //"C"
0x5E, //"D"
0x79, //"E"
0x71, //"F"
0x76, //"H"
0x38, //"L"
0x37, //"n"
0x3E, //"u"
0x73, //"P"
0x5C, //"o"
0x40, //"-"
0x00, //熄灭
0x00 //自定义
};
void main()
{
char i=0;
while(1)
{
for(i=0;i<8;i++)
{
P0=leddata[i+1];//段码 1 2
// P2=0X01<<i; //位选 1 2
P2=i<<2; //思考
delay(100); //延时
P0=0x00; //全灭
}
}
}
三、手把手视频
3.1 软件仿真手把手视频
20250425_153426仿真数码管
3.2 硬件仿真手把手视频
20250425_160949实物数码管
效果完美
总结
讲解了数码管静态显示和动态显示的原理,并代码实现
更多推荐
所有评论(0)