📄 lcd_hg1286._c
字号:
/*****************************************************
* File name : LCD_HG1286.C
* Description : Header file of main_H.H
* Platform : ICCAVR
* Author : xiao xue
* Email : ay1509@yahoo.com
* Date : 2008-03-13
* Description : LCD Show
/********************头文件*************************/
#include"main_H.h"
/***************写命令***************
*函 数:wr_com
*函数功能:写命令字
*入口参数:cmd
*返 回 值:无
*备 注:
************************************/
void wr_com(uchar cmd)
{
PORTB=cmd; //命令送至B端口
RS_clear; //写命令
RW_clear; //写使能
E_clear; //模块使能
delay_nus(300);
E_set; //关闭使能
}
/*****************写数据**************
*函 数:wr_date
*函数功能:写数据
*入口参数:*data
*返 回 值:无
*备 注:
************************************/
void wr_date(uchar *data)
{
PORTB=*data; //数据传至B端口
RS_set; //RS=1,写数据
RW_clear; //RW=0,写使能
E_clear; //E =0,使能
delay_nus(300);
E_set;
}
/******************初始化**********
*函 数:lcd_init
*函数功能:液晶始化
*入口参数:无
*返 回 值:无
*备 注:
**********************************/
void lcd_init(void)
{
DDRB=0xff;
DDRC=0xff;
PORTB=0XFF;
PORTC=0XFF;
wr_com(0x01); //清DDRAM
wr_com(0x30); //功能设置,一次送8位数据(基本指令集)
wr_com(0x02); //DDRAM地址归位
wr_com(0x04);
wr_com(0x0C); //整体显示,游标off,游标位置off
wr_com(0x80); //设定DDRAM7位地址到地址计数器AC
}
/******************显示数据******************
*h代表行数可取(1,2,3,4)
* SUM表示一次要显示汉字的总个数。(1--32)
********************************************/
void dis(uchar h , uchar sum , uchar *datas )
{
unsigned char k=0;
switch (h){ //判断所要显示行
case 1: wr_com(0x80);break;
case 2: wr_com(0x90);break;
case 3: wr_com(0x88);break;
case 4: wr_com(0x98);break;
}//end switch
while(k<=sum){ //显示数据个数
wr_date(&(*(datas+k))); //写入数据
k++;
}//end while
}
/***********************定点显示数据*********************
*LCD显示子程序(一次写入两个字节)
* x代表行数可取:1,2,3,4(十进制)
* y代表列数可取:0X0,0X1————0X7(十六进制)
* *data代表显示数据
********************************************************/
void lcd_dis(uchar x,uchar y,uchar *datac)
{
switch (x){ //判断所要显示行
case 1: wr_com(0x80+y);break; //所要显示行和列
case 2: wr_com(0x90+y);break;
case 3: wr_com(0x88+y);break;
case 4: wr_com(0x98+y);break;
}//end switch
wr_date(datac); //定点显示数据第一个字节
wr_date(&(*(datac+1))); //定点显示数据第二个字节
}
/**********************清屏函数***********************
*函 数:clr
*函数功能:清屏
*入口参数:无
*返 回 值:无
*备 注:
****************************************************/
void clr(void)
{
uchar i,a=0x20;
wr_com(0x80); //显示命令
for(i=1;i<=64;i++)
wr_date(&a); //全部显示空格
}
/**********************欢迎界面*********************
*函 数:page0
*函数功能:显示欢迎界面
*入口参数:无
*返 回 值:无
*备 注:
****************************************************/
void page0(void)
{
dis(2,15,Welcome); //显示欢迎数组
delay_nms(100); //延时
}
/*************************动作界面******************
*函 数:K_Symbol
*函数功能:显示键符名称
*入口参数:无
*返 回 值:无
*备 注:
****************************************************/
void K_Symbol(void)
{
lcd_dis(1,0x7,Symbol); //第一行显示键值符号K1
lcd_dis(2,0x7,Symbol+2); //第二行显示键值符号K2
lcd_dis(3,0x7,Symbol+4);
lcd_dis(4,0x7,Symbol+6);
}
/********************四种模式界面********************
*函 数:page1
*函数功能:显示模式名称
*入口参数:无
*返 回 值:无
*备 注:
****************************************************/
void page1(void)
{
clr(); //清屏
dis(1,8,mode1); //第一行显示模式1
dis(2,8,mode2); //第二行显示模式2
dis(3,8,mode3);
dis(4,8,mode4);
K_Symbol(); //显示键盘符号
}
/**************************动作界面*******************
*函 数:page2
*函数功能:显示动作名称
*入口参数:无
*返 回 值:无
*备 注:
****************************************************/
void page2(void)
{
clr(); //清屏
dis(1,6,Par1); //各行显示对应动作参数
dis(2,6,Par2);
dis(3,6,Par3);
dis(4,6,Par4);
}
/*********************参数值界面*********************
*函 数:page3
*函数功能:显示动作、百分比、时间量
*入口参数:无
*返 回 值:无
*备 注:
****************************************************/
void page3(void)
{
lcd_dis(1,0x3,(name+temp*8)); //显示动作
lcd_dis(1,0x4,(name+temp*8+2));
lcd_dis(1,0x5,(name+temp*8+4));
lcd_dis(1,0x6,(name+temp*8+6));
lcd_dis(2,0x3,(shu+temp1*4)); //显示幅度
lcd_dis(2,0x4,(shu+temp1*4+2));
lcd_dis(3,0x3,(Minutes+temp2*6)); //显示时间
lcd_dis(3,0x4,(Minutes+temp2*6+2));
lcd_dis(3,0x5,(Minutes+temp2*6+4));
lcd_dis(4,0x3,(shu+temp3*4)); //显示力量
lcd_dis(4,0x4,(shu+temp3*4+2));
K_Symbol(); //键盘符号显示
}
/********************时间到后显示界面***************
*函 数:page4
*函数功能:显示时间到界面
*入口参数:无
*返 回 值:无
*备 注:
****************************************************/
void page4(void)
{
clr(); //清屏
dis(2,15,Welcome); //显示欢迎
lcd_dis(3,0x2,(Minutes+temp2*6));
lcd_dis(3,0x3,(Minutes+temp2*6+2));
lcd_dis(3,0x4,(Minutes+temp2*6+4));
lcd_dis(3,0x5,dao); //显示“到!”
lcd_dis(3,0x6,(dao+2));
}
/********************延时函数***************
*函 数:dalay
*函数功能:软件延时
*入口参数:无
*返 回 值:无
*备 注:
****************************************************/
void delay_1us(void) //1us延时函数
{
asm("nop");
}
void delay_nus(unsigned int n) //N us延时函数
{
unsigned int i=0;
for (i=0;i<n;i++);
delay_1us();
}
void delay_1ms(void) //1ms延时函数
{
unsigned int i;
for (i=0;i<1140;i++);
}
void delay_nms(unsigned int n) //N ms延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1ms();
}
void display(void)
{
switch(page){
case 0: page0();flag=1;page=1;break; //欢迎界面
case 1: page1();flag=0; break; //参数设置页面
case 2: page2();flag=0; break; //开始界面
case 3: page3();flag=0; break; //结束界面
default:break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -