郭天祥的10天学会51单片机_第八节
开发板电源按钮上面的滑动变阻器(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单片机_第八节相关推荐
- 郭天祥的10天学会51单片机_第十三节
AD软件: AD软件可以编译C语言和VHDL语言等:AD软件的工具栏上面可以输入网络地址进行浏览网页:AD软件可以布差分信号,即可以两条线可以一起布 按住Shift键和左键可以向左移动,按住Shift ...
- 郭天祥的10天学会51单片机_第七节
串行通信:从D0位一位一位发发到D7位 十个位为一帧如:0101000100,表示一个字符 起始位低电平有效,停止位高电平有效,单片机是异步通信 宽带网线是八根线,组成两队差分信号,分别是TXD1(发 ...
- 郭天祥的10天学会51单片机_第三节
单片机管脚,P3口有两个功能,上电默认情况下就使用P3口的普通IO口,当对单片机内部的某些寄存器设置时就启用P3口的第二个功能 P3^4和 P3^5可以作为计时器或定时器使用,给这两个口输入方波,进行 ...
- 10.4.4 51单片机控制系统8个LED“跑马灯”实验
10.4.4 51单片机控制系统8个LED"跑马灯"实验 仿真+代码 方法一 利用数组 #include"reg52.h"#define u8 unsigned ...
- 51单片机学习笔记(郭天祥版)(1)——单片机基础和点亮LED灯
关于单片机型号的介绍: STC89C52RC40C-PDIP 0721CV4336..... STC:STC公司 89:89系列 C:COMS 52(还有51,54,55,58,516,):2表示存储 ...
- 红外测距模块 51单片机_[51单片机] HC-SR04超声波测距仪
1.HC-SR04超声波模块工作原理 (1)采用IO口触发测距,给至少10us高电平脉冲: (2)模块自动发送八个40khz方波,并自主检测是否有电波返回: (3)当有信号返回时,通过IO口输出一个高 ...
- 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 ...
- 单片机c语言二进制转10进制,51单片机用C语言怎么样把八位二进制转换成十进制...
满意答案 sunzhaoming 2013.07.06 采纳率:41% 等级:12 已帮助:8866人 //******************************************* ...
- 51单片机_动态数码管显示
动态数码管显示(延时函数) 编程原理 利用延迟函数,每秒钟数码管加1显示,一直加到250.延时函数精度不高,最好使用定时器中断. 数码管动态显示原理 动态数码管显示有段选和位选.段选是单个数码管显示的 ...
- 51单片机_点亮第一个LED灯_0x01
/*点亮第一个led灯sbit 变量名=地址值; */#include <reg52.h>sbit led=P2^0; //即定义led为P2口的第0位,以便进行位操作.(sbit是定义特 ...
最新文章
- 用perl 实现 svn 差异备份
- 【kaggle入门题一】Titanic: Machine Learning from Disaster
- Run Length Encoding
- android.mk添加静态库,Android Gradle添加静态库
- grafana高可用架构
- pythoninit_Python __init__.py文件的作用
- Baxter实战 (三)ubuntu14.04安装Baxter Simulator
- 学习英语,先记下留着后用
- android设计个人简历页面_Android程序员简历模板
- python合并两个txt、并且逐条合并_用python实现两个文本合并
- 宝塔自动备份网站到FTP空间
- 系统分区减小_每日一练,防排烟系统,6.1
- 微信小程序 #项目笔记# | 从0到1实现外卖点餐系统小程序
- strcpy、strcpy_s、strncpy、strncpy_s
- 吴恩达机器学习课后作业ex1(python实现)
- 小数形式与科学计数法转换(简)
- iOS 深入理解framework
- 断食3天能重启免疫系统?坚持断食的人,身体都怎么样了?
- linux课后总结第三章
- 15-Workbench 载荷与约束
热门文章
- 小觅相机运行VINS-Fusion(二)——Camera-IMU参数标定
- win7访问linux共享没有权限设置,局域网共享时提示:你没有权限访问,请与网络管理员联系...
- html table表格重叠,详解html中表格table的行列合并问题解决
- 历届试题 填字母游戏
- php qrcode二维码应用
- 【Flutter 问题系列第 7 篇】TextField 去掉下划线
- 词干提取(stemming)和词形还原(lemmatization)
- 用JAVA实现蓝桥杯基础训练之特殊回文数:123321是一个非常特殊的数,它从左边读和从右边读是一样的,输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
- Java学习:Java程序员必读的经典书籍没有之一,你读过几本?
- 用技术去掉搜索引擎中的死链接