一、数码管闪烁
笔者在进行DS18B20温度的实验时,经常遇到数码管闪烁的问题。
https://www.bilibili.com/video/BV1Bt41187hw/?p=16&vd_source=50846e5ab270f8c09f7f666b568d6b30
解决办法
在DS18B20控制代码中多次插入动态刷新数码管的函数,亲测有效。
void Read_DS18B20_temp()
{
unsigned char LSB, MSB;
init_ds18b20();
Display_Dynamic(); //动态刷新数码管
Write_DS18B20(0xCC);
Write_DS18B20(0x44);
Display_Dynamic(); //动态刷新数码管
init_ds18b20();
Display_Dynamic(); //动态刷新数码管
Write_DS18B20(0xCC);
Write_DS18B20(0xBE);
LSB = Read_DS18B20();
MSB = Read_DS18B20();
Display_Dynamic(); //动态刷新数码管
temp = MSB;
temp = (temp << 8) | LSB;
temp >>= 4;
Display_Dynamic(); //动态刷新数码管
}
二、数码管显示亮度低
实验:小蜜蜂数码管实验(不放链接是因为被举报了(⊙﹏⊙)
解决办法
数码管显示亮度取决于延时时长,延时越长,数码管越亮。
void DelayLED(unsigned int t) //LED延时函数
{
while(t--)
{
DisplaySMG(); //延时期间保持数码管刷新
}
}
void LED_Control()
{
HC573(4, 0x7f);
DelayLED(200);
HC573(4, 0xff);
DelayLED(200);
num1++;
if (num1 == 100)
{
num1 = 0;
}
if(turn == 0) //LED翻转
{
turn = 1;
HC573(4, 0xfc); //1111 1100
DelayLED(200); //延时决定LED亮度
}
else
{
turn = 0;
HC573(4,0xff); //1111 1111
DelayLED(200);
}
num2++;
if (num2 == 10)
{
num2 = 0;
}
}