clock_show_time_data.lst
来自「这是一段开始学单片机时写的LCD程序」· LST 代码 · 共 381 行 · 第 1/2 页
LST
381 行
C51 COMPILER V7.50 CLOCK_SHOW_TIME_DATA 07/25/2007 10:48:55 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE CLOCK_SHOW_TIME_DATA
OBJECT MODULE PLACED IN clock_show_time_data.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE clock_show_time_data.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //*******************************************************
2 //该程序实现用液晶显示器LCD显示年,月,日和时间
3 //程序启发:用查表法把数据送到LCD显示
4 //不足之处:没有考虑闰年,闰月等;年,月,日和时间不可调
5 //作者:李锡坚
6 //完成时间:2007.07.25.10:30
7 //*******************************************************
8 /********************************************************
9 控制说明:
10 sbit LCD_RS=P3^4; //定义LCD的RS控制位
11 sbit LCD_RW=P3^5; //定义LCD的RW控制位
12 sbit LCD_DISPLAY_START=P1^0; //LCD开始显示的指示灯
13 sbit LCD_E=P1^1; //定义LCD的E控制位
14 写操作时用:LCD_E=1;
15 _nop_();
16 LCD_E=0;
17 代替
18 *********************************************************/
19 //****************************************
20 #include<reg51.h> //包含常用头文件
21 #include<stdio.h>
22 #include<intrins.h>
23 #include<absacc.h>
24 #define uchar unsigned char //定义常用数据类型
25 int cnt;
26 void LCD_INIT(void); //LCD的初始化函数
27 void LCD_DISPLAY_COLON(uchar *DATA);//在指定的位置显示字符串
28 void LCD_DISPLAY_DATE(uchar *DATA); //在指定的位置显示字符串
29 void LCD_DISPLAY_STR(void); //在指定的位置显示字符串
30 void LCD_CLR(uchar y); //清除LCD指定的行
31 void LCD_SEND_COMMAND(uchar COMMAND); //向LCD发送命令
32 void LCD_SEND_DATA(uchar DATA); //向LCD发送数据
33 void LCD_WAIT(void); //检查LCD空闲
34 uchar LCD_GET_FLAG(void); //检查LCD状态
35 void DELAY(void); //延时
36 /*定义所要显示的数据*/
37 char code DISPLAY[]="0123456789";//预先存放数字
38 char code DISPLAY_COLON[]="time: : :"; //显示冒号
39 char code DISPLAY_DATE[]="date: . ."; //显示日期
40 /*定义LCD控制字*/
41 #define LCD_MODE 0x3C /* 接口数据8位,显示2行,字体为1号 */
42 #define LCD_NO_FLASH 0x0C /* 屏幕显示开,无光标 */
43 #define LCD_HIDE 0x08 /* 屏幕显示关 */
44 #define LCD_FLASH 0x0D /* 屏幕显示开,并打开闪烁光标 */
45 #define LCD_SHIFT 0x07 /* 模块数据输入为增量方式,显示内容移动 */
46 #define LCD_NO_SHIFT 0x06 /* 模块数据输入为增量方式,显示光标移动 */
47 #define LCD_SH 0x14 /* 移动光标及整体显示 */
48 #define LCD_LINE1 0x80 /*第一行DDRAM起始地址*/
49 #define LCD_LINE2 0xc0 /*第二行DDRAM起始地址*/
50 #define SEND_IN P0 /*XBYTE[0xff00] /*定义LCD的实际地址*/
51 sbit LCD_RS=P3^4; //定义LCD的RS控制位
52 sbit LCD_RW=P3^5; //定义LCD的RW控制位
53 sbit LCD_DISPLAY_START=P1^0; //LCD开始显示的指示灯
54 sbit LCD_E=P1^1; //定义LCD的E控制位
55 int t=0; //中断计数
C51 COMPILER V7.50 CLOCK_SHOW_TIME_DATA 07/25/2007 10:48:55 PAGE 2
56 int hour_2=1,hour_1=0,minute_2=3,minute_1=0,second_2=0,second_1=0;
57 int year_4=2,year_3=0,year_2=0,year_1=7,month_2=0,month_1=7,date_2=2,date_1=5;
58 //*************************************************
59 //LCD显示字符串的主程序
60 //利用中断间隔循环显示
61 //
62 //*************************************************
63 main()
64 {
65 1 LCD_INIT(); //初始化LCD
66 1 LCD_CLR(1);
67 1 LCD_CLR(2);
68 1 LCD_DISPLAY_COLON(DISPLAY_COLON); //显示冒号
69 1 LCD_DISPLAY_DATE(DISPLAY_DATE); //显示日期
70 1 TMOD=0x02;
71 1 TH0=0x06;
72 1 TL0=0x06;
73 1 TR0=1;
74 1 ET0=1;
75 1 EA=1;
76 1 do
77 1 {
78 2 LCD_DISPLAY_STR();
79 2
80 2 }while(1);
81 1 }
82 //*************************************************
83 //函数功能:LCD初始化
84 //输入变量:无
85 //输出变量:无
86 //调用模块:LCD_SEND_COMMAND(),LCD_CLR()
87 //*************************************************
88 void LCD_INIT(void)
89 {
90 1 LCD_SEND_COMMAND(LCD_MODE); //设置工作方式
91 1 LCD_SEND_COMMAND(LCD_NO_FLASH); //设置显示方式
92 1 LCD_SEND_COMMAND(LCD_NO_SHIFT); //设置光标画面滚动方式
93 1 LCD_SEND_COMMAND(LCD_SH); //设置输入方式
94 1 LCD_CLR(1); //清除LCD第一行
95 1 LCD_CLR(2); //清除LCD第二行
96 1 }
97 //*************************************************
98 //函数功能:清除LCD指定行
99 //输入变量:y
100 //输出变量:无
101 //调用模块:LCD_SEND_COMMAND(),LCD_SEND_DATA()
102 //*************************************************
103 void LCD_CLR(uchar y)
104 {
105 1 uchar i;
106 1 i=0;
107 1 if(y==1)
108 1 {
109 2 LCD_SEND_COMMAND(LCD_LINE1); //发送命令使LCD指向第一行
110 2 i=16;
111 2 }
112 1 if(y==2)
113 1 {
114 2 LCD_SEND_COMMAND(LCD_LINE2); //发送命令使LCD指向第二行
115 2 i=16;
116 2 }
117 1 if(i!=0)
C51 COMPILER V7.50 CLOCK_SHOW_TIME_DATA 07/25/2007 10:48:55 PAGE 3
118 1 {
119 2 do
120 2 {
121 3 LCD_SEND_DATA(' '); //让LCD的相应位置显示空格
122 3 }while(--i!=0);
123 2 }
124 1 }
125 //*************************************************
126 //函数功能:向LCD发送命令
127 //输入变量:COMMAND
128 //输出变量:无
129 //调用模块:LCD_WAIT()
130 //*************************************************
131 void LCD_SEND_COMMAND(uchar COMMAND)
132 {
133 1 LCD_WAIT(); //等待空闲
134 1 LCD_RS=0; //命令方式
135 1 LCD_RW=0; //写方式
136 1 LCD_E=1;
137 1 SEND_IN=COMMAND;//写实际的命令到LCD
138 1 LCD_E=0;
139 1 }
140 //*************************************************
141 //函数功能:向LCD发送数据
142 //输入变量:DATA
143 //输出变量:无
144 //调用模块:LCD_WAIT()
145 //*************************************************
146 void LCD_SEND_DATA(uchar DATA)
147 {
148 1 LCD_WAIT(); //等待空闲
149 1 LCD_RS=1; //数据方式
150 1 LCD_RW=0; //写方式
151 1 LCD_E=1;
152 1 SEND_IN=DATA;//写实际的数据到LCD
153 1 LCD_E=0;
154 1 }
155 //*************************************************
156 //函数功能:等待LCD空闲
157 //输入变量:无
158 //输出变量:无
159 //调用模块:LCD_GET_FLAG()
160 //*************************************************
161 void LCD_WAIT(void)
162 {
163 1 uchar i;
164 1 i=1000; //定义等待时间,可以防止由于LCD损坏而使程序死循环
165 1 do
166 1 {
167 2 if((LCD_GET_FLAG()&0x80)==0) //判断BF是否为0
168 2 {
169 3 break;
170 3 }
171 2 }while(--i!=0);
172 1
173 1 }
174 //*************************************************
175 //函数功能:检查LCD状态
176 //输入变量:无
177 //输出变量:LCD显示的当前状态
178 //调用模块:无
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?