一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 532|回复: 4
收起左侧

STC8数据保存串口打印LCD12864

[复制链接]
发表于 2024-12-6 16:12 | 显示全部楼层 |阅读模式
学习单片机过程中经验总结程序源码,包含多级菜单显示功能//引用头文件
/*-------------------------------------------------------------*/
#include "Mu_menu.h"
#include "delay.h"
//#include "AHT10_get.h"
#include "AHT10i2c_data.h"
#include "LCD.h"
#include "BMP_Display.h"
#include "Key.h"

//菜单的实现
/*-------------------------------------------------------------*/
//void Read_TempAndHum(void);
//菜单的实现
/*-------------------------------------------------------------*/
bit S14a=0;
bit S14b=0;
bit S14c=0;
bit page = 0;

void (*KeyFuncPtr)();            //定义按键功能指针extern

u8 variable = 0;
uint8_t code s0[]="OMenuTest1       ";
uint8_t code s1[]="1-温湿度显示2   ";
uint8_t code s2[]="2-曲线显示3      ";
uint8_t code s3[]="3-测试画面4      ";
uint8_t code s4[]="4-测试画面5      ";
uint8_t code s5[]="5-测试画面6  ";
uint8_t code s6[]="6-测试画面7     ";
uint8_t code s7[]="7-测试画面8   ";
uint8_t code s8[]="8-测试画面9      ";
uint8_t code s9[]="9-测试画面10     ";
uint8_t code s10[]="A-Han-          ";
uint8_t code s11[]="B-ceshiv1-       ";
uint8_t code s12[]="C-系统设置-      ";
uint8_t code s13[]="D-下一页-   ";
uint8_t code s14[]="E-Return main-   ";



//菜单的实现
/*-------------------------------------------------------------*/
/******************************************************************
功能: 各显示窗口
输入:        无
输出: 无
版本:
作者:
修改日期:
说明:
                1. 修改画面显示
                2.
******************************************************************/
void MAIN_Stat (void)                   //1层-1
{
        Lcd_P16x16Ch(0,0,"主菜单画面",0);   
        Lcd_P12x12Ch(0,2,s1,0);
        Lcd_P12x12Ch(0,4,s2,0);
        Lcd_P12x12Ch(0,6,s3,0);

}
/*-------------------------------------------------------------*/
void Stat0 (void)                   //1层-1
{
        Lcd_P16x16Ch(0,0,"主菜单画面1",0);   
        Lcd_P12x12Ch(0,2,s1,0);
        Lcd_P12x12Ch(0,4,s2,0);
        Lcd_P12x12Ch(0,6,s3,0);

}
/*-------------------------------------------------------------*/
void Stat1(void)                   //1层-2
{       

        Lcd_P16x16Ch(0,0,"主菜单画面2",0);
        Lcd_P12x12Ch(120,2,"<",0);
        Lcd_P12x12Ch(0,2,s1,0);
        Lcd_P12x12Ch(0,4,s2,0);
        Lcd_P12x12Ch(0,6,s3,0);
}
/*-------------------------------------------------------------*/
void Stat2(void)                   //1层-3
{

        Lcd_P16x16Ch(0,0,"主菜单画面3",0);
        Lcd_P12x12Ch(120,4,"<",0);
        Lcd_P12x12Ch(0,2,s1,0);
        Lcd_P12x12Ch(0,4,s2,0);
        Lcd_P12x12Ch(0,6,s3,0);

}
/*-------------------------------------------------------------*/
void Stat3(void)                   //1层-4  返回主页
{

        Lcd_P16x16Ch(0,0,"主菜单画面4",0);
        Lcd_P12x12Ch(120,6,"<",0);
        Lcd_P12x12Ch(0,2,s1,0);
        Lcd_P12x12Ch(0,4,s2,0);
        Lcd_P12x12Ch(0,6,s3,0);
}
/*-------------------------------------------------------------*/
void Stat4(void)                   //1层-5
{
        Lcd_P16x16Ch(0,0,"主菜单画面5",0);
        Lcd_P12x12Ch(120,6,"<",0);
        Lcd_P12x12Ch(0,2,s2,0);
        Lcd_P12x12Ch(0,4,s3,0);
        Lcd_P12x12Ch(0,6,s12,0);
}
/*-----------------------------第一页第七行--------------------------------*/
void Stat5(void)                   //1层-6
{
        Lcd_P16x16Ch(0,0,"主菜单画面6",0);
        Lcd_P12x12Ch(120,6,"<",0);
        Lcd_P12x12Ch(0,2,s3,0);
        Lcd_P12x12Ch(0,4,s12,0);
        Lcd_P12x12Ch(0,6,s13,0);

}
/*-------------------------------------------------------------*/
void Stat6(void)                   //2层-1
{
        Lcd_P16x16Ch(0,0,"液晶屏测试1",0);
        Lcd_P12x12Ch(120,2,"<",0);
//        Lcd_P12x12Ch(120,2," ",0);
        Lcd_P12x12Ch(0,2,s3,0);
        Lcd_P12x12Ch(0,3,s4,0);
        Lcd_P12x12Ch(0,4,s5,0);
        Lcd_P12x12Ch(0,5,s6,0);
        Lcd_P12x12Ch(0,6,s11,0);

}
/*-------------------------------------------------------------*/
void Stat7(void)                   //2层-2
{
        Lcd_P16x16Ch(0,0,"液晶屏测试2",0);
        Lcd_P12x12Ch(120,3,"<",0);
//        Lcd_P12x12Ch(120,3," ",0);
        Lcd_P12x12Ch(0,2,s3,0);
        Lcd_P12x12Ch(0,3,s4,0);
        Lcd_P12x12Ch(0,4,s5,0);
        Lcd_P12x12Ch(0,5,s6,0);
        Lcd_P12x12Ch(0,6,s11,0);
}
/*-------------------------------------------------------------*/
void Stat8(void)
{
        Lcd_P16x16Ch(0,0,"液晶屏测试3",0);
        Lcd_P12x12Ch(120,4,"<",0);
//        Lcd_P12x12Ch(120,4," ",0);
        Lcd_P12x12Ch(0,2,s3,0);
        Lcd_P12x12Ch(0,3,s4,0);
        Lcd_P12x12Ch(0,4,s5,0);
        Lcd_P12x12Ch(0,5,s6,0);
        Lcd_P12x12Ch(0,6,s11,0);
}
/*-------------------------------------------------------------*/
void Stat9(void)
{
        Lcd_P16x16Ch(0,0,"液晶屏测试4",0);
        Lcd_P12x12Ch(120,5,"<",0);
//        Lcd_P12x12Ch(120,5," ",0);
        Lcd_P12x12Ch(0,2,s3,0);
        Lcd_P12x12Ch(0,3,s4,0);
        Lcd_P12x12Ch(0,4,s5,0);
        Lcd_P12x12Ch(0,5,s6,0);
        Lcd_P12x12Ch(0,6,s11,0);
}         
/*-------------------第二页第七行------------------------------------------*/
void Stat10(void)
{
        Lcd_P16x16Ch(0,0,"液晶屏测试5",0);
        Lcd_P12x12Ch(120,6,"<",0);
//        Lcd_P12x12Ch(120,6," ",0);
        Lcd_P12x12Ch(0,2,s3,0);
        Lcd_P12x12Ch(0,3,s4,0);
        Lcd_P12x12Ch(0,4,s5,0);
        Lcd_P12x12Ch(0,5,s6,0);
        Lcd_P12x12Ch(0,6,s11,0);
}
/*-------------------第二页第七行------------------------------------------*/
/*-------------------------------------------------------------*/
void Stat11(void)
{
        Lcd_P16x16Ch(0,0,"液晶屏测试6",0);
        Lcd_P12x12Ch(120,6,"<",0);
//        Lcd_P12x12Ch(120,6,"<",0);
        Lcd_P12x12Ch(0,2,s4,0);
        Lcd_P12x12Ch(0,3,s5,0);
        Lcd_P12x12Ch(0,4,s6,0);
        Lcd_P12x12Ch(0,5,s11,0);
        Lcd_P12x12Ch(0,6,s14,0);

}/*-------------------------------------------------------------*/
void Stat12(void)//温湿度显示
{
        Read_TempAndHum();
}

/*-------------------------------------------------------------*/
void Stat13(void)//键值
{
                Lcd_P12x12Ch(0,0,"系统设置13",0);
        //显示电源符号
        PowerScan();

}
/*-------------------------------------------------------------*/

