📄 万年历.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 + -