ST7920 12864液晶图文菜单显示.C

2018-11-01 13:15

程序 interface.h #define UI_GOTO_CHILD(index) /* {pUI=(index); KeyDir=GOTO_CHILD;} 移植时要实现以下函数: #define UI_GOTO_FATHER(index) LcdClrScrn(); //清屏 {pUI=(index); KeyDir=GOTO_FATHER;}

ShowARROW(SysSclt); //在某一行显示//=========================================箭头 ===============================

DisShowARROW(SysSclt); //在某一行不显//以下是各个界面的函数实现.每个函数都要在上示箭头 面声明! ShowLine(0, \在某一行显示字 符串 //空闲状态下的循环. uchar GetKey(); //按键检测函数。 void UI_Idle() 返回Key_Up Key_Down Key_Right { Key_Left static INT8U SysSclt=0; //当前选中的是哪一*/ 项 #ifndef __INTERFACE_H__ switch(Key) #define __INTERFACE_H__ { //进入菜单. #include \ case FROM_FATHER: //extern void Interface(void); case FROM_CHILD: //case GOTO_FATHER: #define GOTO_CHILD 0XFC LcdClrScrn(); #define FROM_FATHER 0XFC // 0 1 2 3 4 #define IDLE_MENU_MAX 4 #define GOTO_FATHER 0XFD //之前设置为 ShowLine(0,\0xff 不对,有问题,子界面返回时,不刷新 ShowLine(1,\#define FROM_CHILD 0XFD ShowLine(2,\ ShowLine(3,\ ShowLine(4,\

//######################################### ShowLine(7,\################# ShowARROW(SysSclt); #define INT8U unsigned char break; //箭头上移 INT8U Key; //系统按键. case Key_Up:

INT8U KeyDir = FROM_FATHER; //用来各个界面 DisShowARROW(SysSclt); 之间的切换时传递参数. if(SysSclt==0)SysSclt=IDLE_MENU_MAX; //========================================= else SysSclt--; ===================== ShowARROW(SysSclt); //系统界面函数声明区.(一定要声明!) 有几个不 break; 同的界面就有几个函数 //箭头下移 void UI_Idle(void); case Key_Down: void UI_Help(void); void UI_Time(); DisShowARROW(SysSclt); void UI_Temperature(); SysSclt++; void UI_Play(); if(SysSclt>IDLE_MENU_MAX)SysSclt=0; void UI_Set(); ShowARROW(SysSclt); void (*pUI)()=UI_Idle; //界面指针初始化为 break; IDLE函数. 函数指针 //确定 进入 子项 //pUI();为当前while()大循环下执 case Key_Right: 行的函数 #define UI_GOTO(index) {pUI=(index);} if(SysSclt == 0) //Temperature

{

UI_GOTO_CHILD(UI_Temperature); //KeyDir = GOTO_CHILD;

break; }

if(SysSclt == 1) //Time {

UI_GOTO_CHILD(UI_Time); //KeyDir = GOTO_CHILD;

break; }

if(SysSclt == 2) //Time {

UI_GOTO_CHILD(UI_Play); //KeyDir = GOTO_CHILD;

break; }

if(SysSclt == 3) //Time {

UI_GOTO_CHILD(UI_Set); //KeyDir = GOTO_CHILD;

break; }

if(SysSclt == 4) //help {

UI_GOTO_CHILD(UI_Help); //KeyDir = GOTO_CHILD;

break; }

default:break; }//switch }