void Stat14(void)//显示对比对数值
{

/*****************************************************************************/
//初始化显示
//                timems = Key_GetNum();       
                Lcd_P12x12Ch(0,0,"系统设置14",0);
        //显示键值

                        Lcd_P8x16char(10,6,'0'+(timems/100),S14c);
                        Lcd_P8x16char(18,6,'0'+(timems%100/10),S14c);
                        Lcd_P8x16char(26,6,'0'+(timems%10),S14c);
        //显示对比对数值
                Lcd_P12x12Ch(4,2,"对比度",0);
                Lcd_P8x16char(4,4,'0'+(lcd_contrast/100),S14a);
                Lcd_P8x16char(12,4,'0'+(lcd_contrast%100/10),S14a);
                Lcd_P8x16char(20,4,'0'+(lcd_contrast%10),S14a);
        //LCD设置水平镜像
                Lcd_P12x12Ch(58,2,"水平镜像",0);
                Lcd_P8x16char(58,4,'0'+(key2value/100),1);
                Lcd_P8x16char(66,4,'0'+(key2value%100/10),1);
                Lcd_P8x16char(74,4,'0'+(key2value%10),1);
        //调试:显示按键返回主画面键值


                Lcd_P8x16char(114,4,'0'+(KeyFuncIndex%100/10),S14c);
                Lcd_P8x16char(120,4,'0'+(KeyFuncIndex%10),S14c);

Lcd_P5x7int(60, 7,MU_menu_i ,S14c);
//        Lcd_P5x7int(60, 7,'0'+(MU_menu_i/100) ,S14c);//环境湿度-十位
//        Lcd_P5x7int(66, 7,'0'+(MU_menu_i%100/10),S14c);//环境湿度-个位
//        Lcd_P5x7int(72, 7,'0'+(MU_menu_i%10),S14c);//环境湿度-小数位

        //转换对比度数值
                Lcd_set_contrast(lcd_contrast);

/******************************************************************************/

//                if(KeyFuncIndex == 0x00)
//                {
                         if(KEY2==0)//确认
                         {
                                if (key2value < 5) key2value = key2value + 1;                else {KeyFuncIndex = 0x0E;        Lcd_cls(); KeyFuncIndex=KeyTab[KeyFuncIndex].KeyEnterState;key2value = 0;}
                         while(!KEY2); //松手检测
                        }
                        if (key2value == 1) {S14a=1;}                        else S14a=0;        
                        if (key2value == 2) {S14c=1;}                        else S14c=0;        
                if(KEY1==0)//
                {
                                switch(key2value)
        {
                case 1: lcd_contrast=lcd_contrast-1;        break;
                case 2: timems=timems - 1;        break;                       
                }         Delay_ms(10);
                                while(!KEY1); //松手检测
        }
                if(KEY3==0)//
                {
                                switch(key2value)
        {
                case 1: lcd_contrast=lcd_contrast+1;        break;
                case 2: timems=timems+1;        break;                       
                }         Delay_ms(10);
                                while(!KEY3); //松手检测
                }
}


/*-------------------------------------------------------------*/
void Stat15(void)//显示绘制直线
{
        Lcd_P12x12Ch(0,0,"系统设置15",0);
//显示绘制直线
        Lcd_P12x12Ch(4,2,"曲线显示",0);               
        LCD_DrawLine(90,4,120,2,1);


}
/*-------------------------------------------------------------*/

/*-------------------------------------------------------------*/
void Stat16(void)
{
        Lcd_P12x12Ch(0,0,"主页面16",0);               



}
/*-------------------------------------------------------------*/

/*-------------------------------------------------------------*/
void Stat17(void)
{
       



}
/*-------------------------------------------------------------*/

/*-------------------------------------------------------------*/
void Stat18(void)
{
       



}
/*-------------------------------------------------------------*/

/******************************************************************
功能:  菜单切换MenuOperate(0);
输入:        无
输出: 无
版本:
作者:
修改日期:
说明:
                1.
                2.
******************************************************************/
void MenuOperate(void)
{

//        keyscan();       
//        keyMvalue = key_multi();

        if((KEY1==0)||(KEY2==0)||(KEY3==0))
        {
                        Delay_ms(10);//消抖
                         if(KEY3==0)//上
                         {

                                        KeyFuncIndex=KeyTab[KeyFuncIndex].KeyUpState;
                         while(!KEY3);//松手检测
                                        Lcd_cls();
                         }
                         if(KEY1==0)//下
                         {

                                KeyFuncIndex=KeyTab[KeyFuncIndex].KeyDownState;
                         while(!KEY1); //松手检测
                                        Lcd_cls();
                         }
                         if(KEY2==0)//确认
                         {

                                        if(KeyFuncIndex != 0x0E)
                                        {
                                                KeyFuncIndex=KeyTab[KeyFuncIndex].KeyEnterState;
                                        }       

                         while(!KEY2);//松手检测
                                Lcd_cls();
                         }
                        Delay_ms(10);//消抖
                        //Lcd_init();       
                        //此处添加按键错误代码
                }
                //下面是执行按键的操作

                KeyFuncPtr=KeyTab[KeyFuncIndex].CurrentOperate;

                (*KeyFuncPtr)();     //执行当前的按键操作

}
       
/******************************************************************
功能:  
输入:        无
输出: 无
版本:
作者:
修改日期:
说明:
                1.
                2.
******************************************************************/
//void MenuOperate(void)
//{
//if((keyup==0)||(keydown==0)||(keyenter==0))
//{
//                Delay1ms(10);//消抖
//                 if(keyup==0)
//                 {
//                                Lcd_cls();
//                    KeyFuncIndex=KeyTab[KeyFuncIndex].KeyUpState;
//                 while(!keyup);//松手检测
//                 }
//                 if(keydown==0)
//                 {
//                                Lcd_cls();
//                        KeyFuncIndex=KeyTab[KeyFuncIndex].KeyDownState;
//                 while(!keydown); //松手检测
//                 }
//                 if(keyenter==0)
//                 {
//                        Lcd_cls();
//                        KeyFuncIndex=KeyTab[KeyFuncIndex].KeyEnterState;
//                 while(!keyenter);//松手检测
//                 }
//                //Lcd_init();       
//                //此处添加按键错误代码
//        }
//        //下面是执行按键的操作
//        KeyFuncPtr=KeyTab[KeyFuncIndex].CurrentOperate;

//        (*KeyFuncPtr)();     //执行当前的按键操作
//}
/******************************************************************
功能:  定时器2中断服务函数
输入:        无
输出: 无
版本:
作者:
修改日期:
说明:
                1.
                2.
******************************************************************/
//void InterruptTimer2() interrupt 20
//{
////uint8_t keyA;
////        count++;
////        count %= 1000;
////         keyA=keyscan();
//// MenuOperate(keyA);
////Lcd_cls();
//}


/******************************************************************
功能: 定时器2中断16位自动重装初始化
输入:        无
输出: 无
版本:
作者:
修改日期:
说明:
                1.
                2.
******************************************************************/
//void Uart4Init()
//{
//        TM4PS = 0x01;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
//        T4T3M |= 0x20;                        //定时器时钟1T模式
//        T4L = 0xA0;                                //设置定时初始值
//        T4H = 0x15;                                //设置定时初始值
//        T4T3M |= 0x80;                        //定时器4开始计时
//        IE2 |= 0x40;                        //使能定时器4中断


//}



//#endif


0-STC8(241110数据保存打印OK).rar

1.77 MB, 下载次数: 5, 下载积分: 一乐金币 -1

发表于 2024-12-9 11:05 | 显示全部楼层
下载来学习学习
发表于 2024-12-10 22:29 | 显示全部楼层
请问『STC8数据保存串口打印LCD12864』是什么?
每个字都明...『STC8』/『数据保存』/『串口打印』/『LCD12864』我都可以理解。
但加起来成句就不明?
请问有原理图看看吗?
谢谢!

点评

^_^
意思是,主控单片机STC8H,程序中包含EEPROM数据保存,串口打印功能,显示由LCD显示  详情 回复 发表于 2025-1-19 11:07
发表于 2024-12-20 15:46 | 显示全部楼层
留言保存学习。
 楼主| 发表于 2025-1-19 11:07 | 显示全部楼层
Joe_Black 发表于 2024-12-10 22:29
请问『STC8数据保存串口打印LCD12864』是什么?
每个字都明...『STC8』/『数据保存』/『串口打印』/『LCD ...

意思是,主控单片机STC8H,程序中包含EEPROM数据保存,串口打印功能,显示由LCD显示

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-1-20 17:11 , Processed in 0.069869 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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