我在编写时钟时遇到显示中文“三”时LCD12864直接不显示,有碰到过的朋友吗
#include "config.h"
#include "AI8051U_Delay.h"
#include "AI8051U_RTC.h"
#include "AI8051U_GPIO.h"
#include "AI8051U_UART.h"
#include "AI8051U_NVIC.h"
#include "AI8051U_Timer.h"
#include "key_drv.h"
#include "lcd12864.h"
#include "display_time.h"
#include "set_time.h"
#include "stdio.h"
// 1. 枚举必须是合法的标识符常量
typedef enum
{
TASK1_DISPLAY = 1, // 任务1:显示时间
TASK2_SETTING, // 任务2:设置时间
TASK3_RESERVED // 任务3:预留
} Task_State;
// 2. 默认任务用枚举常量名
Task_State current_task = TASK1_DISPLAY;
bit task_init_flag = 0;
u8 key_val; // 全局按键变量,主循环和 set_time.c 都会用到
// 直接声明你现成的函数
extern void Dis_Time_Init(void);
extern void Dis_Time_Update(void);
extern void Set_Time_Init(void);
extern void Set_Time_Update(void);
extern void task3_Init(void);
extern void task3_Run(void);
void task3_Init(void)
{
// 预留
}
void task3_Run(void)
{
// 预留
}
void main(void)
{
// 3. 函数指针数组照常填函数名
void (*task_run[])(void) = {0, Dis_Time_Update, Set_Time_Update, task3_Run};
void (*task_init[])(void) = {0, Dis_Time_Init, Set_Time_Init, task3_Init};
WTST = 0;
EAXSFR();
CKCON = 0;
GPIO_config();
Timer_config();
UART_config();
RTC_config();
KeyDrvInit();
Lcd12864_Init();
delay_ms(500);
EA = 1;
Lcd12864_SetPos(3, 1);
Lcd12864_WriteCN("星");
Lcd12864_WriteCN("期");
Lcd12864_SetPos(3, 3);
Lcd12864_WriteCN("三");
Lcd12864_SetPos(3, 4);
Lcd12864_WriteCN("星");
Lcd12864_WriteCN("期");
Lcd12864_WriteCN("四");
delay_ms(500);
delay_ms(500);
delay_ms(500);
printf("System Init OK!\r\n");
while (1)
{
static unsigned char task_switch_flag = 0;
key_val = GetKeyVal();
// Key1 任务切换:1(显示) -> 2(设置) -> 3(预留) -> 1(显示)
if(key_val == 1 && !task_switch_flag)
{
task_switch_flag = 1;
task_init_flag = 0;
current_task = (current_task % 3) + 1;
}
else if(key_val == 0 && task_switch_flag)
{
task_switch_flag = 0;
}
if(!task_init_flag)
{
task_init[current_task]();
task_init_flag = 1;
}
task_run[current_task]();
}
}
[img]
|