void UI_Temperature() {

switch(Key) {

//进入菜单.

case FROM_FATHER: //case FROM_CHILD: LcdClrScrn();

ShowLine(0, \

ShowLine(2, \ ShowLine(4, \

//改天加DS18B20实际测一个 ShowLine(7, \ break;

case Key_Left:

UI_GOTO_FATHER(UI_Idle);

break;

default:break; }//switch }

void UI_Time() {

switch(Key) {

//进入菜单.

case FROM_FATHER: //case FROM_CHILD: LcdClrScrn();

ShowLine(0, \ ShowLine(2, \

ShowLine(4, \ ShowLine(7, \ break;

case Key_Left:

UI_GOTO_FATHER(UI_Idle);

break;

default:break; }//switch }

void UI_Play() {

switch(Key) {

//进入菜单.

case FROM_FATHER: //case FROM_CHILD: LcdClrScrn();

ShowLine(0, \ ShowLine(1, \ ShowLine(2, \

ShowLine(4, \ ShowLine(7, \ break;

case Key_Left:

UI_GOTO_FATHER(UI_Idle);

break;

default:break; }//switch }

void UI_Set() {

switch(Key) {

//进入菜单.

case FROM_FATHER: //case FROM_CHILD: LcdClrScrn();

ShowLine(0, \

ShowLine(7, \ break;

case Key_Left:

UI_GOTO_FATHER(UI_Idle);

break;

default:break; }//switch }

void UI_Help() {

switch(Key) {

//进入菜单.

case FROM_FATHER: //case FROM_CHILD: LcdClrScrn();

ShowLine(0, \ ShowLine(2, \ ShowLine(4, \ ShowLine(7, \ break;

case Key_Left:

UI_GOTO_FATHER(UI_Idle);

break;

default:break; }//switch }

//系统的大循环.

void Interface(void) { //===============================================

//以下为按键的处理. Key = GetKey();

if(KeyDir!=0) //KeyDir=GOTO_CHILD or KeyDir=GOTO_FATHER;

{//建立一种传递信息的变量. Key = KeyDir; KeyDir = 0; }

//===============================================

//以下为界面的相互调用 pUI(); }

#endif

========================================================================

==========================================================================

#############################################################################

#############################################################################

#ifndef __KEY_H__ #define __KEY_H__

#define Key_Up 0x11 #define Key_Down 0x12 #define Key_Left 0x13 #define Key_Right 0x14 //uchar Key_Scan();

void delay_ms(unsigned int t) {

unsigned int i,j; for(i=0;i

for(j=0;j<1141;j++); }

unsigned char Key_Scan() {

unsigned char key; DDRA|=0X0f; //输出 PORTA|=0Xff; //上拉 DDRA&=~0X0f; //输入

if(PINA==0xfe) {

delay_ms(10);

if(PINA==0xfe) {

while(PINA==0xfe); //等待松手 return Key_Up; } }

if(PINA==0xfd) {

delay_ms(10); if(PINA==0xfd) {

while(PINA==0xfd); return Key_Down; } }

if(PINA==0xfb) {

delay_ms(10); if(PINA==0xfb) {

while(PINA==0xfb); return Key_Left; } }

if(PINA==0xf7) {

delay_ms(10); if(PINA==0xf7) {

while(PINA==0xf7); return Key_Right; } }

return 0;//没有键按下返回0 }

unsigned char GetKey() {

return Key_Scan(); }

#endif

====================================================

##################################################### #######################################################

-=============================================================== #ifndef __PG12864_H__ #define __PG12864_H__ #include

#define uchar unsigned char #define uint unsigned int

#define WR_L() PORTD&=~(1) #define WR_H() PORTD|=(1)

#define RD_L() PORTD&=~(1<<1) #define RD_H() PORTD|=(1<<1) #define CE_L() PORTD&=~(1<<2) #define CE_H() PORTD|=(1<<2) #define CD_L() PORTD&=~(1<<3) #define CD_H() PORTD|=(1<<3) #define RST_L() PORTD&=~(1<<4) #define RST_H() PORTD|=(1<<4)

void delay(uint t);

uchar read_status() {

uchar status;

DDRB=0;//端口b置为输入 RD_L(); WR_H(); CE_L(); CD_H();

status=PINB; return status; }

void check_status() {

uchar s;

DDRB=0XFF;//端口b置为输出 while((s&0x03)!=0x03)

s=read_status();//等待位1,2置为。命令读写准备好。数据读写准备好 }

//void init_txt_12864();

void write_data(uchar data); void write_cmd1(uchar cmd);

void write_cmd2(uchar data,uchar cmd); void write_cmd3(uchar data1,uchar data2,uchar cmd);

//uchar read_status(); for(i=0;i<16;i++) //void clear_screen(); void display_char(uchar x,uchar y,uchar ch); { //void init_graphic_12864(); write_cmd3(((j/2)<<4)|(y*2),x,0x24);//地//void display_HZ(uchar x,uchar y,uchar *hz); 址指针设置..低地址,高地址,命令 ////x 0-3 y 0-7

//void display_string(uchar x,uchar y,uchar write_cmd2(hz[j++],0xc0); *s); write_cmd2(hz[j++],0xc0); /* int main() } { } uchar i,j=0; //处在x y处显示ch init_txt_12864(); void display_char(uchar x,uchar y, uchar display_string(0,0,ch); ch)//x 0-7 y 0-15 { delay(100); write_cmd3((((x*2)<<4)+y),0x00,0x24);//地址 clear_screen(); 指针位置 write_cmd2(ch-32,0xc0);//t6963c字符表与 ASCII差32@@@@@@@@@@@@@@@@ init_graphic_12864(); } void display_string(uchar x,uchar y, uchar *s) { uchar i=0; for(i=0;i<15;i++) while(*s) if(i>=8) { display_HZ(1,i-8,HZ2[i]); display_char( x, y+(i++),*s); else s++; display_HZ(0,i,HZ2[i]); if(i>=16) { x++; i=0; while(1); } } //{//调整文本区首地址,可以实现移屏; } ////i++; void delay(uint t) // write_cmd3(i++,0,0x40);//文本区首地址; { // delay(10000); uint i,j; //} for(i=0;i { //初始化端口 //处在x y处显示汉字hz DDRD=0XFF; void display_HZ(uchar x,uchar y,uchar DDRB=0XFF; *hz)////x 0-3 y 0-7 PORTB=0XFF; { //液晶复位 uchar i,j=0; RST_L(); delay(1);


ST7920 12864液晶图文菜单显示.C.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:“十三五”规划重点-工程中心项目建议书(立项报告)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: