基于单片机设计课程设计论文 - 图文 下载本文

#endif

CHAR LCD.C #include #include #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 #include \//#include \#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