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

📄 lcd.c

📁 avr mega16 驱动lcd1602显示屏
💻 C
字号:
#include <iom16v.h>
#include <macros.h> 
#define LCD_RS   (1 << 4)
#define LCD_RW   (1 << 5)
#define LCD_E    (1 << 7)
#define set_e()  (PORTD |= LCD_E)
#define set_rs() (PORTD |= LCD_RS)
#define set_rw() (PORTD |= LCD_RW)
#define clr_e()  (PORTD &= ~LCD_E)
#define clr_rs() (PORTD &= ~LCD_RS)
#define clr_rw() (PORTD &= ~LCD_RW)
#define uchar unsigned char
#define uint unsigned int
/*-----------------------------------------------------------
delay       :短延时函数
输入参数 x  :粗略延时,x越大,延时越长
输出参数    :无
------------------------------------------------------------*/
void delay(uint dk)
{
  while(dk--);
 }
/*------------------------------------------------------------
lcdwait   :液晶延时函数
输入参数  :无
输出参数  :无
--------------------------------------------------------------*/
void lcdwait(void)
{
  delay(600);
 }
/*-----------------------------------------------------------
lcdpulse   :脉冲函数,把数据写入1602液晶
输入参数   :无
输出参数   :无
---------------------------------------------------------------*/
void lcdpulse(void)
{
  set_e();
  clr_e();
 }

/*----------------------------------------------------------------
lcdsend       :发送一字节数据函数
输入参数 data :要发送字节数据
输出参数      :无
------------------------------------------------------------------*/
void lcdsend(uchar data)
{
  lcdwait();
  PORTB=data;
  lcdpulse();
 }
/*------------------------------------------------------------------
wcom          :写一字节控制字函数
输入参数 com  :要写入控制字
输出参数      :无
-----------------------------------------------------------------*/
void wcom(uchar com)
{
  clr_rs();
  clr_rw();
  lcdsend(com);
  lcdwait();
 }

/*--------------------------------------------------------------
wdat          :显示一字节函数
输入参数 com  :要显示字符ASCⅡ码
输出参数      :无
----------------------------------------------------------------*/
void wdat(uchar dat)
{
  set_rs();
  clr_rw();
  lcdsend(dat);
  lcdwait();
 }
/*------------------------------------------------------------------
LCM1602Reset  :LCM1602复位
输入参数      :无
输出参数      :无
------------------------------------------------------------------*/
void LCM1602Reset(void)
{
  delay(65000);
  wcom(0x38);
  delay(5000);
  wcom(0x38);
  delay(5000);
  wcom(0x38);
  delay(5000);
  wcom(0x38);
 }

/*------------------------------------------------------------------
lcdinit       :LCM1602初始化
输入参数      :无
输出参数      :无
-------------------------------------------------------------------*/
void lcdinit(void)
{
  wcom(0x01);           //清屏
  wcom(0x3c);           //显示开关控制:8bit,2行显示,5x7
  wcom(0x0c);           //光标开,闪烁关
  wcom(0x06);           //输入方式,增量方式,不移动
 }

/*-----------------------------------------------------------------
disp_string   :显示一字符串函数
输入参数 data :字符串指针
输出参数      :无
------------------------------------------------------------------*/
void disp_string( uchar *data )
{
  while(*data!=0) {wdat(*data);data++;}
 }

                                           //设置显示坐标:X 0~39,Y:0~1
#define setxy(x,y) wcom(((x)|((y)<<6))|0x80) 

/*--------------------------------------------------------------
main       :主函数
输入参数   :无
输出参数   :无
--------------------------------------------------------------*/
void main()
{
  DDRD=0xff;
  DDRB=0xff;
  LCM1602Reset();
  lcdinit();
  setxy(0,0);
  disp_string("Easy Learning..");
  setxy(2,1);
  disp_string("Avr Studio! ");

  while(1)
    {
      wcom(0x08);   //显示关
      delay(65000);
      delay(65000);
      delay(65000);
      delay(65000);
      delay(65000);
      delay(65000);
      delay(65000);
      delay(65000);

      wcom(0x0c);   //显示开
      delay(65000);
      delay(65000);
      delay(65000);
      delay(65000);
      delay(65000);
      delay(65000);
      delay(65000);
     }
 }

⌨️ 快捷键说明

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