最新51单片机任意2个IO口驱动LCD1602Word文件下载.docx
- 文档编号:19761116
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:11
- 大小:1.29MB
最新51单片机任意2个IO口驱动LCD1602Word文件下载.docx
《最新51单片机任意2个IO口驱动LCD1602Word文件下载.docx》由会员分享,可在线阅读,更多相关《最新51单片机任意2个IO口驱动LCD1602Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
驱动电路图
效果图
Proteus仿真
程序
#include<
reg52.h>
intrins.h>
sbitSCL=P3^0;
sbitSDA=P3^1;
bitack;
unsignedcharLCD_data;
unsignedcharcodedigit[]={"
0123456789"
};
//定义字符数组显示数字
//*****************延时************************
voiddelay_nus(unsignedintn)//Nus延时函数
{
unsignedinti=0;
for(i=0;
i<
n;
i++)
_nop_();
}
voiddelay_nms(unsignedintn)//Nms延时函数
unsignedinti,j;
for(j=0;
j<
1140;
j++);
voidnop4()
_nop_();
//等待一个机器周期
//***************************************
voidStart()
SDA=1;
SCL=1;
nop4();
SDA=0;
SCL=0;
voidStop()
SDA=0;
//>
4us后SCL跳变
SDA=1;
//******************************************
voidWrite_A_Byte(unsignedcharc)
unsignedcharBitCnt;
for(BitCnt=0;
BitCnt<
8;
BitCnt++)//要传送的数据长度为8位
{
if((c<
<
BitCnt)&
0x80)SDA=1;
//判断发送位
elseSDA=0;
//置时钟线为高,通知被控器开始接收数据位
}
//8位发送完后释放数据线,准备接收应答位
if(SDA==1)ack=0;
elseack=1;
//判断是否接收到应答信号
bitWrite_Random_Address_Byte(unsignedcharadd,unsignedchardat)
Start();
//启动总线
Write_A_Byte(add);
//发送器件地址
if(ack==0)return(0);
Write_A_Byte(dat);
//发送数据
Stop();
//结束总线
return
(1);
//********************液晶屏使能*********************
voidEnable_LCD_write()
LCD_data|=(1<
(3-1));
//E=1;
Write_Random_Address_Byte(0x40,LCD_data);
delay_nus
(2);
LCD_data&
=~(1<
//E=0;
//*************写命令****************************
voidLCD_write_command(unsignedcharcommand)
delay_nus(16);
(1-1));
//RS=0;
(2-1));
//RW=0;
=0X0f;
//清高四位
LCD_data|=command&
0xf0;
//写高四位
Enable_LCD_write();
command=command<
4;
//低四位移到高四位
=0x0f;
LCD_data|=command&
0xf0;
//写低四位
//*************写数据****************************
voidLCD_write_data(unsignedcharvalue)
//RS=1;
LCD_data|=value&
value=value<
//**********************设置显示位置*********************************
voidset_position(unsignedcharx,unsignedchary)
unsignedcharposition;
if(y==0)
position=0x80+x;
else
position=0xc0+x;
LCD_write_command(position);
//**********************显示字符串*****************************
voiddisplay_string(unsignedcharx,unsignedchary,unsignedchar*s)
{
set_position(x,y);
while(*s)
{
LCD_write_data(*s);
s++;
}
//*************液晶初始化****************************
voidLCD_init(void)
LCD_write_command(0x28);
delay_nus(40);
//4位显示!
LCD_write_command(0x0c);
//显示开
LCD_write_command(0x01);
//清屏
delay_nms
(2);
voidmain(void)
LCD_init();
display_string(4,0,"
imxuheng"
);
//显示一段文字
display_string(2,1,"
HelloToday!
"
while
(1);
程序还不够完美,自身工作与电学没什么关系,只是业余爱好鼓捣鼓捣,希望各位能够提出修改意见。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 51 单片机 任意 IO 驱动 LCD1602