📄 main.lst
字号:
C51 COMPILER V9.00 MAIN 05/08/2013 21:45:00 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************
2 汇诚科技
3
4 实现功能:继电器通、断时间都可调控制程序(eeprom)
5 使用芯片:STC12C5204AD
6 晶振:11.0592MHZ
7 编译环境:Keil
8 硬件环境:四位数显两路输入三按键
9 作者:yang
10 QQ:790244909
11 网站:www.ourhc.cn
12 物联网测试网站:http://hualongelectron.eicp.net/
13 日期:2013-05-08
14 淘宝店:
15 华龙电子直销:http://hlelectrony.taobao.com
16 电子开发直销:http://shop63233873.taobao.com
17 汇诚科技网路购物:http://shop36330473.taobao.com
18 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
19 /********************************************************************
20 /********************************************************************
21 功能说明:继电器循环通断控制程序
22 继电器通、断时间可调,
23 key1功能键:调节模式与实时显示模式转换
24 keynum=0:实时显示计时模式
25 keynum=1:调整继电器设定闭合秒
26 keynum=2:调整继电器设定闭合分
27 keynum=3:调整继电器设定断开秒
28 keynum=4:调整继电器设定断开分
29 以上四个设定值设定好后都存入eeprom,掉电可记忆
30 上电时,继电器吸合,数显开始计时,到达设定闭合时间后断开;数显清零,
31 数显开始计时,到设定时间,继电器闭合,数显清零。。。
32 循环下去。。
33
34 设定断开时间最大是10分59秒
35 设定闭合时间最大是10分59秒
36 ********************************************************************/
37 #include<STC12C5A60S2.H> //库文件
38 #include <intrins.h>
39 #include"eprom.h"
40 #define uchar unsigned char//宏定义无符号字符型
41 #define uint unsigned int //宏定义无符号整型
42
43 #define DUAN P2 //P0口控制段
44 #define WEI P1 //P2口控制位
45 sbit jdq= P3^7;
46 sbit key1=P3^2; //功能按键
47 sbit key2=P3^3; //增加
48 sbit key3=P3^4; //减小
49 /********************************************************************
50 初始定义
51 *********************************************************************/
52 code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟
53 uchar wei[4]={0X01,0X02,0X04,0X08}; //位的控制端
54 uchar numb[4]; //定义字符串
55 uchar cnt,keynum;
C51 COMPILER V9.00 MAIN 05/08/2013 21:45:00 PAGE 2
56 uchar setfen,setmiao;
57 uchar setdf,setdm;
58 uchar miao,fen;
59 void IapEraseSector(uint addr);
60 void IapProgramByte(uint addr,uchar dat);
61 uchar IapReadByte(uint addr);
62 bit flag=1; //闭合断开标志位
63 /********************************************************************
64 延时函数
65 *********************************************************************/
66 void delay(uchar x) //延时程序 0.1秒
67 {
68 1 uchar m,n,s;
69 1 for(m=x;m>0;m--)
70 1 for(n=20;n>0;n--)
71 1 for(s=248;s>0;s--);
72 1 }
73 /********************************************************************
74 显示函数
75 *********************************************************************/
76 void display(uchar a ,uchar b) //显示函数
77 {
78 1 WEI&=0XF0;
79 1 DUAN=seg7code[a/10];
80 1 WEI=wei[0];
81 1 delay(2);
82 1
83 1 WEI&=0XF0;
84 1 DUAN=seg7code[a%10]&0x7f;
85 1 WEI=wei[1];
86 1 delay(2);
87 1
88 1 WEI&=0XF0;
89 1 DUAN=seg7code[b/10];
90 1 WEI=wei[2];
91 1 delay(2);
92 1
93 1 WEI&=0XF0;
94 1 DUAN=seg7code[b%10];
95 1 WEI=wei[3];
96 1 delay(2);
97 1
98 1 WEI&=0XF0;
99 1 }
100 /********************************************************************
101 按键扫描
102 *********************************************************************/
103 void keyscan(void)
104 {
105 1 if(key1==0)
106 1 { delay(1);
107 2 if(key1==0)
108 2 {
109 3 while(!key1);
110 3 keynum++;
111 3 TR0=0;
112 3 jdq=0;
113 3 if(keynum>=5)
114 3 {
115 4 keynum=0;
116 4 miao=fen=0;
117 4 TR0=1;
C51 COMPILER V9.00 MAIN 05/08/2013 21:45:00 PAGE 3
118 4 jdq=1;
119 4 }
120 3 }
121 2 }
122 1 switch(keynum)
123 1 {
124 2 case 1: if(key2==0)
125 2 {
126 3 delay(5);
127 3 if(key2==0)
128 3 {
129 4 while(!key2)display(setfen,setmiao);
130 4 setmiao++;
131 4 if(setmiao>59)
132 4 setmiao=59;
133 4 IapEraseSector(0);
134 4 IapProgramByte(0,setmiao); //写入函数
135 4 }
136 3 }
137 2 if(key3==0)
138 2 {
139 3 delay(5);
140 3 if(key3==0)
141 3 {
142 4 while(!key3)display(setfen,setmiao);
143 4 setmiao--;
144 4 if(setmiao==0||setmiao>=250)
145 4 setmiao=0;
146 4 IapEraseSector(0);
147 4 IapProgramByte(0,setmiao); //写入函数
148 4 }
149 3 }
150 2 display(setfen,setmiao);
151 2 break;
152 2 case 2: if(key2==0)
153 2 {
154 3 delay(5);
155 3 if(key2==0)
156 3 {
157 4 while(!key2)display(setfen,setmiao);
158 4 setfen++;
159 4 if(setfen>99)
160 4 setfen=99;
161 4 IapEraseSector(512);
162 4 IapProgramByte(512,setfen); //写入函数
163 4 }
164 3 }
165 2 if(key3==0)
166 2 {
167 3 delay(5);
168 3 if(key3==0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -