#endif
CHAR LCD.C #include
// 函数功能: LCD初始化 // 入口参数: 无 // 返回参数: 无 // 全局变量: 无
// 调用模块: lcd_wcmd(); delay(); void lcd_init() {
lcd_wcmd(0x38); delay(1);
lcd_wcmd(0x0c); delay(1);
lcd_wcmd(0x06); delay(1);
lcd_wcmd(0x01); }
//----------------------------------------------------------------- // 功能程序 // bit lcd_bz() //
// 函数功能: 检测LCD BF的状态 // 入口参数: 无 // 返回参数: 无 // 全局变量: 无
// 调用模块: 无
// 注意事项: 每次读写LCM操作之前,应首先检测忙标志BF,确认BF=0后,访问过程才能进行
//----------------------------------------------------------------- bit lcd_bz() {
bit busy; rs=0; rw=1; ep=1; _nop_(); _nop_(); _nop_(); _nop_();
busy=(bit)(P1&0x80); ep=0; return busy; }
25
//----------------------------------------------------------------- // void lcd_wcmd(unsigned char cmd)
//----------------------------------------------------------------- //
// 函数功能: 写LCM的指令代码 // 入口参数: LCM指令 // 返回参数: 无 // 全局变量:
// 调用模块: lcd_bz(); // 注意事项:
//----------------------------------------------------------------- void lcd_wcmd(unsigned char cmd) {
while(lcd_bz());//判断LCD是否忙碌 rs=0; rw=0; ep=0; _nop_(); _nop_(); P1=cmd; _nop_(); _nop_(); _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0; }
//----------------------------------------------------------------- // void lcd_pos(unsigned char pos)
//----------------------------------------------------------------- //
// 函数功能: 写LCD的指令地址 // 入口参数:LCD指令地址 // 返回参数: 无 // 全局变量:
// 调用模块: lcd_wcmd(); // 注意事项:
//----------------------------------------------------------------- void lcd_pos(unsigned char pos) {
lcd_wcmd(pos|0x80); }
//----------------------------------------------------------------- // void WrCLcdD (uchar lcddata)
26
//----------------------------------------------------------------- //
// 函数功能: 写LCM要显示的数据 // 入口参数: 待写的数据 // 返回参数: 无 // 全局变量:
// 调用模块: lcd_bz(); // 注意事项:
//----------------------------------------------------------------- void lcd_wdat(unsigned char dat) {
while(lcd_bz());//判断LCD是否忙碌 rs=1; rw=0; ep=0; P1=dat; _nop_(); _nop_(); ep=1; _nop_(); _nop_(); ep=0;
_nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); }
//----------------------------------------------------------------- // 延时程序
//----------------------------------------------------------------- void delay(uchar ms) {
uchar i; while(ms--) {
for(i=0; i<250; i++) { _nop_(); _nop_(); _nop_(); _nop_(); } } }
CHAR LCD.H #ifndef __char_lcd_h__ #define __char_lcd_h__
//-----------------------------------------------------------------
27
// 数据类型宏定义
//----------------------------------------------------------------- #define uchar unsigned char #define uint unsigned int
//----------------------------------------------------------------- // I/O口定义:控制/数据线接口
//----------------------------------------------------------------- sbit rs=P2^2; //寄存器选择端口 sbit rw=P2^1; //读写选择端口 sbit ep=P2^0; //使能信号端口
//----------------------------------------------------------------- // 外部变量声明
//----------------------------------------------------------------- //----------------------------------------------------------------- // 外部函数声明
//----------------------------------------------------------------- extern void lcd_init(void); // LCD初始化
extern bit lcd_bz(void); // 检测LCD BF的状态 extern void lcd_wcmd(uchar cmd); // 写LCD的指令代码 extern void lcd_wdat(uchar dat); // 写LCD显示的数据
extern void lcd_pos(uchar pos); // 写LCD的指令代码地址//extern void CG_Write (void);
extern void delay(uchar ms); // 延时 #endif
4.1 时钟部分软件设计
Display.c
#include
uchar code dis4[] = {\
uchar code initdisp[] = {\//uchar code DT_place[] = {7,10,13,21,24,27};
uchar code DT_lcdplace[] = {0x07,0x0a,0x0d,0x45,0x48,0x4b}; uchar code DTdata_addr[] = {9,8,7,4,2,0}; uchar DTdata_tab[] = {0,0,0,0,0,0};
uchar code chars[8][6] = {{\ \ \{\ day \{%uchar data_h,data_l; void data_wr() {
uchar i;
for(i=5; i>=0; i--) {
*(ds_addr+(DTdata_addr[i]))=DTdata_tab[i];
28