- 打卡等级:常住居民III
- 打卡总天数:167
- 最近打卡:2025-06-17 00:02:12
中级会员
- 积分
- 369
|
3个按键,一个增,一个减,一个清零,STC15F204单片机,TM1652驱动4位LED数码管,按增键数值逐一增加,不松手时快速增加;按减键则相反。按清除键显示清零。这些都正常。
后来增加了一个确认OK键,要求按下后记住当前数值,断电后要求显示以前的数值,增加了数值记忆模块,在主程序里添加了两行代码,现在不显示了,求指点哪里有误。
主代码:
#include "STC15.H"
#include "TM1652.h"
#include "key.h"
#include "memory.h"
// 声明全局变量
unsigned int count = 0; // 关键:确保count为全局变量
typedef unsigned char u8;
typedef unsigned int u16;
const u8 CODE[16] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
void Delay5ms(void) //@11.0592MHz
{
unsigned char data i, j;
i = 54;
j = 199;
do
{
while (--j);
} while (--i);
}
void TM_Digtal_Display(u16 num)
{
tm1652_send_data(0x08); // 启动命令
// 分解数值(确保万位非零时有显示,否则补零)
u8 data[5] = {
CODE[num / 10000],
CODE[(num % 10000) / 1000],
CODE[(num % 1000) / 100],
CODE[(num % 100) / 10],
CODE[num % 10]
};
for (u8 i = 0; i < 5; i++)
{
tm1652_send_data(data[i]);
}
Delay5ms();
tm1652_send_data(0x1F); // 最高亮度
tm1652_send_data(0xFE); // 结束命令
}
void main()
{
u16 delaytick = 0;
TM_Digtal_Display(0); // 初始化显示
// 加载并显示EEPROM数值
count = LoadCountFromEEPROM(); // 关键:接收返回值
TM_Digtal_Display(count);
while (1)
{
key();
if (++delaytick == 10)
{
delaytick = 0;
TM_Digtal_Display(count);
}
Delay5ms();
}
}
|
|