×
单片机 > 单片机程序设计 > 详情

LCD12864简单菜单程序,八个按键带proteus仿真和程序

发布时间:2020-06-18 发布时间:
|

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

简单菜单程序,八个按键.使用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:



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址