任务实施

更新于 2026年10月10日 版权声明
任务实施

一、任务分析

根据电路分析可知:单片机的P0端口作为LCD12864的数据端口,LCD12864控制端口分别连单片机的P2.0—P2.5这6个端口。

LCD12864驱动函数如下:

●判忙函数void busy()

该函数用于读取LCD12864的状态,“忙”就继续读取状态,“闲”就执行后面的命令。

●写命令函数 void Write_cmd()

该函数用于向LCD12864发送命令。

●写数据函数 void Write_data()

该函数用于向LCD1602写入显示数据。

●写x坐标函数void LCD_x()

该函数用于设定要显示字符的x坐标(页地址)。

●写y坐标函数void LCD_y()

该函数用于设定要显示字符的y坐标(列地址)。

●写xy坐标函数void LCD_xy()

该函数用于设定要显示字符的具体位置。

●清除显示屏函数void clrscr()

该函数用于清除LCD12864液晶屏。

●初始化程序void LCD12864_init()

该函数用于初始化LCD12864。

●写汉字函数vodi Write_han()

该函数用于显示一个16*16汉字 。

●写ASCII函数void Write_ascii()

该函数用于显示一个8*16的英文字母或数字等。

二、程序设计

程序执行流程图如图7-2-8所示。

图示

图7-2-8 程序流程图

参考程序:

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

#define out0 P0 //LCD12864数据端口

#define keynn P1

uchar k,keyz;

uchar a,shi,fen,miao,n1,n2,n3,n4,yue,ri,xq;

/*LCD12864控制端口*/

sbit RST=P2^0;

sbit EN=P2^1;

sbit RW=P2^2;

sbit RS=P2^3;

sbit CS2=P2^4;

sbit CS1=P2^5;

sbit BF=P0^7;

/*数字字模"0123456789-"*/

unsigned char code shuzi[][16]={

/*--数字:0--*/

/*--宋体12;此字体下对应的点阵为:宽*高=8*16--*/

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,

/*--数字:1--*/

/*--宋体12;此字体下对应的点阵为:宽*高=8*16--*/

0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,

......

};(https://www.daowen.com)

/*汉字字模“一二三四五六日历年月星期”*/

unsigned char code hanzi[][32]={

/*-- 文字:一--*/

/*-- 宋体12;此字体下对应的点阵为:宽*高=16*16--*/

0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*--文字:二--*/

/*--宋体12;此字体下对应的点阵为:宽*高=16*16--*/

0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,

0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,

图示

图示

图示

图示

/* 日 历 */

Write_han(0,40,0,hanzi[6]);Write_han(0,72,0,hanzi[7]);

/*xxxx年xx月xx日*/

Write_ascii(2,8,0,shuzi[n1/7]);Write_ascii(2,16,0,shuzi[n1%7]);

Write_ascii(2,24,0,shuzi[n2/7]);Write_ascii(2,32,0,shuzi[n2%7]);

Write_han(2,40,0,hanzi[8]);Write_ascii(2,56,0,shuzi[yue/10]);

Write_ascii(2,64,0,shuzi[yue%10]);Write_han(2,72,0,hanzi[9]);

Write_ascii(2,88,0,shuzi[ri/10]);Write_ascii(2,96,0,shuzi[ri%10]);

Write_han(2,104,0,hanzi[6]);

/*xx-xx-xx*/

Write_ascii(4,32,0,shuzi[shi/10]);Write_ascii(4,40,0,shuzi[shi%10]);

Write_ascii(4,48,0,shuzi[10]);Write_ascii(4,56,0,shuzi[fen/10]);

Write_ascii(4,64,0,shuzi[fen%10]);Write_ascii(4,72,0,shuzi[10]);

Write_ascii(4,80,0,shuzi[miao/10]);Write_ascii(4,88,0,shuzi[miao%10]);

/*星期x*/

Write_han(6,40,0,hanzi[10]);Write_han(6,56,0,hanzi[11]);

Write_han(6,72,0,hanzi[xq]);

图示

图示

图示

三、电路仿真

1.绘制电路图

打开Proteus软件,新建“电子日历制作与实现”文件,在工作面放置单片机、液晶12864、排阻等元件,所需元件见表7-2-4。完成后的电路图如图7-2-9所示。

表7-2-4 元件清单

图示

图示

图7-2-9 绘制电路图

2.编写程序

打开Keil软件,新建“电子日历制作”工程文件,新建“LCD12864.c”文件,编写LCD12864液晶显示程序并生成hex文件。部分程序如图7-2-10所示。

图示

图7-2-10 编写程序

3.电路仿真

双击单片机,加载已生成的“LCD12864.hex”文件,单击“仿真”按钮进行程序仿真。仿真结果如图7-2-11所示。

仿真结果显示:12864显示模块显示日历,显示内容包括年、月、日、小时、分钟、秒及星期等信息,同时也会发现单片机、液晶12864、排阻相关端口的高低电平的变化规律。

图示

仿真视频

图示

图7-2-11 仿真结果

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)