?? clock_show_time_data.lst
字號:
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 //該程序?qū)崿F(xiàn)用液晶顯示器LCD顯示年,月,日和時間
3 //程序啟發(fā):用查表法把數(shù)據(jù)送到LCD顯示
4 //不足之處:沒有考慮閏年,閏月等;年,月,日和時間不可調(diào)
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 //定義常用數(shù)據(jù)類型
25 int cnt;
26 void LCD_INIT(void); //LCD的初始化函數(shù)
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發(fā)送命令
32 void LCD_SEND_DATA(uchar DATA); //向LCD發(fā)送數(shù)據(jù)
33 void LCD_WAIT(void); //檢查LCD空閑
34 uchar LCD_GET_FLAG(void); //檢查LCD狀態(tài)
35 void DELAY(void); //延時
36 /*定義所要顯示的數(shù)據(jù)*/
37 char code DISPLAY[]="0123456789";//預(yù)先存放數(shù)字
38 char code DISPLAY_COLON[]="time: : :"; //顯示冒號
39 char code DISPLAY_DATE[]="date: . ."; //顯示日期
40 /*定義LCD控制字*/
41 #define LCD_MODE 0x3C /* 接口數(shù)據(jù)8位,顯示2行,字體為1號 */
42 #define LCD_NO_FLASH 0x0C /* 屏幕顯示開,無光標 */
43 #define LCD_HIDE 0x08 /* 屏幕顯示關(guān) */
44 #define LCD_FLASH 0x0D /* 屏幕顯示開,并打開閃爍光標 */
45 #define LCD_SHIFT 0x07 /* 模塊數(shù)據(jù)輸入為增量方式,顯示內(nèi)容移動 */
46 #define LCD_NO_SHIFT 0x06 /* 模塊數(shù)據(jù)輸入為增量方式,顯示光標移動 */
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; //中斷計數(shù)
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 //利用中斷間隔循環(huán)顯示
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 //函數(shù)功能:LCD初始化
84 //輸入變量:無
85 //輸出變量:無
86 //調(diào)用模塊:LCD_SEND_COMMAND(),LCD_CLR()
87 //*************************************************
88 void LCD_INIT(void)
89 {
90 1 LCD_SEND_COMMAND(LCD_MODE); //設(shè)置工作方式
91 1 LCD_SEND_COMMAND(LCD_NO_FLASH); //設(shè)置顯示方式
92 1 LCD_SEND_COMMAND(LCD_NO_SHIFT); //設(shè)置光標畫面滾動方式
93 1 LCD_SEND_COMMAND(LCD_SH); //設(shè)置輸入方式
94 1 LCD_CLR(1); //清除LCD第一行
95 1 LCD_CLR(2); //清除LCD第二行
96 1 }
97 //*************************************************
98 //函數(shù)功能:清除LCD指定行
99 //輸入變量:y
100 //輸出變量:無
101 //調(diào)用模塊: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); //發(fā)送命令使LCD指向第一行
110 2 i=16;
111 2 }
112 1 if(y==2)
113 1 {
114 2 LCD_SEND_COMMAND(LCD_LINE2); //發(fā)送命令使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的相應(yīng)位置顯示空格
122 3 }while(--i!=0);
123 2 }
124 1 }
125 //*************************************************
126 //函數(shù)功能:向LCD發(fā)送命令
127 //輸入變量:COMMAND
128 //輸出變量:無
129 //調(diào)用模塊: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 //函數(shù)功能:向LCD發(fā)送數(shù)據(jù)
142 //輸入變量:DATA
143 //輸出變量:無
144 //調(diào)用模塊:LCD_WAIT()
145 //*************************************************
146 void LCD_SEND_DATA(uchar DATA)
147 {
148 1 LCD_WAIT(); //等待空閑
149 1 LCD_RS=1; //數(shù)據(jù)方式
150 1 LCD_RW=0; //寫方式
151 1 LCD_E=1;
152 1 SEND_IN=DATA;//寫實際的數(shù)據(jù)到LCD
153 1 LCD_E=0;
154 1 }
155 //*************************************************
156 //函數(shù)功能:等待LCD空閑
157 //輸入變量:無
158 //輸出變量:無
159 //調(diào)用模塊:LCD_GET_FLAG()
160 //*************************************************
161 void LCD_WAIT(void)
162 {
163 1 uchar i;
164 1 i=1000; //定義等待時間,可以防止由于LCD損壞而使程序死循環(huán)
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 //函數(shù)功能:檢查LCD狀態(tài)
176 //輸入變量:無
177 //輸出變量:LCD顯示的當前狀態(tài)
178 //調(diào)用模塊:無
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -