找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2|回复: 0
打印 上一主题 下一主题
收起左侧

求助:LCD12864显示不了中文 “三”

[复制链接]
跳转到指定楼层
楼主
   我在编写时钟时遇到显示中文“三”时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]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶顶 踩踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表