一、源程序
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 #define uint unsigned int //定义常用数据类型替代码 #define uchar unsigned char #define dat P0 //定义LCD1602的数据口为P0 sbit rs=P1^4; //定义RS口为P14 sbit rw=P1^5; //定义RW口为P15 sbit e=P1^6; //定义E口为P16 uchar busy; //1602判忙标志 uchar table0[16]={"0123456789"}; uchar table1[16]={"Begin:"}; uint i=0; uint j=0; uint temp; void delay1s(void) { unsigned char h,i,j,k; for(h=5;h>0;h--) for(i=4;i>0;i--) for(j=116;j>0;j--) for(k=214;k>0;k--); } void delay1ms(void) //延时程序 { uchar i,j; for(i=0;i<10;i++) for(j=0;j<20;j++); } void busy_1602(void) //查询忙碌标志信号程序 { do { e=0; rw=1; rs=0; e=1; busy=dat; e=0; delay1ms(); } while(busy&&0x10==1); } void com_1602(uchar a) //写指令到LCM程序 { busy_1602(); e=0; rw=0; rs=0; e=1; dat=a; e=0; } void dat_1602(uchar a) //写数据到LCM程序 { busy_1602(); e=0; rw=0; rs=1; e=1; dat=a; e=0; } void int_1602(void) //启动LCM程序 { com_1602(0x38); com_1602(0x0c); com_1602(0x06); } void display() { int k; uchar rev_data[16]={"-99 Countdown!- "}; com_1602(0x80);//第一行 for(i=0;i<16;i++) { dat_1602(rev_data[i]); } com_1602(0xc0); //发送数据第二行 for(i=0;i<6;i++) { dat_1602(table1[i]); } com_1602(0xc6); k=99; while(k>=0) { dat_1602(table0[k/10]); dat_1602(table0[k%10]); delay1s(); k--; com_1602(0xc6); } } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { while(1) { int_1602(); display(); } }
二、结果