单片机怎样驱动LCD呢,具体程序好,奖励大快急用

单片机怎样驱动LCD呢,具体程序好,奖励大快急用,第1张

/*

必要 *** 作:正确连接1602

*/

#include<reg51.h>

#define uint unsigned int //定义常用数据类型替代码

#define uchar unsigned char

#define dat P0 //定义LCD1602的数据口为P0

sbit rs=P1^0 //定义RS口为P10

sbit rw=P1^1 //定义RW口为P11

sbit e=P1^2 //定义E口为P12

uchar busy //1602判忙标志

void delay_1ms(void) //延时程序

void display(void) //显示程序

void busy_1602(void) //液晶查忙程序

void shj_1602(uchar a)//液晶写数据程序

void int_1602(void) //液晶初始化

void zhl_1602(uchar a)//液晶写指令程序

void main(void) //主程序开始

{

for()

{

display()//在大循环内调用显示函数,一直显示

}

}

void delay_1ms(void)//延时程序

{

uchar i,j

for(i=0i<10i++)

for(j=0j<20j++)

}

void display(void) //液晶显示程序

{

uchar i //定义计数值

uchar table0[16]={"Hello bin MCU! "} //定义LCD1602显示2行的字符

uchar table1[16]={"--chen qi bin "}

int_1602() //初始化1602

zhl_1602(0x80)//写指令

for(i=0i<16i++)//发送数据第一行

{

shj_1602(table0[i])

}

zhl_1602(0xc0)

for(i=0i<16i++)//发送数据第二行

{

shj_1602(table1[i])

}

}

void busy_1602(void)//查询忙碌标志信号程序

{

do

{

e=0

rw=1//高电平读 *** 作

rs=0//指令

e=1

busy=dat

e=0

delay_1ms()

} while(busy&&0x10==1) //忙就一直读,此读忙是读的DB7 do while 用法是当while里面成立时就一直do

}

void zhl_1602(uchar a)//写指令到LCM程序 写数据写指令前都需要查忙

{

busy_1602()

e=0

rw=0

rs=0

e=1

dat=a //e=1变为e=0下降沿写入

e=0

}

void shj_1602(uchar a)//写数据到LCM程序 LCM为液晶显示模块

{

busy_1602()

e=0

rw=0//低电平写 *** 作

rs=1//数据

e=1

dat=a

e=0

}

void int_1602(void) //启动LCM程序 初始化LCD

{

zhl_1602(0x38) //显示模式设置

zhl_1602(0x0c)//显示开关光标设置

zhl_1602(0x06)

}

#include<reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

sbit RS = P2^1

sbit RW = P2^2

sbit E = P2^3

uchar idata wlcome[16]={"asdfghjklpoiuytr"}

uchar idata lcdtimer[16]={"qwertyuioplkjhgf"}

void delayus(uint a)//微秒延时//

{

while(a--)

}

void delay(uint dell)//毫秒延时//

{

uchar x

for(delldell>0dell--)

for(x=110x>0x--)

}

void wr_com(uchar temp)//写指令//0

{

RS=0

RW=0

P0=temp

E=1

E=0

}

void wr_data(uchar num)//写数据//

{

RS=1

RW=0

P0=num

E=1

E=0

}

void disp_lcd(uchar addr,uchar *templ)

{

uchar i

wr_com(addr)

delay(50)

for(i=0i<16i++)

{

wr_data(templ[i])

delay(50)

}

}

void lcd_init()//初始化液晶//

{

wr_com(0x30)

delay(50)

wr_com(0x38)

delay(50)

wr_com(0x01)

delay(50)

wr_com(0x06)

delay(50)

wr_com(0x0c)

delay(50)

}

void main()

{

lcd_init()

while(1)

{

disp_lcd(0x80,wlcome)

disp_lcd(0xc0,lcdtimer)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11962071.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存