?? 萬年歷.lst
字號:
C51 COMPILER V9.00 萬年繽 06/09/2013 23:40:22 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE 萬年繽
OBJECT MODULE PLACED IN 萬年歷.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE 萬年歷.c BROWSE DEBUG OBJECTEXTEND
line level source
*** WARNING C500 IN LINE 1 OF 萬年歷.C: LICENSE ERROR (R208: RENEW LICENSE ID CODE (LIC))
1 /********************************************/
2 /*****************萬年歷*********************/
3 //功能描述:采用時鐘芯片DS12CR887計時,DS18B20
4 // 測量溫度,LCD1602顯示時間。可從2000
5 // 年至2099年隨意調節,顯示包括年、月、
6 // 日、時、分、秒、星期和溫度。
7 //鍵盤說明:key_1鍵為設置鍵
8 // key_2鍵為時間加一鍵
9 // key_3鍵為時間減一鍵
10 // key_4鍵位定時設置鍵
11 //調時方法:按下key_1鍵為設置時間
12 // 按鍵次數 功能
13 // 1 設置秒
14 // 2 設置分
15 // 3 設置時
16 // 4 設置日
17 // 5 設置月
18 // 6 設置年
19 // 7 設置星期
20 // 8 調節結束
21 // 按鍵次數 功能
22 // 1 設置秒
23 // 2 設置分
24 // 3 設置時
25 // 4 設置結束
26 /********************************************/
27 #include <REGX51.H>
28 #include "1602.h"
29 #include"ds12cr887.h"
30 /**************鍵盤引腳定義******************/
31 sbit key_1 = P3^0; //設置格式
32 sbit key_2 = P3^1; //+
33 sbit key_3 = P3^2; //-
34 sbit buzzer= P1^4; //蜂鳴器
35 sbit DQ = P1^3; //定義DS18B20
36 /******************全局變量********************/
37 uchar t0=0,second=0, min=0, hour=0,day=0,month=0,year=0,weekday=0,flag=0,temp=0,flag1=0;
38 /******************初始化時間******************/
39 uchar code table1[]=" 2013-06-01 SAT ";
40 uchar code table2[]="00:00:00 0000";
41 uchar code table3[]="Jin Yaxue";
42 uchar code table4[]="I Love You !";
43 /*******************字符表*********************/
44 uchar code word[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x20,0x2d};
45 uchar code week[][3]={"SUN","MON","TUE","WED","THU","FRI","SAT"};
46 /************數據緩沖與鍵盤計數變量************/
47 uchar databuffer[14],TempBuffer[4],count,t_value;
48 uint num=0;
49 /******************函數聲明********************/
50 void init();
51 void lcd_write_com(uchar command); //1602液晶寫命令
52 void lcd_write_data(uchar date); //1602液晶寫數據
53 void delay(uint a);
54 void newbuf(); //數據轉換
C51 COMPILER V9.00 萬年繽 06/09/2013 23:40:22 PAGE 2
55 void keyboard(); //鍵盤子程序
56 void disp(); //顯示程序
57 void write_ds(uchar add,uchar date);
58 uchar read_ds(uchar add);
59 void Init_DS18B20( );
60 void delay_18B20(unsigned int i);
61 uchar ReadOneChar(void );
62 void WriteOneChar(uchar dat);
63 void ReadTemp(void);
64 void temp_to_str();
65 /***********************主函數**********************/
66 void main()
67 {
68 1 init(); //初始化
69 1 Init_DS18B20( ); //DS18B20初始化
70 1 lcd_write_com(0x80+3);
71 1 for(num=0;num<9;num++) //將table字符串寫入
72 1 {
73 2 lcd_write_data(table3[num]);
74 2 delay(200);
75 2 }
76 1
77 1 lcd_write_com(0x80+0x40+2);
78 1 for(num=0;num<12;num++) //將table字符串寫入
79 1 {
80 2 lcd_write_data(table4[num]);
81 2 delay(200);
82 2 }
83 1 delay(2000);
84 1 lcd_write_com(0x01); //清屏
85 1
86 1 lcd_write_com(0x80+0x00); //設置指針地址為首行
87 1 for(num=0;num<15;num++) //將table字符串寫入
88 1 {
89 2 lcd_write_data(table1[num]);
90 2 delay(20);
91 2 }
92 1 lcd_write_com(0x80+0x40); //設置指針地址為第二行
93 1 for(num=0;num<13;num++) //將table1字符串寫入
94 1 {
95 2 lcd_write_data(table2[num]);
96 2 delay(20);
97 2 }
98 1 while(1)
99 1 {
100 2 uchar b;
101 2 keyboard(); //調整時間
102 2 ReadTemp(); //開啟溫度采集程序
103 2 temp_to_str(); //溫度數據轉換成液晶字符
104 2 lcd_write_com(0x80+0x40+9);
105 2 delay(20);
106 2 for(b=0;b<4;b++)
107 2 {
108 3 lcd_write_data(TempBuffer[b]);
109 3 delay(20);
110 3 }
111 2
112 2 if(flag==0)
113 2 {
114 3 second=read_ds(0x00);
115 3 min=read_ds(0x02);
116 3 hour=read_ds(0x04);
C51 COMPILER V9.00 萬年繽 06/09/2013 23:40:22 PAGE 3
117 3 weekday=read_ds(0x06);
118 3 day=read_ds(0x07);
119 3 month=read_ds(0x08);
120 3 year=read_ds(0x09);
121 3 }
122 2
123 2 newbuf();
124 2 {
125 3 databuffer[2]=10;
126 3 databuffer[5]=10;
127 3 }
128 2
129 2 disp();
130 2 }
131 1 }
132 /*************************初始化*************************/
133 void init()
134 {
135 1 lcd_write_com(0x38); //設置顯示模式
136 1 lcd_write_com(0x0c); //光標閃爍
137 1 lcd_write_com(0x06);
138 1 lcd_write_com(0x01); //清屏
139 1 write_ds(0x0a,0x20);
140 1 write_ds(0x0b,0x26);
141 1 read_ds(0x0c);
142 1 buzzer=1;
143 1 EA=1;
144 1 EX1=1;;
145 1 IT0=1;
146 1 }
147 /***********************LCD1602寫命令************************/
148 void lcd_write_com(uchar command)
149 { //液晶1602寫命令
150 1 lcdrs=0;
151 1 lcdrw=0;
152 1 P0=command;
153 1 delay(5);
154 1 lcden=1;
155 1 delay(5);
156 1 lcden=0;
157 1 }
158 /*************************LCD1602寫數據************************/
159 void lcd_write_data(uchar date)
160 {
161 1 lcdrs=1; //液晶1602寫數據
162 1 lcdrw=0;
163 1 P0=date;
164 1 delay(5);
165 1 lcden=1;
166 1 delay(5);
167 1 lcden=0;
168 1 }
169 /***************************延時函數****************************/
170 void delay(uint a)
171 {
172 1 uint x,y;
173 1 for(x=a;x>0;x--)
174 1 for(y=110;y>0;y--);
175 1 }
176 /******************************緩沖數據處理*************************/
177 void newbuf() //更新緩沖區子程序
178 {
C51 COMPILER V9.00 萬年繽 06/09/2013 23:40:22 PAGE 4
179 1 databuffer[0]=second%10;
180 1 databuffer[1]=second/10;
181 1 databuffer[3]=min%10;
182 1 databuffer[4]=min/10;
183 1 databuffer[6]=hour%10;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -