登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 1602液晶屏总结

[复制链接]
发表于 2019-1-30 20:02:48 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机
学习安排: 熟练掌握
开始时间: 2019-01-30
结束时间: 2019-01-30



     1602显示屏主要是通过 RS RW E这三个脚来进行数据读写,通过高低电平的转换进行数据的写入,写出,不过有一点就是,金沙滩上他用的单片机是C52的而我们用的是12C5a60s2的,我们的单片机运行速度比较快,这里就涉及到了时序问题,简单的说就是引脚间电平转换需要一定时间 间而我们单片机比较快,还有就是一些顺序不能颠倒不然也不会检测信号                                                                           #include<STC12C5A60S2.H>
#define LCD1602_DB P0
sbit LCD1602_RS=P2^0;
sbit LCD1602_RW=P2^1;
sbit LCD1602_E=P1^2;
void InitLcd1602();
void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str);
void main()
{
unsigned char str[]="CHUANG";

InitLcd1602();
LcdShowStr(2,0,str);
LcdShowStr(0,1, "CHUANG");
while(1);
}
void LcdWaitReady()
{
unsigned char sta;

LCD1602_DB=0xFF;
LCD1602_RS=0;
LCD1602_RW=1;
do{
  LCD1602_E=1;
  sta=LCD1602_DB;
  LCD1602_E=0;
}while(sta & 0x80);
}
void LcdWriteCmd(unsigned char cmd)
{
LcdWaitReady();
LCD1602_RS=0;
LCD1602_RW=0;
LCD1602_DB=cmd;
LCD1602_E=1;
LCD1602_E=0;
}
void LcdWriteDat(unsigned char dat)
{
LcdWaitReady();
LCD1602_RS=1;
LCD1602_RW=0;
LCD1602_DB=dat;
LCD1602_E=1;
LCD1602_E=0;
}
void LcdSetCursor(unsigned char x, unsigned char y)
{
unsigned char addr;

if(y==0)
  addr=0x00+x;
LcdWriteCmd(addr|0x80);
}
void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str)
{
LcdSetCursor(x,y);
while(*str!='\0')
{
  LcdWriteDat(*str++);
}
}
void InitLcd1602()
{
LcdWriteCmd(0x38);
  LcdWriteCmd(0x0C);
  LcdWriteCmd(0x06);
  LcdWriteCmd(0x01);
}

152123dk0j00kcrc70njp8.png
194912q3mm9r67x7oz770z.png
204427zq2ihf3l4c1f324o.png
QQ图片20190130194253.jpg
QQ图片20190130200207.jpg
QQ图片20190130200212.jpg
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表