📄 控制系统.lst
字号:
C51 COMPILER V8.02 縚制系统 08/08/2008 18:31:54 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 縚制系统
OBJECT MODULE PLACED IN 控制系统.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 控制系统.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE DEBUG OBJECTEXTEND
line level source
1 /**************************************************************************************
2 程序名称:
3 时间 温度控制系统(128*64LCD+ds1302+ds18b20)
4 主要功能:
5 温度计 时钟 闹铃 密码锁 篮球器 计算器 温度控制 键盘锁 系统设置等。
6 主要说明:
7 程序全部定义在一个C文件中。
8 作者:
9 LiJH
10 时间:
11 2008.6.20
12 版本:
13 LiJH-V1.0
14 **************************************************************************************/
15
16
17 #include <at89s53.h>
18 #include <intrins.h>
19 #define uchar unsigned char
20 #define uint unsigned int
21 #define time_count 0x3cb0
22 #define close 1
23 #define open 0
24
25 /*============ 状态控制及温感器总线定义 ==============*/
26
27 #define b20_io P0_0 // DS18B20总线
28 #define pw_oc P3_7 // 密码锁开启控制(黄灯)
29 #define buzzer P0_5 // 蜂鸣器
30 #define lcd_bl P0_6 // 背光控制口
31 #define als_th P0_4 // 上限温度警报(红灯)
32 #define als_tl P3_6 // 下限温度警报(绿灯)
33 #define keyboard P1 // 键盘数据口
34
35
36 /*================= ST7920LCD 定义 ===================*/
37
38 #define comm 0 // lcd指令
39 #define dat 1 // lcd数据
40 #define lcd_rst P0_7 // lcd复位
41 #define lcd_e P3_0 // lcd使能
42 #define lcd_rw P3_1 // lcd读写
43 #define lcd_rs P3_2 // lcd数据命令
44 #define busy P2_7 // 忙碌位
45 #define lcd_data P2 // lcd(8bit)数据传输
46
47
48 /*=============== DS1302 寄存器地址定义 ===============*/
49
50 #define d02_rst P0_1 // DS1302使能
51 #define d02_data P0_2 // DS1302数据线
52 #define d02_sclk P0_3 // DS1302脉冲
53 #define d02_wrc 0x8e // 1302读写RAM控制(1允许 0禁止)
54 #define d02_year 0x8c // 年
55 #define d02_weeks 0x8a // 星期
C51 COMPILER V8.02 縚制系统 08/08/2008 18:31:54 PAGE 2
56 #define d02_month 0x88 // 月
57 #define d02_day 0x86 // 日
58 #define d02_hour 0x84 // 时
59 #define d02_minute 0x82 // 分
60 #define d02_second 0x80 // 秒
61 #define d02_signs 0xc0 // 系统状态(记录设置标记)
62 #define d02_passw 0xc2 // 密码寄存器首位(有3位下位地址加2,初始值为:741456)
63 #define d02_alm 0xc8 // 闹铃时间小时位(下位为分钟位加2)
64 #define d02_temp 0xcc // 温度上限警报(有两位下位位下限加2)
65 #define d02_initsi 0xd4 // 1302初始化标记(为0xb4时,说明已经初始化)
66 #define ret_ds1302() d02_rst=0;d02_sclk=0;d02_rst=1 // 1302读写复位
67 #define end_ds1302() d02_sclk=1;d02_rst=0 // 1302读写结束
68
69
70
71 /*================================= 全局变量定义 ==================================*/
72
73
74 typedef struct // 定义时间类型
75 {
76 uchar hour;
77 uchar minute;
78 uchar second;
79 }time;
80
81 typedef struct // 定义日期类型
82 {
83 uchar year;
84 uchar month;
85 uchar day;
86 uchar week;
87 }date;
88
89 typedef union // 定义温度类型
90 {
91 int temp_data;
92 uchar t_data[2];
93 }trdata;
94
95 trdata bdata temp; // 温度警报值暂存
96 date idata today={'8',1,1,1}; // 日期暂存
97 time idata now={0x12,0,0} , save_time={0x12,0,0};
98 // 时间暂存(now是读出时间暂存 save_time上一时间暂存)
99 uchar idata time_tick=20,time_tick1=20,alarm_time[2],als_temp[2],
100 // T0中断数, T1中断数, 闹铃时间, 警报温度
101 bl_delay=15,temp_delay=5,opera[2][12],resu[12],
102 // 背光时间, 温度更新时间, 计算器数据寄存, 结果寄存
103 i,j,save1,temp_min=0;
104 // 计算器i/j下标,中间暂存,温度更新(分)
105
106
107
108 uchar bdata signs=0; // 系统标记寄存器
109 sbit bl1=signs^7; // bl1,bl0背光选择位(00 延时,01 常开,10 关闭)
110 sbit bl0=signs^6;
111 sbit di1=signs^5; // di1,di0显示模式(00模式1,01模式2,10模式3)
112 sbit di0=signs^4;
113 sbit meu=signs^3; // 菜单显示方式(0 图片,1 文字)
114 sbit keb=signs^2; // 键盘锁(0 无锁,1加锁)
115 sbit alm=signs^1; // 闹钟启动位(0 关闭,1开启)
116 sbit als=signs^0; // 报警启动位(0 启动,1关闭)
117
C51 COMPILER V8.02 縚制系统 08/08/2008 18:31:54 PAGE 3
118
119
120 uint bdata run_signs=0; // 运行标记寄存器
121 sbit ds18b20=run_signs^0; // 温感器存在标记(0不存在,1存在)
122 sbit temp_pn=run_signs^1; // 温度正负号标记(0正,1负)
123 sbit temprun=run_signs^2; // 温感器运行标记(0否,1启动)
124 sbit nba_tim=run_signs^3; // 篮球计时器标记(0关闭,1启动)
125 sbit adju_si=run_signs^4; // 数字更改连续标记(1连续)
126 sbit cal_del=run_signs^5; // 计算器显示点标记(0没有显示)
127 sbit cal_run=run_signs^6; // 计算完毕标记(1有效)
128 sbit oth_run=run_signs^7; // 其他标记
129 sbit alm_run=run_signs^8; // 闹钟时间到达标记(1有效)
130 sbit dis_sig=run_signs^9; // 显示时间标记(1有效)
131 sbit lock_op=run_signs^10; // 关锁时间到标记(1有效)
132 sbit b20time=run_signs^11; // 温感器重新读温度标记(1有效)
133 sbit t0_isr =run_signs^12; // TO中断标记(1有效(1s)
134 sbit thl_als=run_signs^13; // 温度警报标记
135 sbit init_d2=run_signs^14; // 模式2初始显示
136 sbit buzstop=run_signs^15; // 蜂鸣器停止标记
137
138
139
140
141 /*================================= 字体显示代码 ==================================*/
142
143 uchar code weeks[7][2]={"一","二","三","四","五","六","日"}; // 星期 //图片中文
144 uchar code menu_cn[6][8]={"调 整","工 具","设 置","保 密","版 本","退 出"};
145 uchar code menu_cn_2[6][6]={"调 整","工 具","设 置","保 密","版 本","退 出"};// 菜单文字
146 uchar code selected[2][16]={{"进入【 】\x04 "},{"设置【 】\x10 \x04 "}}; // 选框
147 uchar code secrets_menu[4][6]={"开 锁","更 改","初始化","退 出"}; // 保密菜单中文
148 uchar code tool_menu[5][6]={"计算器","温度计","闹 铃","篮球器","退 出"}; // 工具菜单中文
149 uchar code char_num[10]={"0123456789"}; // 数字显示代码 // 每月天数
150 uchar code dayofmonth[12]={0x31,0x28,0x31,0x30,0x31,0x30,0x31,0x31,0x30,0x31,0x30,0x31};
151 uchar code key_code[]={0xD7,0x7E,0x7D,0x7B,0xBE,0xBD,0xBB,0xDE,0xDD,0xDB,0xB7,0x77,0xEE,0xED,0xEB,0xE7};
152 uchar code ksp[4]={0x7F,0xBF,0xDF,0xEF}; // 按键扫描代码
153 uchar code tool_cal[4][2]={"+ ","- ","* ","/ "}; // 运算符号
154 uchar code alm_sign[2][2]={"关","开"}; // 闹铃开关
155 uchar code set_bl_dm[2][3][4]={{"30秒","常开","关闭"},{"模01","模02","模03"}};
156 uchar code set_mka[3][2][4]={{"图片","文字"},{"解锁","加锁"},{"开启","关闭"}};
157 uchar code nba_oppo[8][2]={"红","白","蓝","绿","紫","灰","黄","黑"};
158 uchar code set_menu[6][4]={"背光","显示","菜单","键盘","警报","退出"};
159
160
161 uchar code version[10][14]={ // 版本信息
162 {"清远职业技术学"},
163 {" 信息科技学院"},
164 {"08届毕业设计 "},
165 {" —05电子02班"},
166 {"作者:李锦华 "},
167 {"指导:李祖明 "},
168 {"版本:LIJH-V1.0"},
169 {" 2008/06/19"},
170 {"谢谢你的使用!"},
171 {" (ok)\x10"}};
172
173
174 uchar code timer_tips[12][16]={ // 篮球器使用说明
175 {"使用方法: "},
176 {" (+)(-)与(*)(/)"},
177 {"分别是两方的分数"},
178 {"加与减,(7)键回退"},
179 {"一秒,(8)键24秒复"},
C51 COMPILER V8.02 縚制系统 08/08/2008 18:31:54 PAGE 4
180 {"位,(9)键暂停与开"},
181 {"始;暂停状态下:"},
182 {"按两次(OK)键可返"},
183 {"回时钟模式-2界面"},
184 {",(OK)键返回程序"},
185 {"界面,(./S)键两次"},
186 {"退出程序. \x1f"}};
187
188
189
190 /*================================= 操作导航代码 ==================================*/
191
192
193 typedef struct // 定义主菜单操作索引
194 {
195 uchar shaft_num;
196 uchar left_num;
197 uchar right_num;
198 }menu_index;
199
200 typedef struct // 定义导航更改索引
201 {
202 uchar lnum;
203 uchar rnum;
204 }index;
205
206 menu_index code index_m[6]={{3,5,1},{4,0,2},{5,1,3},{0,2,4},{1,3,5},{2,4,0}}; // 菜单导航
207 index code index_t[6]={{4,1},{0,2},{1,3},{2,4},{3,0}}; // 工具导航
208 index code index_p[5]={{3,1},{0,2},{1,3},{2,0}}; // 保密导航
209 index code index_s[6]={{5,1},{0,2},{1,3},{2,4},{3,5},{4,0}}; // 设置导航
210 index code index_a[7]={{0x81,0x91},{0x83,0x91},{0x85,0x91},{0x89,0x81},
211 {0x8b,0x81},{0x8d,0x81},{0x8f,0x91}}; // 调整下的坐标
212 index code index_temp_set[3]={{0x8b,0x81},{0x8b,0x91},{0x8f,0x91}}; // 温度设定下的坐标
213 index code index_alm[3]={{0x8c,0x81},{0x8e,0x81},{0x8f,0x91}}; // 闹铃更改坐标
214 index code index_cal[3]={{0x86,0x90},{0x8e,0x80},{0x8e,0x90}}; // 计算器操作坐标
215 uchar code index_nba[4]={0x93,0x97,0x8b,0x8f}; // 篮球器设置导航
216
217
218
219
220
221 /*========================== 菜单图片(宽度x高度=32*24)=============================*/
222
223 uchar code menu_pic[6][96]={
224 {// 调整
225 0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x40,0x00,0x00,0x02,0x40,0x00,0x00,0x02,
226 0x40,0x00,0x00,0x82,0x47,0xFF,0xE1,0xC2,0x47,0xFF,0xF3,0xE2,0x47,0x38,0x68,0x02,
227 0x46,0xDF,0x68,0x82,0x46,0xDF,0x69,0xC2,0x46,0xDE,0xE8,0x82,0x46,0xDD,0xE8,0x02,
228 0x46,0xDD,0xE8,0x02,0x47,0x3D,0xE8,0x02,0x47,0xFF,0xE8,0x02,0x47,0xFF,0xE9,0xC2,
229 0x42,0x00,0x18,0x02,0x41,0xFF,0xF3,0xE2,0x40,0x00,0x01,0xC2,0x40,0x00,0x00,0x82,
230 0x40,0x00,0x00,0x02,0x40,0x00,0x00,0x02,0x7F,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00},
231
232 {// 工具
233 0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x40,0x00,0x00,0x02,0x40,0x00,0x03,0x82,
234 0x41,0xF0,0x07,0xC2,0x43,0xFF,0xCF,0xE2,0x47,0x3F,0xFE,0x02,0x47,0x3F,0xFE,0x02,
235 0x43,0xFF,0xCF,0xE2,0x41,0xF0,0x0F,0xC2,0x40,0x00,0x03,0x82,0x40,0x00,0x00,0x02,
236 0x40,0x00,0x03,0xC2,0x40,0x00,0x03,0xC2,0x41,0x80,0x01,0x82,0x43,0xFF,0xF3,0xC2,
237 0x47,0xFF,0xFF,0xE2,0x47,0xFF,0xFF,0xE2,0x43,0xFF,0xF3,0xC2,0x41,0x80,0x01,0x82,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -