LCD1602的电路图和程序文档格式.docx
- 文档编号:15403973
- 上传时间:2022-10-30
- 格式:DOCX
- 页数:16
- 大小:2.09MB
LCD1602的电路图和程序文档格式.docx
《LCD1602的电路图和程序文档格式.docx》由会员分享,可在线阅读,更多相关《LCD1602的电路图和程序文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
RS(数据命令选择端),R/W(读写选择端),E(使能信号);
以后编程便主要围绕这三个管脚展开进行初始化,写命令,写数据。
以下具体阐述这三个管脚:
RS为寄存器选择,高电平选择数据寄存器,低电平选择指令寄存器。
R/W为读写选择,高电平进行读操作,低电平进行写操作。
E端为使能端,后面和时序联系在一起。
除此外,D0~D7分别为8位双向数据线。
操作时序:
RS
R/W
操作说明
写入指令码D0~D7
1
读取输出的D0~D7状态字
写入数据D0~D7
从D0~D7读取数据
注:
关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0.
读取状态字时,注意D7位,D7=1,禁止读写操作;
D7=0,允许读写操作;
所以对控制器每次进行读写操作前,必须进行读写检测。
(即后面的读忙子程序)
指令集:
LCD_1602初始化指令小结:
0x38
设置16*2显示,5*7点阵,8位数据接口
0x01
清屏
0x0F
开显示,显示光标,光标闪烁
0x08
只开显示
0x0e
开显示,显示光标,光标不闪烁
0x0c
开显示,不显示光标
0x06
地址加1,当写入数据的时候光标右移
0x02
地址计数器AC=0;
(此时地址为0x80)光标归原点,但是DDRAM中断内容不变
0x18
光标和显示一起向左移动
(2)飞思卡尔单片机的功能及特点:
MC9S12XS128是16位单片机,由16位中央处理单元(CPU12X)、128KB程序、Flash(P-lash)、8KBRAM、8KB数据Flash(D-lash)组成片内存储器。
主要功能模块包括:
内部存储器,内部PLL锁相环模块,2个异步串口通讯SCI,1个串行外设接口SPIMSCAN模块,1个8通道输入/输出比较定时器模块TIM,周期中断定时器模块PIT,16通道A/D转换模块ADC,1个8通道脉冲宽度调制模块PWM,输入/输出数字I/O口。
本次设计中主要用到PORTA,PORTB端口:
PORTA:
PORTA为通用I/O口,共8个,作为通用数字I/O口使用,未集成特殊功
能.主要配置寄存器有:
数据寄存器PORTA、数据方向寄存DDRA、上拉电阻控制寄存器
PUCR和驱动控制寄存器RDR。
a.数据寄存器PORTA
通过写1/0使单片机对应引脚输出高低电平,或通过读取数据寄存器获得对应引脚的高低电平值。
例:
PORTA_PB0=1
b.数据方向寄存器DDRA
DDRA寄存器配置引脚为输出口还是输入口,“0”,输入口;
“1”,输出口。
MCU复位后,DDRA值为0x00,引脚默认为输入口。
DDRA=0xFF//配置PORTA口为输出
PORTB:
PORTB为通用数字I/O口,共8个。
其使用与PORTA基本一样。
主要配置寄存器有:
数据寄存器PORTB、数据方向寄存DDRB。
上拉电阻控制寄存器PUCR和驱动控制寄存器RDR与PORTA、PORTB、PORTE、PORTK共用。
a.数据寄存器PORTB
b.数据方向寄存器DDRB
四、原理图:
器件说明:
LCD1602(16管脚),2个排阻,4个10k电阻,一个1K电阻,飞思卡尔芯片(64管脚)
管脚连接:
VSS
GND
DB6
PB6
VCC
DB7
PB7
VEE
A
PA0
K
RW
PA1
K1
PA4
E
PA2
K2
PA5
DB0
PB0
K4
PA6
DB1
PB1
PA7
DB2
PB2
DB3
PB3
DB4
PB4
DB5
PB5
五、流程图开始
锁相环设置
初始化LCD
是否有键按下
否
是
写指令
写数据
显示字符
六、程序设计
1.voidPLL_Init(void):
内部锁相环模块,单片机使用PLL功能能够获得更高的总线频率,这对于需要提高单片机运行速度的应用场合非常必要。
2.voidLCD_init(void):
初始化LCD1602液晶显示屏,
3.voidLCD_write_command(uchardat):
写指令
4.voidLCD_write_data(uchardat):
写数据
5.voidLCD_disp_char(ucharx,uchary,uchardat):
显示字符
6.voidmain(void):
主函数
#include<
hidef.h>
/*commondefinesandmacros*/
#include"
derivative.h"
/*derivative-specificdefinitions*/
MC9S12XS128.h"
unsignedchara=0;
unsignedcharb=0;
unsignedcharc=0;
unsignedchard=0;
voidPLL_Init(void)//PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{//锁相环时钟=2*16*(2+1)/(1+1)=48MHz
REFDV=1;
//总线时钟=48/2=24MHz
SYNR=2;
while(!
(CRGFLG&
0x08));
CLKSEL=0x80;
//选定锁相环时钟
}
#defineLCD_DBPORTB
#defineLCD_RSPORTA_PA0
#defineLCD_RWPORTA_PA1
#defineLCD_EPORTA_PA2
voidLCD_init(void);
//初始化函数
voidLCD_write_command(ucharcommand);
//写指令函数
voidLCD_write_data(uchardat);
//写数据函数
voidLCD_disp_char(ucharx,uchary,uchardat);
//在某个屏幕位置上显示一个字符,X(0-16),y(1-2)
//voidLCD_check_busy(void);
//检查忙函数。
我没用到此函数,因为通过率极低。
voiddelay_n25us(uintn);
//延时函数
//********************************
//*******初始化函数***************
voidLCD_init(void)
{
LCD_write_command(0x38);
//设置8位格式,2行,5x7
LCD_write_command(0x0c);
//整体显示,关光标,不闪烁
LCD_write_command(0x06);
//设定输入方式,增量不移位
LCD_write_command(0x01);
//清除屏幕显示
delay_n25us(10);
//实践证明,我的LCD1602上,用for循环200次就能可靠完成清屏指令。
//LCD_write_command(0x06);
//LCD_write_command(0x0c);
}
//********写指令函数************
voidLCD_write_command(uchardat)
LCD_DB=dat;
delay_n25us
(1);
LCD_RS=0;
//指令
LCD_RW=0;
//写入
LCD_E=1;
//允许
LCD_E=0;
//实践证明,我的LCD1602上,用for循环1次就能完成普通写指令。
//*******************************
//********写数据函数*************
voidLCD_write_data(uchardat)
LCD_RS=1;
//数据
//*******显示一个字符函数*********
voidLCD_disp_char(ucharx,uchary,uchardat)
ucharaddress;
if(y==1)
address=0x80+x;
else
address=0xc0+x;
LCD_write_command(address);
LCD_write_data(dat);
//***********************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LCD1602 电路图 程序