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

📄 lcd.h

📁 基于ATMEGA16的温度传感器原代码
💻 H
字号:
#define uchar unsigned char
#define uint unsigned int
/*******************************************************/
/******   函数名称: send_data ()                  ******/
/******   功    能: 写入字节数据                  ******/
/******                                           ******/
/******   参    数: uchar data                    ******/
/******   返回值  : 无                            ******/
/*******************************************************/
void LCD_send_data(uchar data)
{  
    unsigned char i;   			 	
	for(i=0;i<8;i++)				//循环8次		
	{								
		PORTA&=~0x08;				//置低CLK
		if(data&0x80)				//判断数据极性
		PORTA|=0X04;				//如果数据为1置高
		else						
		PORTA&=~0X04;				//否则置低
		data<<=1;					//右移一位
		PORTA|=0X08;				//置高CLK
		//delay_nus(1);
		//PORTA&=~0X08;				//置低
	}
 }
/*******************************************************/
/******   函数名称: wr_command(char)              ******/
/******   功    能: 向LCD写入控制字               ******/
/******                                           ******/
/******   参    数: com                           ******/
unsigned char ADtmp,ADbz=0;
#define LCD_DATAL PORTA&=~BIT(2)
#define LCD_DATAH PORTA|=BIT(2) 
#define LCD_CLKL PORTA&=~BIT(3)
#define LCD_CLKH PORTA|=BIT(3)
#define JP_CHK  PINA&BIT(4)
#define JP_CHK2  PINA&BIT(1)
void delay(unsigned char n)
{	 
	 unsigned char i;
 	 for(i=0;i<n;i++)                //延时
	 {asm("nop");}
}
//*************************************************************************

//***************************************************************************
void lcd_out(unsigned char send_byte)
{    
    unsigned char i,s;
 	for (i=0;i<8;i++)
	{
	 if((send_byte&0x80)==0)
	 {
	     LCD_DATAL;
	 }
	 else
	 {
	     LCD_DATAH;
	 }      //送数据
	 LCD_CLKL;
	 LCD_CLKH;
	 send_byte=send_byte<<1;
	}
	delay(256);
}
//***************************************************************************

void WR_dat(unsigned char dat)
{
     unsigned char s;
	 s=dat&0xf0;
	lcd_out(0xfa);
	 lcd_out(s);
	 s=dat&0x0f;
	 s<<=4;
	 lcd_out(s);
}
//**************************************************************************
void WR_control(unsigned char dat)
{
     unsigned char s;
	 s=dat&0xf0;
	 lcd_out(0xf8);
	 lcd_out(s);
	 s=dat&0x0f;
	 s<<=4;
	 lcd_out(s);
}
//**************************************************************************
void lcd_control()
{
	WR_control(0x30);
	WR_control(0x0c);
}
//**************************************************************************
void lcd_clear()
{
  int i;
  WR_control(0x01);
  for(i=0;i<5000;i++)	//	延时5ms
	{
		asm("nop");
		asm("nop");
	} 
}
/*******************************************************/
/******   函数名称: LCD_set_xy()                  ******/
/******   功    能: 设置LCD显示坐标               ******/
/******   参    数: 显示字符串的位置,X:0-15,Y:0-1*****/
/******   返回值  : 无                            ******/
/*******************************************************/
void LCD_address( unsigned char x, unsigned char y )
{
 	unsigned char address;
	switch(x)
	{
	 	case 0:
			   address = 0x80 + y;		   //计算显示地址
			   break;
		case 1:
			   address = 0x90 + y;		   //计算显示地址
			   break;
		case 2:
			   address = 0x88 + y;		   //计算显示地址
			   break;
		case 3:
			   address = 0x98 + y;		   //计算显示地址
			   break;
		default:address = 0x80 + y;
	}
	WR_control( address);	  	   	   		   //写地址命令
}
//**************************************************************************
/*******************************************************/
/******   函数名称: LCD_write_string()            ******/
/******   功    能: 中英文字符串显示函数          ******/
/******   参    数: *s--英文字符串指针            ******/
/******             X、Y--显示字符串的位置        ******/
/******   返回值  : 无                            ******/
/*******************************************************/
void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)
{
    
 	LCD_address( X, Y );		   				//写显示地址
    while (*s) 	   	 						//是否到字符串尾
    {
     	WR_dat (*s );						//写显示数据
		s ++;								//字符串地址加1
 	}
}


/******************************************************************************/ 
//函数功能:将BCD码转换为ASCII码函数 
//输入数据:BCD
//输出:ASCII
//作者:韩红瑞
//修改时间:2006-08-31
/******************************************************************************/ 
unsigned char BCD_ASCII(unsigned char bcd) 
{ 
    bcd &= 0x0F; 
    if(bcd > 9)  
    bcd +=('7');     // 将A~F转换为ASCII 
    else 
    bcd += '0';         // 将0~9转换为ASCII 0~9 
    return(bcd); 
} 
 

void  LCD_writeasc(unsigned char x, unsigned char y, unsigned char data)
{
    LCD_address(x,y);
	WR_dat(data);
}
  
void Lcd_INT()
{
  //DDRD|=0X03;
  //PORTD=0X03;
  lcd_control();
}

void lcd_writechar(unsigned char X,unsigned char Y,unsigned char number)
{
    LCD_address(X,Y);
	WR_dat(BCD_ASCII(number>>4));
	WR_dat(BCD_ASCII(number));
}

void lcd_write2(unsigned char X,unsigned char Y,unsigned int number)
{
    LCD_address(X,Y);
	
	//WR_dat(BCD_ASCII(number));//%1000/100
	//WR_dat(BCD_ASCII(number));//%1000%100/10
    WR_dat(BCD_ASCII(number));//%10
}
void show_time(unsigned int time)
{
    
	unsigned char temp;
	temp=time/60;
	lcd_writechar(1,3,((temp/10)<<4)+(temp%10)); //  显示分 
	//LCD_Write_string(1,2,"分");
	temp=time%60; //  显示秒 
	lcd_writechar(1,5,((temp/10)<<4)+(temp%10));
	
}


unsigned char JD[11]={'5','4','3','2','1','0','1','2','3','4','5'};

void lcd_writejd(unsigned char X,unsigned char Y,unsigned char number)
{
    LCD_address(X,Y);
	if(number<5)
	{
	    WR_dat('+');
	}
	else if(number==5)
	{
	    WR_dat(' ');
	}
	else
	{
	    WR_dat('-');
	}
	WR_dat(JD[number]);
}
   //WR_dat(BCD_ASCII(number/100));
	            //WR_dat(BCD_ASCII(number%100/10));
	//WR_dat(BCD_ASCII(number%10));	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -