找回密码
 注册会员
img_loading
智能检测中
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

标准液晶240128的驱动程序

[复制链接]
admin 发表于 2012-8-24 10:56:52 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
//--------------------------------------------------------------------------------------------------------------
// 函数名称:
// 输入参数:
// 输出参数:1
// 功能说明:
//--------------------------------------------------------------------------------------------------------------
#include<AVR/io.h>
#include<util/delay.h>
#include<math.h>
#include<string.h>//标准字符串
#include<ctype.h>//字符操作6.14
#include<avr/interrupt.h>
#include<avr/pgmspace.h>
#define uint unsigned int
#define uchar unsigned char
#include "标准显示.h"
#define key_pressed ((PINC & 0X08)==0X08)
#define key_number (PINC & 0XF0) //按键的值

/*---------------------------------按键执行函数-------------------------------*/
uchar iMenuNextID;
uchar iMenuID ;
void Function_Port ()
{
iMenuID=iMenuNextID;
}
//*---------------------- 菜单架构 *----------------------------//
typedef struct
{
uchar KeyTab_MenuIndex; // 当前状态索引号
uchar KeyTab_MaxItems; // 本级菜单最大条目数
uchar KeyTab_PressOk; // 按下"回车"键时转向的状态索引号
uchar KeyTab_PressEsc; // 按下"返回"键时转向的状态索引号
uchar KeyTab_PressDown; // 按下"向下"键时转向的状态索引号
uchar KeyTab_PressUp; // 按下"向上"键时转向的状态索引号
void (*CurrentOperate)(); // 当前状态应该执行的功能操作
}KeyTabStruct;
void ( *KeyFuncPtr )(); // 按键功能指针
/*-----------------------------------按键架构---------------------------------*/
/*CurMenuID = 本菜单ID
MaxMenuItem = 同级菜单最大项数
OkMenuID = 子菜单层所对应的菜单ID,ID=255为菜单已经到底了
EscMenuID = 父菜单层所对应的菜单ID,ID=255为菜单已经到顶了
DownMenuID = 弟菜单层所对应的菜单ID,ID=255为菜单是独生子
UpMenuID = 兄菜单层所对应的菜单ID,ID=255为菜单是独生子
CurFunction = 本菜单所对应的菜单函数指针 */
KeyTabStruct KeyTab[]={
//CurID Max Ok Esc Down Up CurFunction

{0, 14, 1, 0, 0, 0, *Function_Port },

{1, 14, 6, 0, 2, 5, *Function_Port }, // A
{2, 14, 7, 0, 3, 4, *Function_Port }, // B
{3, 14, 8, 0, 4, 3, *Function_Port }, // C
{4, 14, 9, 0, 5, 2, *Function_Port }, // D
{5, 14, 10, 0, 1, 1, *Function_Port }, // E
{6, 14, 11, 5, 6, 10, *Function_Port }, // A1
{7, 14, 12, 5, 7, 9, *Function_Port }, // B1
{8, 14, 13, 5, 8, 8, *Function_Port }, // C1
{9, 14, 14, 5, 9, 7, *Function_Port }, //D1
{10, 14, 15, 5, 10, 6, *Function_Port }, //E1
{11, 14, 11, 10, 11, 15, *Function_Port }, //A11
{12, 14, 12, 10, 12, 14, *Function_Port }, //B11
{13, 14, 13, 10, 13, 13, *Function_Port }, //C11
{14, 14, 14, 10, 14, 12, *Function_Port }, //D11
{15, 14, 15, 10, 15, 11, *Function_Port }, // E11

};
//-----------------------------------菜单显示---------------------------------
void MenuDisp(uchar iMenuID)
{

switch(iMenuID)
{
case 0: Menu_Port0(); break;
case 1: Menu_Port1(); break;
case 2: Menu_Port2(); break;
case 3: Menu_Port3(); break;
case 4: Menu_Port4(); break;
case 5: Menu_Port5(); break;
case 6: Menu_Port6(); break;
case 7: Menu_Port7(); break;
case 8: Menu_Port8(); break;
case 9: Menu_Port9(); break;
case 10: Menu_Port10(); break;
case 11: Menu_Port11(); break;
case 12: Menu_Port12(); break;
case 13: Menu_Port13(); break;
case 14: Menu_Port13(); break;
case 15: Menu_Port13(); break;

}

}


void key_ctrl()
{

switch (key_number)
{

case 0x10:
iMenuNextID = KeyTab[iMenuID].KeyTab_PressEsc; //常规菜单处理
LcmClear(0);
break;
case 0x20: //上

iMenuNextID = KeyTab[iMenuNextID].KeyTab_PressUp;//常规菜单处理
LcmClear(0);
break;
case 0x30: //下
iMenuNextID = KeyTab[iMenuNextID].KeyTab_PressDown;//常规菜单处理
LcmClear(0);
break;
case 0x40://保存数据

break;
case 0x50: //复位
LcmClear(0); //清屏
iMenuNextID =0;

break;
case 0x60: //OK确定
iMenuNextID = KeyTab[iMenuID].KeyTab_PressOk; //常规菜单处理
LcmClear(0);
break;
case 0x70: //测试开始

break;
case 0x80://光标移动
break;
case 0x90://--------
break;
case 0xA0://++++++
break;
case 0xB0://
break;
case 0xC0:

break;
case 0xD0:

break;
case 0xE0:
break;
}
KeyFuncPtr=KeyTab[iMenuID].CurrentOperate; // 执行当前按键的操作
( * KeyFuncPtr )();

}
/*------------------------------------------------------------------------------
0ooo
ooo0 ( )
( ) ) /
\ ( (_/
\_)
-----------------------------------------------------------------------------
\_)
------------------------------------------------------------------------------*/

int main()
{
DDRA |=(1<<3); PORTA &=~(1<<3);
DDRA |=(1<<4); PORTA &=~(1<<4);
DDRA |=(1<<5); PORTA &=~(1<<5);
DDRA &=~(1<<6); PORTA |=(1<<6);//键盘
DDRA &=~(1<<7); PORTA |=(1<<7);



DDRC &=~(1<<4); PORTC |=(1<<4);//键盘
DDRC &=~(1<<5); PORTC |=(1<<5);
DDRC &=~(1<<6); PORTC |=(1<<6);
DDRC &=~(1<<7); PORTC |=(1<<7);

DDRB=0XFF; PORTB=0XfF; //液晶排线
DDRC|=0X0F; PORTC=0x0f; //液晶控制线
//中断
DDRD &=~(1<<2); PORTD |=(1<<2);
//时钟
DDRD |=(1<<3); PORTD &=~(1<<3);
DDRD |=(1<<4); PORTD &=~(1<<4);
DDRD |=(1<<5); PORTD &=~(1<<5);
//24c02
DDRD |=(1<<6); PORTD |=(1<<6);
DDRD |=(1<<7); PORTD |=(1<<7);


LcmInit(); //lcd初始化

// TCCR1B=0x03;//计时1秒
// TCNT1 = 65536-(12000000/64)*0.02;
//TIMSK |= 0b00000100;

//------------------------------------------------------
MCUCR=0X03; //MCU 控制寄存器- MCUCR
GICR=0X40; //通用中断控制寄存器- GICR
TCCR0=0x05;

TCNT0=256-1000000/1024*0.05;
TIMSK |=0x01;
sei();
//-------------------------------------------------------
while(1)
{
;
}
}
uchar time_isr;
//计时中断T1
ISR(TIMER1_OVF_vect)//计时1秒
{
TCNT1=65536-(12000000/64)*0.02;
// if (++time_isr!=5) return; time_isr=0;
time_isr--;


}
//菜单刷新显示t0中断
ISR(TIMER0_OVF_vect)
{
TCNT0=256-1000000/1024*0.05;
MenuDisp( iMenuID);

}
//键盘中断0
ISR(INT0_vect)
{
key_ctrl();
}
您需要登录后才可以回帖 登录 | 注册会员

*滑块验证:
img_loading
智能检测中
本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2025-6-6 06:25 , Processed in 0.054107 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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