历史上的今天

今天是:2024年11月13日(星期三)

2019年11月13日 | LCD12864简单菜单程序,八个按键带proteus仿真和程序

发布者:快乐心跳 来源: 51hei关键字:LCD12864  菜单程序  按键 手机看文章 扫描二维码
随时随地手机看文章

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

简单菜单程序,八个按键.使用AVR单片机.2008/3/24--2008/3/29

编译器为ICCAVR7.14.晶振7.3728M,单片机为ATmega16(用ATmega32在proteus中仿真不成功!)

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


#include

#include

#include

#include "menu.h"                //所有变量定义以及函数声明均放在这个头文件里.

#include "delay.h"

#include "lcd_12864.h"

#include "get_key.h"


#define blueon PORTB|=(1<#define blueoff PORTB&=~(1<#define greenon PORTB|=(1<#define greenoff PORTB&=~(1<#define redon PORTB|=(1<#define redoff PORTB&=~(1<

//SFR初始化.

void main_init(void)

{

        DDRA=0xff;                        //A口设置为输出.

        PORTA=0x00;

        DDRB=0xff;                        //B口设置为输出.

        PORTB=0x00;

//        ASSR&=~(1<        DDRC=0x00;                        //C口设置为输入.

        PORTC=0xff;                        //AVR没有上拉寄存器,在PORTC中写1即表示打开上拉了.

        DDRD=0x00;                        //D口设置为输入.                                                                                                 

        PORTD=0xff;                        //打开D口上拉.                

}


void main_menu_initial(void)        //LED主菜单初始化.

{

        main_menu[0].menu_count=3;        //有三个菜单项.

        main_menu[0].display=blue;

        main_menu[0].subs=NULL;                //点亮兰灯

        main_menu[0].children_menus=blue_menu;

        main_menu[0].parent_menus=NULL;

        

        main_menu[1].menu_count=3;

        main_menu[1].display=green;                //点亮绿灯

        main_menu[1].subs=NULL;

        main_menu[1].children_menus=green_menu;

        main_menu[1].parent_menus=NULL;

        

        main_menu[2].menu_count=3;

        main_menu[2].display=red;                //点亮红灯.

        main_menu[2].subs=openred;

        main_menu[2].children_menus=NULL;

        main_menu[2].parent_menus=NULL;

}


void blue_menu_initial(void)

{

        blue_menu[0].menu_count=2;

        blue_menu[0].display=qr;                        //点亮兰灯,确认.

        blue_menu[0].subs=openblue;

        blue_menu[0].children_menus=NULL;

        blue_menu[0].parent_menus=main_menu;

        

        blue_menu[1].menu_count=2;

        blue_menu[1].display=qx;                        //取消.

        blue_menu[1].subs=closeblue;

        blue_menu[1].children_menus=NULL;

        blue_menu[1].parent_menus=main_menu;        

}


void green_menu_initial(void)

{

        green_menu[0].menu_count=2;

        green_menu[0].display=qr;                        //点亮绿灯---确认.

        green_menu[0].subs=opengreen;

        green_menu[0].children_menus=NULL;

        green_menu[0].parent_menus=main_menu;

        

        green_menu[1].menu_count=2;

        green_menu[1].display=qx;                        //----取消.

        green_menu[1].subs=closegreen;

        green_menu[1].children_menus=NULL;

        green_menu[1].parent_menus=main_menu;

}



void led_menu_pro(void)

{

        max_item=menu_led->menu_count;

        switch(keyval)

        {

                case 0: break;

                case 1:                                //向上键.

                        if(user_choosen==0)

                        {                        

                                user_choosen=max_item;

                        }

                        refresh=1;

                        user_choosen--;

                        break;

                case 2:                                //向下键.

                        user_choosen++;

                        if(user_choosen==max_item)

                        {

                                user_choosen=0;

                        }

                        refresh=1;

                        break;

                case 3:                                //确认键.                        

                        if(menu_led[user_choosen].subs!=NULL)

                        {

                                (*menu_led[user_choosen].subs)();        //执行函数.

                        }

                        if(menu_led[user_choosen].children_menus!=NULL)

                        {

                                temp_choosen=user_choosen;

                                menu_led=menu_led[user_choosen].children_menus;

                                user_choosen=0;

                        }

                        refresh=1;

                        break;

                case 4:                                //返回键.

                        if(menu_led[user_choosen].parent_menus!=NULL)

                        {

                                menu_led=menu_led[user_choosen].parent_menus;

                        }        

                        refresh=1;

                        break;

                default:

                        break;                        

        }

        if(refresh)                                        //是否需要刷新LCD标志位.

[1] [2]
关键字:LCD12864  菜单程序  按键 引用地址:LCD12864简单菜单程序,八个按键带proteus仿真和程序

上一篇:AVR万年电子日历C程序
下一篇:avr单片机PWM控制直流电机转速和正反转

推荐阅读

在阿里巴巴战略投资部主导的投资项目中,对汽车后市场的投资是个“特例”:没有绝对控股、将旗下汽车板块业务完全导入到合资公司、冠以“天猫”之名。   两个多月前,阿里旗下天猫汽车宣布了这项投资。阿里将联手金固股份旗下汽车养护平台汽车超人、汽配供应链服务商康众汽配,共同成立汽车后市场新公司。新公司名为“新康众”,对外统一品牌为“天猫车...
电子密码锁的电路原理图Altium Designer画的原理图和PCB图如下:密码锁仿真原理图如下以下是一套单片机电子密码锁程序:/*******************************************************************************初始密码:000000 密码位数:6位注意:掉电后,所设密码会丢失,重新上电时,密码恢复为原始的000000与P1.0相连的8位发光LED点亮代表...
为下一代汽车应用场景提供响应最快和能效最高的神经网络加速功能英国伦敦,2020年11月12日–ImaginaTIonTechnologies宣布推出面向先进驾驶辅助系统(ADAS)和自动驾驶应用的新一代神经网络加速器(NNA)产品IMGSeries4。Series4可为领先的汽车行业颠覆者、一级供应商、整车厂(OEM)和汽车系统级芯片(SoC)厂商提供强大助力。Series4拥有全新的多核架构,...
随着穿戴设备功能越来越强大,耗电速度也在增加,在电池技术没有革命性的突破前,若需要较长的待机和续航时间,实现尽可能低的系统功耗是主要技术挑战。创芯微推出的带船运模式的CM1126B系列锂电保护IC,可实现电池超长时间待机。TWS耳机电池容量一般为30~50mAh,在成品耳机组装完成后,整机功耗主要由电芯自耗,锂电保护IC功耗及蓝牙芯片功耗组成。受运输...

史海拾趣

问答坊 | AI 解惑

芯片封装技术简述

【来源:电子技术信息网】 自从美国Intel公司1971年设计制造出4位微处a理器芯片以来,在20多年时间内,CPU从Intel4004、80286、80386、80486发展到Pentium和PentiumⅡ,数位从4位、8位、16位、32位发展到64位;主频从几兆到今天的400MHz以上 ...…

查看全部问答∨

3G LTE新兴技术

在3GPP中,3G LTE的正式名称是3G Long Term Evolution(LTE),即3GPP长期演进(LTE)项目。       3GPP长期演进(LTE)项目是近两年来3GPP启动的最大的新技术研发项目,以OFDM/FDMA为核心的技术,与其说是3G技术的“演进”(evolution) ...…

查看全部问答∨

关于数码管连接问题

我买了单个的数码管,每个上面有10个引脚,不知道怎么连接,请求帮助。最好有电路图。 谢谢~…

查看全部问答∨

负反馈不能产生自激振荡?

模电书上说在负反馈放大电路中,输入信号为零时,因为某种电扰动(如合闸通电),其中含有频率为f0的信号,使得AF的附加相移达到180°或-180°,@负反馈变成了正反馈,如果|AF|>1,则产生了自激振荡。我不明白的是,如果@处条件不成立,也就是不 ...…

查看全部问答∨

89美金FPGA开发板申请

我想在FPGA世界里遨游,…

查看全部问答∨

adc时钟

adc时钟里面有个uclk,是指哪个时钟?还有他的采样周期怎么算,shot哪个怎么算  谢谢…

查看全部问答∨

【C2000 LaunchPad】单相交流电压+电流表__工程创建篇

总贴位置:https://bbs.eeworld.com.cn/viewthread.php?tid=369113&page=1&extra=page%3D2#pid1466612         【C2000 LaunchPad】单相交流电压+电流表      以前一直用CCS3.3。最近装了个 ...…

查看全部问答∨

MSP430G2542可以支持多少个触摸按键?

如题,我看到一些资料说有的可以支持最多16个触摸按键,是普通的带中断的IO口充放电方式检测的,不知道2542能多少…

查看全部问答∨

攒人气!!晒晒DIY的ALTERA FPGA开发板

攒人气!!晒晒DIY的ALTERA FPGA开发板,希望得到大家指正…

查看全部问答∨

LPC1500体验+RTU应用

针对水利行业的RTU功能,对其LPC1500进行功能测试,选用4K的EEPROM做为参数存储区,12K的RAM做为串口数据交互缓存.使用SPI接口外挂一片FLASH做为固态存储区.使用自身的ADC做为电压采集使用.3个串口分别用于连接手机模块,传感器,卫星.USB接口用于现场数 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved