开发板电源按钮上面的滑动变阻器(1602标号的是控制1602液晶的,12864标号的是控制12864液晶的)是控制液晶的颜色,可以把矩阵检测的程序写入单片机,然后然液晶显示,同时顺时针调节滑动变阻器,让液晶颜色变亮

这里用的1602(16对应一行显示十六个字符,02对应一共两行)液晶阵脚是十六针的,一行显示十六个字符,一共两行;12864(横的128个点,竖的 64点)图像液晶,

见1602液晶说明的P1,RS是数据命令选择端,高电平表示数据选择端,低电平表示命令选择端,程序中写命令,RS状态是H,程序中写数据,4号口接到单片机的P3.5上

RL高电平是读选择端状态,低电平是写选择端

在使用一个芯片的之前要将这个芯片的资料搞明白,搞明白之后再操作该芯片

见1602液晶说明的P2的基本操作时序,高脉冲指的是一个凸型脉冲,低脉冲指的是一个凹型脉冲,这里只看写指令和写数据;见P5写操作时序中,RS先给低电平写指令再给高电平写数据,RW给低电平开始写指令或数据,tsp2为有效数据准备时间,当E高电平时,开始将有效数据送出,在tpw时间内DB0到DB7的数据必须有效才能写进去,这里我们给RW始终低电平让液晶始终在写;见P2的显示模式设置,5*7点阵就是横行5个点、竖行7个点显示一个字符,指令码对应0x38;见P3的设置指针设置,80H+0对应RAM地址(见P2)上面的00,80H+1对应RAM(数据存储区)地址的01,从00到27,然后断开,再从40到67;P2的RAM地址映射图是液晶数据存储区的地址映射

开发板上液晶在蜂鸣器的下面,HEADER16,1管脚是地,2管脚是VCC,15和16管脚是背光的作用,15管脚接电阻用来限流并且不让光太亮,D0到D7是数据口接单片机的P0口,6管脚是使能,对应TX-1C型单片机实验板原理图上的LCDEN接单片机的P3.4口,管脚5是读写选择端R/W,这里只写不读,给5管脚低电平,数据命令选择端RS接单片机的P3.5口,3管脚是偏压信号,液晶显示需要一个负电压,上面有个滑动变阻器,调节滑动变阻器内部显示的对比度就发生变化;程序中控制LCDEN接单片机的P3.4口和数据命令选择端RS接单片机的P3.5口即可

液晶使用时先把光标弄出来,可以写两个函数,一个用来写指令一个用来写程序

买完液晶就看资料,看完资料就按资料连接控制就行了

寄存器等一些知识不用记的,我们是应用,应用时可以查书

使用时要关掉数码管,防止和液晶一起使用时功率过大,所以用锁存器关掉数码管

液晶显示不用大循环,显示后不给命令改变就不会变

先让液晶有显示:

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

sbit lcden=P3^4;

sbit lcdrs=P3^5;

sbit dula=P2^6;//使用时要关掉数码管,防止和液晶一起使用时功率过大,所以用锁存器关掉//数码管

sbit wela=P2^7;

uchar num;

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void write_com(uchar com)

{

lcdrs=0;

P0=com;//数据口送上数据,有效数据准备好后让使能端lcden置高

delay(5);//见1602液晶说明P2的写程序时序图

lcden=1;

delay(5);

lcden=0;

}

void write_data(uchar date)//液晶写指数据

{

lcdrs=1;

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void init()

{

dula=0;

wela=0;

lcden=0;

write_com(0x38);//见1602液晶说明P2,初始化设置中第一步显示模式设置

write_com(0x0e);//显示开关及光标设置

write_com(0x06);//地址指针加1 ,整屏不移动

}

void main()

{

init();

while(1);

}

写数字1:见字符手册的PDF的P16的表,当送去‘1’(‘1’实际上是ASCII码,对应一个十六进制数)时,实际上送去的是31(3为横坐标,1为纵坐标),程序中可以送0x31

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

//uchar code table[]="I LIKE MCU!";//写单字符用单引号引,多字符用双引号引

//uchar code table1[]="WWW.TXMCU.COM";

sbit lcden=P3^4;

sbit lcdrs=P3^5;

sbit dula=P2^6;//使用时要关掉数码管,防止和液晶一起使用时功率过大,所以用锁存器关掉//数码管

sbit wela=P2^7;

uchar num;

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void write_com(uchar com)

{

lcdrs=0;

P0=com;//数据口送上数据

delay(5);//见见1602液晶说明P2的写程序时序图

lcden=1;

delay(5);

lcden=0;

}

void write_data(uchar date)//液晶写指数据

{

lcdrs=1;

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void init()

{

dula=0;

wela=0;

lcden=0;

write_com(0x38);//见1602液晶说明P2,初始化设置中第一步显示模式设置

write_com(0x0e);//显示开关及光标设置

write_com(0x06);//地址指针加1 ,整屏不移动,当write_com(0x07)时,在初始化//write_com(0x80)地址没有变化时,所有字符移动到液晶左侧的外面,

write_com(0x01);//01为清屏指令

write_com(0x80);//数据指针初始化,设置数据的初始位置

}

void main()

{

init();

write_data('1');//注意要有单引号,如果没有单引号write_data(1),就会显示乱码

while(1);//保持住

}

主程序中写入AB:

void main()

{

init();

write_data(0x41);

delay(10);

write_data('B');

while(1);

}

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

uchar code table[]="I LIKE MCU!";//写单字符用单引号引,多字符用双引号引

uchar code table1[]="WWW.TXMCU.COM";//注意数组是从序号0开始的

sbit lcden=P3^4;

sbit lcdrs=P3^5;

sbit dula=P2^6;//使用时要关掉数码管,防止和液晶一起使用时功率过大,所以用锁存器关掉//数码管

sbit wela=P2^7;

uchar num;

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void write_com(uchar com)//液晶写指令,见1602液晶说明P2的写指令

{

lcdrs=0;//RS给低电平写指令,这里就不用把RS置为高电平

P0=com;//数据口送上数据

delay(5);//见见1602液晶说明P2的写程序时序图

lcden=1;

delay(5);

lcden=0;

}

void write_data(uchar date)//液晶写指数据

{

lcdrs=1; //RS给高电平读指令,这里就不用把RS置为低电平

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void init()

{

dula=0;//关掉数码管

wela=0;

lcden=0;

write_com(0x38);//见1602液晶说明P2,初始化设置中第一步显示模式设置

write_com(0x0e);//显示开关及光标设置

write_com(0x06);//地址指针加1 ,整屏不移动

write_com(0x01);//01为清屏指令

write_com(0x80+0x10);//数据指针初始化

}

void main()

{

init();

for(num=0;num<11;num++)

{

write_data(table[num]);

delay(20);//延长的时间长可以看出动态效果,如delay(300)

}//在该句下面添加清屏write_com(0x01),table[]的字符显示完就清屏,继续显示下面的

write_com(0x80+0x40);//放到第二行可以write_com(0x80+0x40),见1602液晶说明

//想空几位,可以write_com(0x80+0x40+0x03),右移三位,也可以write_com(0x80+0x40+3),//这里十进制和十六进制可以通用

for(num=0;num<13;num++)

{

write_data(table1[num]);

delay(20);

}

while(1);

}

字符串先显示出来,再全部左移:

编译后错误提示:UNCALLED SEGMENT表示一个函数没有调用

显示从右到左滚动:将数据指针指到10那,写完再用整屏移动,见EN_TC1602的PDF的P12的Cursor or Display Shift命令,S/C和R/L为10时表示显示左移,光标跟随显示移动,code为0x18左移一下:

void main()

{

init();

for(num=0;num<11;num++)// 这里写的数据是在液晶外面写的,初始化程序的0x10是液晶外面

{

write_data(table[num]);

delay(200);//延长的时间长可以看出动态效果,如delay(300)

}

write_com(0x80+0x53);

for(num=0;num<13;num++)// 这里写的数据是在液晶外面写的,0x53是液晶外面

{

write_data(table1[num]);

delay(20);

}

for(num=0;num<16;num++)

{

write_com(0x18);//写完数据就移动,整屏左移

delay(200);

}

while(1);

}

郭天祥的10天学会51单片机_第八节相关推荐

  1. 郭天祥的10天学会51单片机_第十三节

    AD软件: AD软件可以编译C语言和VHDL语言等:AD软件的工具栏上面可以输入网络地址进行浏览网页:AD软件可以布差分信号,即可以两条线可以一起布 按住Shift键和左键可以向左移动,按住Shift ...

  2. 郭天祥的10天学会51单片机_第七节

    串行通信:从D0位一位一位发发到D7位 十个位为一帧如:0101000100,表示一个字符 起始位低电平有效,停止位高电平有效,单片机是异步通信 宽带网线是八根线,组成两队差分信号,分别是TXD1(发 ...

  3. 郭天祥的10天学会51单片机_第三节

    单片机管脚,P3口有两个功能,上电默认情况下就使用P3口的普通IO口,当对单片机内部的某些寄存器设置时就启用P3口的第二个功能 P3^4和 P3^5可以作为计时器或定时器使用,给这两个口输入方波,进行 ...

  4. 10.4.4 51单片机控制系统8个LED“跑马灯”实验

    10.4.4 51单片机控制系统8个LED"跑马灯"实验 仿真+代码 方法一 利用数组 #include"reg52.h"#define u8 unsigned ...

  5. 51单片机学习笔记(郭天祥版)(1)——单片机基础和点亮LED灯

    关于单片机型号的介绍: STC89C52RC40C-PDIP 0721CV4336..... STC:STC公司 89:89系列 C:COMS 52(还有51,54,55,58,516,):2表示存储 ...

  6. 红外测距模块 51单片机_[51单片机] HC-SR04超声波测距仪

    1.HC-SR04超声波模块工作原理 (1)采用IO口触发测距,给至少10us高电平脉冲: (2)模块自动发送八个40khz方波,并自主检测是否有电波返回: (3)当有信号返回时,通过IO口输出一个高 ...

  7. 2440 8字数码管 显示0到10 c语言,51单片机对8位数码管依次显示0-7的设计

    共阳极数组0~9:display[]={0xC0,0xF9,0xA4,0xB0,0x91,0xA2,0x82,0xF8,0x80,0x90} 共阳极数组A~F:display[]={0x88,0x83 ...

  8. 单片机c语言二进制转10进制,51单片机用C语言怎么样把八位二进制转换成十进制...

    满意答案 sunzhaoming 2013.07.06 采纳率:41%    等级:12 已帮助:8866人 //******************************************* ...

  9. 51单片机_动态数码管显示

    动态数码管显示(延时函数) 编程原理 利用延迟函数,每秒钟数码管加1显示,一直加到250.延时函数精度不高,最好使用定时器中断. 数码管动态显示原理 动态数码管显示有段选和位选.段选是单个数码管显示的 ...

  10. 51单片机_点亮第一个LED灯_0x01

    /*点亮第一个led灯sbit 变量名=地址值; */#include <reg52.h>sbit led=P2^0; //即定义led为P2口的第0位,以便进行位操作.(sbit是定义特 ...

最新文章

  1. 用perl 实现 svn 差异备份
  2. 【kaggle入门题一】Titanic: Machine Learning from Disaster
  3. Run Length Encoding
  4. android.mk添加静态库,Android Gradle添加静态库
  5. grafana高可用架构
  6. pythoninit_Python __init__.py文件的作用
  7. Baxter实战 (三)ubuntu14.04安装Baxter Simulator
  8. 学习英语,先记下留着后用
  9. android设计个人简历页面_Android程序员简历模板
  10. python合并两个txt、并且逐条合并_用python实现两个文本合并
  11. 宝塔自动备份网站到FTP空间
  12. 系统分区减小_每日一练,防排烟系统,6.1
  13. 微信小程序 #项目笔记# | 从0到1实现外卖点餐系统小程序
  14. strcpy、strcpy_s、strncpy、strncpy_s
  15. 吴恩达机器学习课后作业ex1(python实现)
  16. 小数形式与科学计数法转换(简)
  17. iOS 深入理解framework
  18. 断食3天能重启免疫系统?坚持断食的人,身体都怎么样了?
  19. linux课后总结第三章
  20. 15-Workbench 载荷与约束

热门文章

  1. 小觅相机运行VINS-Fusion(二)——Camera-IMU参数标定
  2. win7访问linux共享没有权限设置,局域网共享时提示:你没有权限访问,请与网络管理员联系...
  3. html table表格重叠,详解html中表格table的行列合并问题解决
  4. 历届试题 填字母游戏
  5. php qrcode二维码应用
  6. 【Flutter 问题系列第 7 篇】TextField 去掉下划线
  7. 词干提取(stemming)和词形还原(lemmatization)
  8. 用JAVA实现蓝桥杯基础训练之特殊回文数:123321是一个非常特殊的数,它从左边读和从右边读是一样的,输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
  9. Java学习:Java程序员必读的经典书籍没有之一,你读过几本?
  10. 用技术去掉搜索引擎中的死链接