一.实验目的、内容、仪器
实验内容:在1602上显示一排特定文字。
实验目的:1.了解单片机串口接收与发送方法
2.1602的显示原理
3.了解单片机串口中断服务函数用法
实验仪器:AT89C52:52单片机,LM016L:1602液晶,VIRTUAL TERMINAL:虚拟串口监视器,COMPIN:串口设备。
二.硬件原理
三.程序流程图
四.代码实现
#include <reg52.h>
#include <stdio.h>
#include <string.h>
unsigned char code table1[] = {"hello,world."};
unsigned char code table2[] = {"0123456789"};
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
void delay(unsigned int n)
{
unsigned int i=0,j=0;
for (i=n;i>0;i--)
for (j=0;j<110;j++);
}
void writecmd(unsigned char command)
{
RS = 0;
RW = 0;
P3 = command;
EN = 1;
delay(2);
EN = 0;
RS = 0;
RW = 0;
P3 = command << 4;
EN = 1;
delay(2);
EN = 0;
}
void writedata(unsigned char dat)
{
RS = 1;
RW = 0;
P3 = dat;
EN = 1;
delay(2);
EN = 0;
RS = 1;
RW = 0;
P3 = dat << 4;
EN = 1;
delay(2);
EN = 0;
}
void display(unsigned int len,unsigned char *s)
{
unsigned int i;
for(i=0;i<len;i++)
writedata(s[i]);
}
void init_1602(void)
{
delay(50);
writecmd(0x33);//原来1602初始化成4位数据线之前必需先初始化成8位(此时命令发送方式是8位格式,但数据线只需接4位)
writecmd(0x32);//然后再改到4位线宽,这样初始化才稳定
writecmd(0x28);//四线模式设置
writecmd(0x0c);//显示开--对应开关显示控制指令
writecmd(0x01);
delay(30);
}
void main(void)
{
init_1602();
writecmd(0x80);
display(strlen(table1),table1);
writecmd(0xc0);
display(strlen(table2),table2);
while(1);
}
五.实验步骤
(1)了解1602的显示原理
(2)搭建仿真电路,勾选debug,建立keil工程,选择单片机型号
(3)给工程创建源码文件,并以.c结尾,添加文件到源组里
(4)生成hex文件,点击魔术棒,在output中勾选Create HRX_File
(5)对代码进行编译,调试debug,点击USE,在下拉菜单里选中“Proteus VSM Monitor 一 51 ”进行设置
(6)将程序导入到单片机中运行,双击单片机,选择生成的hex文件
(7)在keil中启动调试,开始运行,观察proteus中的电路
六.结果及讨论
液晶,即液态晶体(Liquid Crystal,LC),是相态的一种,因为具有特殊的理化与光电特性,20世纪中叶开始被广泛应用在轻薄型的显示技术上。