历史上的今天
返回首页

历史上的今天

今天是:2024年11月16日(星期六)

2019年11月16日 | 12864液晶菜单界面小系统

2019-11-16 来源:51hei

效果视频


011820tpmjpay3d2k18pas.jpg?imageView2/2/w/550

这个是主界面
011850vkh7m32tm07kd8df.jpg?imageView2/2/w/550
这个是主菜单界面
011906glnlo5l1bet5ttpt.jpg?imageView2/2/w/550
这个是设置时间的子界面
011922iv52er65z55dger4.jpg?imageView2/2/w/550
这个是设置日期

011937v9w7xj7y89yuzffq.jpg?imageView2/2/w/550
设置背景光
011750eriu9uu879uxrttn.jpg?imageView2/2/w/550
这是设置了按键音和闹铃以后,主界面出现状态标志

011806lljpjjoa0ehyzrlj.jpg?imageView2/2/w/550
闹铃的界面,喇叭出现铃声。
011734lldha5yh1azdyeb7.jpg?imageView2/2/w/550
生日倒计时提醒功能。

011721ps68vacgggwt8egj.jpg?imageView2/2/w/550

这个是main.c文件

/*------------------------------------

名称:多级菜单数字电子钟

编写:YuMin_Dong

时间:2013.01.24

------------------------------------*/

#include

//#include

#include

#include"zm.h"

#include"delay.h"

#include"lcd12864.h"

#include"ds18b20.h"

#include"ds1302.h"

#include"process.h"


/*------------------------------------

                        全局变量定义

------------------------------------*/


bit Temperature_Flag;                        //读取并显示温度标签,使温度刷新频率低些

//bit Re_Time_Flag;

//bit Flag1;        //进入子菜单后置标志,中断一次Menu_Count自加一次

bit Bell_Work;


/*------------------------------------

                        转换表

------------------------------------*/

//code UINT8 *WEEK_TAB[]={"一","二","三","四","五","六","日",};                //星期中文字库表


/*------------------------------------

                        函数声明部分

------------------------------------*/

//void Display_Time();

//void System_BootScreen();

//void Timer0_Init();

//void Int0_Init();

//void Display_Temperature();

//UINT8 Conver_Week(bit c,UINT8 year,UINT8 month,UINT8 date);


/*------------------------------------

                        启动画面

------------------------------------*/

void System_BootScreen()

{

UINT8 i;

LCD_SendImg128x64(User0_128x64);        //欢迎画面

for(i=0;i<10;i++)

DelayMs(255);                                                //画面延时


LCD_SendImg128x64(User1_128x64);        //照片显示

for(i=0;i<10;i++) 

DelayMs(255);

}


/*------------------------------------

                        初始化定时器

------------------------------------*/

void Timer_Init()                                        

{

TMOD|=0x11;                                        //两个定时器置方式一

IE|=0X8a;                                        //开总中断开关和两个定时器中断开关

PT1=1;                                                //按键音产生中断T1权拉高,使之能在INT0下产生声响

TR0=1;                                                //开启定时器0,刷新用

//PX0=1;

//TR1=1;

}


/*------------------------------------

                        初始化INT0

------------------------------------*/

void Int0_Init()

{

EX0=1;                //打开外中断0,中断允许

IT0=1;                //设置下降沿触发

}


/*------------------------------------

                        INT0中断处理函数

------------------------------------*/

void Int0_IRQ() interrupt 0

{

        Menu_Flag=1;                                //进入主菜单标签

        TR1=1;                                                //开启TR1有按键音        

        while(!KEY_MENU)                        //等待按键结束,使用中断做按键,能让它实时性比较好

        ;

        TR1=0;                                        //按键结束,按键音结束

                

        if(Menu0)                                        //子菜单0(设置时间进入后)

        {

        Set_Hour=~Set_Hour;                        //因为只有时钟和分钟个设置,0和1两种状态能区分了

        }

        else if(Menu1)                                //子菜单1(设置日期进入后)

                Menu1_Flag=1;                        //为减少中断代码长度,事实证明,用个标志更好

        else if(Menu2)

                Menu2_Flag=1;

        else if(Menu3) Set_Bright=~Set_Bright;                //子菜单3(背景光开关)

        else if(Menu4) Set_Speaker=~Set_Speaker;        //子菜单4(按键音开关)

Refresh_SetTime=1;                                //在子状态中任何状态按一下都会使产生刷新显示标签。        

}        


/*------------------------------------

                        T0中断处理函数

------------------------------------*/

void Timer0_IRQ() interrupt 1

{

static UINT8 i;

TH0=-50000/256;

TL0=-50000%256;

i++;

if(i==80)        Temperature_Flag=1;        //2.5s中产生一次(读取并刷新温度的标签)

}


/*------------------------------------

                        T1中断处理函数

------------------------------------*/

void Timer1_IRQ() interrupt 3

{

TH1=-600/256;                                        //产生某种频率的按键音

TL1=-600%256;                                        //经测试,2000HZ~4000HZ左右的比较适合做按键音

SPEAKER=~SPEAKER;                                //产生方波 提供某种频率的按键音

}


/*------------------------------------

                        主函数

------------------------------------*/

void main()

{

LCD_ClearGDRAM();                //清除DDRAM和GDRAM的显示

System_BootScreen();        //启动画面

DS1302_Init();                        //初始化DS1302

Int0_Init();                        //初始化外中断0

LCD_Init();                                //初始化12864

Timer_Init();                        //初始化定时器

LCD_ClearGDRAM();                //清屏DDRAM和GDRAM

LCD_SetCGRAM(1,User1_16x16);//写入CGRAM自定义字符 主菜单指向箭头

LCD_SetCGRAM(0,User0_16x16);//闹钟标志

LCD_SetCGRAM(2,User2_16x16);//℃

LCD_SetCGRAM(3,User4_16x16);//温度计

Display_Temperature();                //开始的时候先显示下温度,使界面比较完整不会空缺

SPEAKER=0;                                        //断开喇叭,使之不会长时间导通烧坏

BRIGHT=1;                                        //打开背景光

while(1)

{

SPEAKER=0;                                        //断开喇叭,使之不会长时间导通烧坏

        if(Temperature_Flag)        //大循环下,温度标签置位后刷新显示温度

        {

        Temperature_Flag=0;                //清零标签

        Display_Temperature();

        }

        

        

        if(!Menu_Flag)                        //没有菜单标签则显示主时钟界面

        {

        DS1302_ReadDate();                //读取日期

                if(Bell_Flag)                //Bell标志被置位,表明在设置菜单里,开始定时了,开始往下执行,等待定时到

                {

                        if(Hour==Bell_Hour&&Minute==Bell_Minute)

                        {

                        LCD_ClearGDRAM();

                        LCD_SendImg128x64(User2_128x64);

                        Bell_Work=1;

                        ET1=1;

推荐阅读

史海拾趣

Bytesonic Corporation公司的发展小趣事

随着台湾本土市场的逐渐饱和,Bytesonic Corporation开始将目光投向更广阔的大陆市场。1996年7月,公司在中国广东省东莞市石街镇成立了分公司,迈出了进军大陆市场的第一步。这一决策不仅为公司带来了更多的商机,也为其在亚洲乃至全球市场的布局打下了坚实的基础。

Continental公司的发展小趣事

近年来,大陆集团在特种商用车胎领域也取得了重要突破。2014年,大陆集团在亚洲国际物流技术与运输系统展览会上发布了一款全新的产品——SC8特种商用车胎。这款产品是专门针对亚洲物料搬运业而开发出来的,适用于仓库、饮料业、造纸业等多个行业。SC8轮胎具备超深的轮胎花纹和极佳的性能,为物料搬运业提供了更高效、更安全的解决方案。这一产品的推出进一步巩固了大陆集团在商用车胎领域的市场地位。

Directed Energy Inc公司的发展小趣事

Directed Energy Inc公司自创立之初,就致力于在电子行业中推动技术创新。公司投入大量研发资源,开发出一系列高性能的脉冲式激光二极管驱动器和高压脉冲模块,这些产品凭借其卓越的性能和稳定性,迅速在市场上获得了认可。随着技术的不断迭代和升级,Directed Energy Inc逐渐在电子行业中树立了技术领先的形象,吸引了众多行业内的设计师和工程师的关注。

Excelsys公司的发展小趣事

Excelsys公司自创立之初,就致力于电源管理技术的研发。在电子行业中,电源管理一直是影响产品性能和可靠性的关键因素。公司团队通过不断的技术创新,推出了一系列高性能、高效率的电源管理产品,赢得了市场的广泛认可。特别是在智能设备日益普及的背景下,Excelsys的电源管理解决方案为各种智能设备提供了稳定可靠的电力支持,助力了行业的发展。

DOMINANT公司的发展小趣事

在LED产业蓬勃发展的背景下,统明亮(DOMINANT)公司在2000年应运而生。它的诞生源于欧司朗(OSRAM)在马六甲工厂的分拆,加上马来西亚财团的加持,这家新公司迅速崭露头角。统明亮公司从成立之初就专注于LED技术的研发和生产,凭借其卓越的技术实力和创新能力,逐渐在电子行业中树立了良好的口碑。经过数年的不懈努力,统明亮在全球贴片式LED领域取得了领先地位,特别是在车用LED封装领域,其产品质量和技术水平均处于行业前列。

成都振芯/国腾(CORPRO)公司的发展小趣事

2003年,成都国腾微电子有限公司(后更名为成都振芯科技股份有限公司)正式成立,标志着CORPRO的起点。公司由成都国腾电子集团投资设立,创始人团队汇聚了来自中国物资储运集团、电子科技大学等单位的精英。在成立之初,CORPRO就致力于集成电路、微波组件及相关电子器件的设计、开发与销售,奠定了其在电子行业的基础。

问答坊 | AI 解惑

STM32学习笔记之ADC

STM32学习笔记之ADC…

查看全部问答>

各种常用的芯片型号一览!全面实用!

里面有很多芯片型号,寻找方便!…

查看全部问答>

开关电源变压器铁芯磁滞回线测量-part1开关电源原理与设计(连载59)

2-1-1-9.开关电源变压器铁芯磁滞回线测量 现代电子设备对电源的工作效率和体积以及安全要求越来越高,在开关电源中决定工作效率和体积以及安全要求的诸多因素,基本上都与开关变压器有关,而与开关变压器技术性能相关最大的要算是变压器的铁芯材 ...…

查看全部问答>

stc单片机测频率问题

我用STC单片机测量频率(0-26HZ).频率信号由外部中断1—INT1引进,采用下降沿触发方式,由TIMER1测量两个下降沿之间的时间。我写的程序只能测量1—3HZ的,频率再高一点就乱跳 下面是我的代码。主程序应该没什么问题,已经调好久了,就是找不出原因 ...…

查看全部问答>

IIC驱动

请问一下,IIC的流驱动程序的流程是怎样的?最好能够给出代码并且讲解,谢谢??…

查看全部问答>

请问哪里有DHCP CLIENT方面的资料啊

小弟想在VxWorks上开发DHCP客户端 请问哪里有这方面的资料啊 谢谢各位了…

查看全部问答>

网上找到的一个 拆解应急灯

这几天为咱活动 找一些相关的资料参考 准备好好参与下   找到了哥们暴力拆解应急灯的图 呵呵 转载一下     转自数码之家 …

查看全部问答>

ST原装的FlashLoaderv1.2怎么只提供了COM1和COM2选择?

                                 这是很不方便的,有很多用笔记本电脑的没有COM1和COM2,都用USB转出来的串口,一般都在串口4以上,建议ST把可用的 ...…

查看全部问答>

①F2812 XINT1中断后,程序总是跑飞??

问题有两个: 1。 为什么xint1的中断函数中要再次使能group1中断(下面代码中①)和总中断使能(下面代码中②)即使没有关闭中断(DINT)?其它的比如TIMER1,PWM,CAPTURE等中断则不需要在服务程序中再次使能 2。进入XINT1中断后,程序总是跑飞?? ...…

查看全部问答>