⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_hg1286._c

📁 基于ATmega8开发的关于医疗康复的机器人
💻 _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 + -