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

📄 lcd1602.c

📁 DS18B20做的温度计
💻 C
字号:
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define dat 1
#define com 0	
#include <avr/io.h>
#define DP PORTB		//模拟数居据总线
#define DR DDRB	
#define PP PINB
#define e_s PORTA|=0x20
#define e_c PORTA&=~0x20
#define rw_s PORTA|=0x40
#define rw_c PORTA&=~0x40
#define rs_s PORTA|=0x80
#define rs_c PORTA&=~0x80

void delay(uint t)  		//1mS延时7.3728M
{ulong i;
  while(t--)
   {for(i=0;i<50000;i++)
     ;}
}

void busy(void)		//检查BF信号
{DR=0x00;			//设置为输入	
 do
   {rs_c;rw_s;e_s;}
 while((PP&0x80)!=0);					   //BUSY
 e_c;
 delay(3);
 DR=0xff;
}

void w_lcd(uchar a,uchar dat_com)		//向LCD写命令或数据,由dat_com决定
 {busy();
  if(dat_com==0)
     rs_c;
  else rs_s;
  rw_c;
  DP=a;
  e_s;
  e_c;
}

void ww(uchar word[16])				//写n个字符
{uchar i;
 for(i=0;word[i]!='\0';i++)
   w_lcd(word[i],dat);
}

void wn(uchar num)				//写数字
{w_lcd(num+0x30,dat);
}

void go(uchar xxx,uchar yyy)				//光标移到(xxxx,yyy)
{ uchar tmp;
  if(yyy==0)
    tmp=0x80+xxx;
  else
    tmp=0xc0+xxx;
  w_lcd(tmp,com);
}

void ini(void)							//初始化
{ delay(15);
  w_lcd(0x38,com);
  delay(5);
  w_lcd(0x38,com);
  delay(5);
  w_lcd(0x38,com);
  delay(10);
  w_lcd(0x01,com);					//显示清0
  
}
/*显视方式参数说明:
  0:关显视
  1:不显示光标,写一个字符光标加1,指针加1
  2:显示光标,写一个字符光标加1,指针加1
  3:不显示光标,写一个字符光标不变,指针加1,整屏显视左移
  4:显示光标,写一个字符光标不变,指针加1,整屏显视左移
*/
void set(uchar way)					//显视方式设置,其中way是方式参数
{if(way==0)							//关显视
   w_lcd(0x08,com);
 else if(way==1)							//不显视光标,光标、数据指针加1
   w_lcd(0x0c,com),
   w_lcd(0x06,com);
 else if(way==2)							//显视光标,光标交烁,光标、数据指针加1;
   w_lcd(0x0f,com),
   w_lcd(0x06,com);
 else if(way==3)							//不显视光标,光标不移动,屏幕左移
   w_lcd(0x0c,com),
   w_lcd(0x07,com);
 else if(way==4)							//显视光标,光标不移动,屏幕左移
   w_lcd(0x0f,com),
   w_lcd(0x07,com);
}
  
/*void ws(uchar str0[40],char str1[40])			//写字符串
{ uchar i;
  ini();		//初始化
  set(1);		//设置显视方式
  go(0,0);
  for(i=0;str0[i]!='\0';i++)
    w_lcd(str0[i],dat);
  go(0,1);
  for(i=0;str1[i]!='\0';i++)
   w_lcd(str1[i],dat);
 } 					  		  					//*/

void wsc(const char str0[40],const char str1[40])			//写字符串
{ uchar i;
  ini();		//初始化
  set(1);		//设置显视方式
  go(0,0);
  for(i=0;str0[i]!='\0';i++)
    w_lcd(str0[i],dat);
  go(0,1);
  for(i=0;str1[i]!='\0';i++)
   w_lcd(str1[i],dat);
 }

⌨️ 快捷键说明

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