📄 timer_thermometer_12864.lst
字号:
C51 COMPILER V7.06 TIMER_THERMOMETER_12864 03/22/2007 10:01:19 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TIMER_THERMOMETER_12864
OBJECT MODULE PLACED IN Timer_thermometer_12864.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Timer_thermometer_12864.c OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //时钟和温度显示程序.制作:№→蓝海啸浪 404530302
2 //用T0中断定时,DS18B20测温,12864完成显示.原创
3 #include<reg52.h>
4 //#include<math.h>
5 #include<Write_12864.h>
6 #include<DB_12864.h>
7 #include<Read_DS18b20.h>
8 #define SETUP 0x0FE
9 #define LEFT 0x0FB
10 #define UP 0x0F7
11 #define DOWN 0x0EF
12 #define RIGHT 0x0DF
13 #define ENTER 0x07F
14 #define CANCEL 0x0BF
15 #define CLEAR 0x0FD
16 #define TCONST 49970
17 unsigned char *p; //显示程序查表指针
18 unsigned char *pdt; //时间日期显示区指针
19 unsigned char secf=0; //秒闪标志
20 unsigned char DTBUF[7]={07,1,15,1,12,30,30};//年/月/日/星期/时/分/秒;
21 unsigned char DTTMP[7];
22 unsigned char MSFLAG=20; //20MS倒计时标志
23 unsigned char dp; //显示允许,控制中断显示调用 dispermit
24 unsigned char TMPBUF_MSB,TMPBUF_LSB;
25 unsigned char TCOUNT=0;
26
27 //显示程序,
28 //sn控制显示数组的第几个元素serial number//年/月/日/星期/时/分/秒;
29 //,fl用来控制闪烁,当为0时显示" ",k为显示的开关参数,为0则显示程序段有效,开显示
30 void DateTime_Display(unsigned char *arrayp,unsigned char sn,unsigned char fl,unsigned char k)
31 { unsigned char h,l,buf,xp,bs,cs,yp;
32 1 unsigned char *arraypointer,*pp;
33 1 //unsigned char yp;位置指针,即时间数据在Y轴的坐标
34 1 //unsigned char cs;时间数据在LCD上的左右边标志,0在左
35 1 //unsigned char bs;定义扫描的位数,当为0-9时,则扫描位数为8,倍率为16
36 1 //为一,二,时则扫描位数为16,倍率为32
37 1 arraypointer=arrayp;
38 1 if(k==0)
39 1 {
40 2 if(sn<3)
41 2 xp=0; //小于3则为日期,显示在第一行
42 2 else xp=2; //大于等于三则显示第二行,分别为时间和星期,
43 2 buf=*(arraypointer+sn);
44 2 switch(sn)
45 2 { case 0: yp=16; cs=0; break; // 年,显示在第一行左边,坐标从16开始
46 3 case 1: yp=48; cs=0; break; // 月,显示在第一行左边,坐标从48开始
47 3 case 2: yp=16; cs=1; break; // 日,显示在第一行右边,坐标从16开始
48 3 case 3: yp=32; cs=0; break; // 星期,显示在第三行左边,坐标从48开始
49 3 case 4: yp=0; cs=1; break; // 时,显示在第三行左边,坐标从0开始
50 3 case 5: yp=24; cs=1; break; // 分,显示在第三行左边,坐标从24开始
51 3 case 6: yp=48; cs=1; break; // 秒,显示在第三行左边,坐标从48开始
52 3 default: break;
53 3 }
54 2 //****************
55 2 if(fl==1) //闪烁标志,当FL为0时显示" ",为1时正常显示
C51 COMPILER V7.06 TIMER_THERMOMETER_12864 03/22/2007 10:01:19 PAGE 2
56 2 {if(sn==3)
57 3 { pp=tabb; //星期,调用B数组显示
58 4 bs=16;
59 4 h=buf; //当显示星期时,16*16的编码只要送高位;
60 4 }
61 3 else
62 3 { pp=taba; //日期与时间为数字,调用A数组,
63 4 bs=8;
64 4 h=buf/10;
65 4 l=buf%10;
66 4 }
67 3 }
68 2 else if(fl==0) //为0则显示" "
69 2 { pp=tabe;
70 3 h=0;
71 3 l=0;
72 3 if(sn==3) bs=16;
73 3 else bs=8;
74 3 }
75 2 //****************
76 2 p=pp;
77 2 if(cs==0)
78 2 { p=p+h*bs*2; Left_Bytes_DaSend(xp, yp, p,bs);
79 3 p=p+bs; Left_Bytes_DaSend(xp+1, yp, p,bs);
80 3 if(bs==8) //为8位的数字,则需要显示低位;
81 3 {p=pp; p=p+l*bs*2;
82 4 yp=yp+bs; Left_Bytes_DaSend(xp, yp, p,bs);
83 4 p=p+bs; Left_Bytes_DaSend(xp+1, yp, p,bs);
84 4 }
85 3 }
86 2 else if(cs==1)
87 2 {
88 3 p=p+h*bs*2; Right_Bytes_DaSend(xp, yp, p,bs);
89 3 p=p+bs; Right_Bytes_DaSend(xp+1, yp, p,bs);
90 3 if(bs==8) //为8位的数字,则需要显示低位;
91 3 {p=pp; p=p+l*bs*2;
92 4 yp=yp+bs; Right_Bytes_DaSend(xp, yp, p,bs);
93 4 p=p+bs; Right_Bytes_DaSend(xp+1, yp, p,bs);
94 4 }
95 3 }
96 2 }
97 1 //else{;}
98 1 }
99 //秒闪显示
100 void Second_Flash(unsigned char f)
101 {
102 1 if(f==1)
103 1 {p=tabc;
104 2 p=p+64;}
105 1 else p=tabe;
106 1 Right_Bytes_DaSend( 2, 40, p,8);
107 1 p=p+8;
108 1 Right_Bytes_DaSend( 3, 40, p,8);
109 1 }
110
111
112 //清屏子程序
113 void Clean_Lcd(void)
114 {
115 1 unsigned char i;
116 1 p=tabe;
117 1 for(i=0;i<8;i++)
C51 COMPILER V7.06 TIMER_THERMOMETER_12864 03/22/2007 10:01:19 PAGE 3
118 1 {
119 2 Left_Bytes_DaSend( i, 0, p,32);
120 2 Left_Bytes_DaSend( i, 32, p,32);
121 2 Right_Bytes_DaSend( i, 0, p,32);
122 2 Right_Bytes_DaSend( i, 32, p,32);
123 2 }
124 1 }
125 //显示"水位 .米"在第四行
126 void Display_LCD_1(void)
127 {
128 1 p=tabd; Left_Bytes_DaSend( 6, 16, p,16);
129 1 p=p+16; Left_Bytes_DaSend( 7, 16, p,16);
130 1 p=p+16; Left_Bytes_DaSend( 6, 32, p,16);
131 1 p=p+16; Left_Bytes_DaSend( 7, 32, p,16);
132 1 p=p+16; Right_Bytes_DaSend( 6, 16, p,8);
133 1 Right_Bytes_DaSend( 4, 32, p,8);
134 1 p=p+8; Right_Bytes_DaSend( 7, 16, p,8); Right_Bytes_DaSend( 5, 24, p,8);
135 1 Right_Bytes_DaSend( 5, 32, p,8);
136 1 p=p+8; Right_Bytes_DaSend( 6, 40, p,16);
137 1 p=p+16; Right_Bytes_DaSend( 7, 40, p,16);
138 1 }
139
140 //显示"年月日"在第二行
141 void Display_LCD_2(void)
142 {
143 1 p=tabc; Left_Bytes_DaSend( 0, 32, p,16);
144 1 p=p+16; Left_Bytes_DaSend( 1, 32, p,16);
145 1 p=p+16; Right_Bytes_DaSend( 0, 0, p,16);
146 1 p=p+16; Right_Bytes_DaSend( 1, 0, p,16);
147 1 p=tabb;
148 1 p=p+192; Right_Bytes_DaSend( 0, 32, p,16);
149 1 p=p+16; Right_Bytes_DaSend( 1, 32, p,16);
150 1 }
151 //显示"20"在第一行,年
152 void Display_LCD_3(void)
153 {
154 1 p=taba; Left_Bytes_DaSend( 0, 8, p,8);
155 1 p=p+8; Left_Bytes_DaSend( 1, 8, p,8);
156 1 p=p+24; Left_Bytes_DaSend( 0, 0, p,8);
157 1 p=p+8; Left_Bytes_DaSend( 1, 0, p,8);
158 1 }
159
160 //显示":"在第二三行
161 void Display_LCD_4(void)
162 {
163 1 p=tabc; p=p+64;
164 1 Right_Bytes_DaSend( 2, 16, p,8);
165 1 Left_Bytes_DaSend( 4, 48, p,8);
166 1 Left_Bytes_DaSend( 6, 48, p,8);
167 1 p=p+8;
168 1 Right_Bytes_DaSend( 3, 16, p,8);
169 1 Left_Bytes_DaSend( 5, 48, p,8);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -