📄 lcd.c
字号:
}
}
space=space_num+space;
}
}
/******************************************************************************************
*函数名: Initialize
*参数: 无
*返回值: 无
*描述: 初始化LCD子程序
*编写: 李满庭
*版本信息: V1.0 2004年7月7日
******************************************************************************************/
void Initialize(void)
{
uint i;
LcdCommand=0x40; /* ---------LCD SYSTEM SET系统设置令,8个参数-------- */
for(i=0;i<8;i++) /*--------------------字符为8*8点阵-----------------*/
{ /*---------------8点列字体-----------------*/
LcdDataWrite=LCD_set[i]; /*---------------14点行/字符体-------------*/
} /* 显示域长度为320dot */
/* 确定液晶工作频率 */
/* 显示屏高度为240dot */
/* 显示屏一行所占显示缓冲区字节数(L) */
/* 显示屏一行所占显示缓冲区字节数(H) */
LcdCommand=0x44; /* --LCD scl_ICROLL显示区设置命令,最多10个参数-- */
for(i=0;i<8;i++) /* 显示1区对应的显示RAM起始高8位地址 */
{ /* 显示1区对应的显示RAM起始低8位地址 */
LcdDataWrite=LCD_scroll[i]; /* 显示1区占用240个dot行 */
} /* 显示2区对应的显示RAM起始低8位地址 */
/* 显示2区对应的显示RAM起始高8位地址 */
/* 显示3区占用240个dot行 */
/* 显示3区对应的显示RAM起始低8位地址 */
/* 显示3区对应的显示RAM起始高8位地址 */
LcdCommand=0x5a; /* 水平卷动,初始化时必须清零 */
LcdDataWrite=0x00;
LcdCommand=0x5b; /* 各个显示区的合成方式,1个参数 */
LcdDataWrite=0x1c; /* 参数:显示方式为三屏图形叠加,逻辑或 */
LcdCommand=0x58; /* 打开显示,1个参数 */
LcdDataWrite=0x04; /* 只显示第一个区并关闪烁 */
LcdCommand=0x4c; /* 光标自动向右增一?*/
LcdCommand=0x46; /* 设定光标位置命令 */
for(i=0;i<2;i++) /* 从0000位置开始 */
{
LcdDataWrite=0;
}
LcdCommand=0x42; /* 允许MPU连续地把显示数据写入显示区内命令 */
}
/******************************************************************************************
*函数名: Chang_display
*参数: 无
*返回值: 无
*描述: 改画面预处理子程序
*编写: 李满庭
*版本信息: V1.0 2004年7月7日
******************************************************************************************/
void Chang_display()
{
LcdCommand=0x58;
Clear_display();
}
/******************************************************************************************
*函数名: PSW_num
*参数: Key_num
*返回值: 无
*描述: 键盘按键输密码功能执行子程序
*编写: 李满庭
*版本信息: V1.0 2004年7月7日
******************************************************************************************/
void PSW_num(uchar Key_num)
{
uchar i,j;
// uchar a;
// uchar clear_psw;
do // |
{ // |
// delay(0xFF); // |
i=Key_check(); // >等待释放键盘
delay(0x660); // |
} // |
while(i); // |
num++;
if(Key_num==10) // 如果为取消键,则清理密码及提示
{
Clear_Warning();
Clear_pswstar();
num=255;
}
else //非取消键则进行密码识别
{
if(num<6) //键入键数小于六次时
{
if(Key_num==11) //为确认键时,显示输入位数不够
{
Clear_Warning();
WriteWork(130,1,ZKno_full,2,32,8,0);
Clear_pswstar();
num=255;
not_full=1;
}
if(!not_full)
{
PswErr=0;
Clear_Warning();
WriteWork(101,12+num,ZKnum+16*Key_num,1,16,1,0);
Pswnum_buff[num]=Key_num;
}
}
if(!_testbit_(not_full))
{
if(num>=5)
{
if(Key_num==11)
{
PswErr=0;
for(j=0;j<6;j++)
{
if(Pswnum[j]!=Pswnum_buff[j])
{
PswErr=1;
}
}
if(PswErr)
{
WriteWork(130,4,ZKPswErr,2,32,5,0);
WriteWork(130+20,4,ZKPswErr+32*5,2,32,5,0);
num=255;
Clear_pswstar();
}
else
{Chang_display();
Working();
LcdCommand=0x59;
PswDisplay=0;}
}
}
}
}
}
/******************************************************************************************
*函数名: Clear_Warning
*参数: 无
*返回值: 无
*描述: 清除输入密码出错时的警告提示子程序
*编写: 李满庭
*版本信息: V1.0 2004年7月7日
******************************************************************************************/
void Clear_Warning()
{
uchar j;
for(j=0;j<15;j++)
{
WriteWork(130,1+j,ZKnone,2,32,1,0);
WriteWork(130+20,1+j,ZKnone,2,32,1,0);
}
}
/******************************************************************************************
*函数名: Clear_pswstar
*参数: 无
*返回值: 无
*描述: 清除输入密码出错时的星号子程序
*编写: 李满庭
*版本信息: V1.0 2004年7月7日
******************************************************************************************/
void Clear_pswstar()
{ uchar i;
for(i=0;i<6;i++)
{
WriteWork(101,12+i,ZKnone,1,16,1,0);
}
}
/******************************************************************************************
*函数名: Key
*参数: 无
*返回值: 按键识别码或者0
*描述: 确认有键按下子程序,主要添加了软件去抖动功能
*编写: 李满庭
*版本信息: V1.0 2004年7月7日
******************************************************************************************/
uchar Key()
{
uchar Key_num;
Key_num=0;
// Key_num=Key_check();
if(Key_check()==0)
return(0) ;
else
{delay(0x660);
if(Key_num=Key_check())
return(Key_num) ;
else
return(0);
}
}
/******************************************************************************************
*函数名: Key_check
*参数: 无
*返回值: 0或者按键识别码
*描述: 键盘扫扫描子程序,有键按下则返回按键识别码,无则返回0
*编写: 李满庭
*版本信息: V1.0 2004年7月7日
******************************************************************************************/
uchar Key_check()
{
uchar i;
uchar P1_num; //P1口读取的数据
// uchar idata num_H; //返回键盘值高位
// uchar idata num_L; //返回键盘值低位
uchar P1_num_f; //某置低电平时取反数
P1=P1|0XF0;
output=0xEF;
for(i=0;i<4;i++)
{ P1=P1|0xf0;
output=output|0x0f;
P1=P1&output;
P1_num=P1;
P1_num_f=P1_num|0x0f;
P1_num_f=~P1_num_f;
if(output&P1_num_f)
{
/* num_H=P1_num&0xF0;
num_L=_iror_(output,4);
num_L=num_L&0x0F;*/
P1_num=P1_num&0xf0;
num_and=i+P1_num;
return(num_and);
}
output=output<<1;
}
return(0);
}
/********************************************************************************
*********************************************************************************
*********************************************************************************
********************************************************************************/
/******************************************************************************************
*函数名: format_mcu
*参数: 无
*返回值: 无
*描述: 初始化MCU子程序
*编写: 李满庭
*版本信息: V1.0 2004年7月7日
******************************************************************************************/
void format_mcu()
{
// uchar i;
TMOD=0X02;
TL0=TH0=-1000;
ET0=1;
TR0=1;
num=255;
init_24c02();
/* for(i=0;i<6;i++)
{
Pswnum[(i)]=i;
}
write_byte(0,6); */
PswDisplay=1;
read_byte(0,6);
delay(0x10);
LCD_reset=0;
LCD_reset=1;
Initialize(); //Lcd初始化
LcdCommand=0x4f; // 光标地址自动向下增一
Chang_display();
TurnOnWork();
LcdCommand=0x59; //开机画面,输入开机密码
EA=1;
}
/**********************************************************************
*
* 各中断处理函数
*
***********************************************************************/
/******************************************************************************************
*函数名: Timer0_int
*参数: 无
*返回值: 无
*描述: 定时器0中断服务子程序
*编写: 李满庭
*版本信息: V1.0 2004年7月7日
******************************************************************************************/
void Timer0_int(void) interrupt 1 using 1
{
Timer0Num_1++;
if(Timer0Num_1>25)
{
Timer0Num_1=0;
Timer0Num_0++;
if(Timer0Num_0>35)
{
Timer0Num_0=0;
Bit_key=1;
}
}
else
{
Bit_key=0;
}
}
/******************************************************************************************
*函数名: delay
*参数: 无
*返回值: 无
*描述: 延时子程序
*编写: 李满庭
*版本信息: V1.0 2004年7月7日
******************************************************************************************/
void delay(uint delNum)
{
uint i;
for(i=0;i<delNum;i++)
{
;
}
}
void delay1(void)
{
_nop_();
_nop_();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -