📄 mimaiic.lst
字号:
C51 COMPILER V8.02 MIMAIIC 07/14/2010 14:43:21 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MIMAIIC
OBJECT MODULE PLACED IN mimaiic.OBJ
COMPILER INVOKED BY: D:\处理软件\keil\C51\BIN\C51.EXE mimaiic.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 “天祥电子” 倾情奉献
3 www.txmcu.cn
4 www.txmcu.com
5 ********************************************************************************
6 功能键
7 S6---S15 数字键0-9
8 S16---更改密码 S17---更改密码完毕后确认
9 S18---重试密码、重新设定 S19---关闭密码锁
10 初始密码:000000 密码位数:6位
11 注意:掉电后,所设密码会丢失,重新上点时,密码恢复为原始的000000
12 与P1相连的8位发光LED点亮代表锁被打开;熄灭代表锁被锁上
13
14 程序功能: 本程序结合了24C02存储器的存储功能,可以掉电保存密码。
15 第一次运行时,若输入000000原始密码后无反应,可以试验着将主程序中前面的
16 一小段被注释线屏蔽的程序前的注释线删掉,然后重新编译下载(可以将密码还原为000000)。
17 此后,再将这小段程序屏蔽掉,再编译下载。方可正常使用。
18 1、开锁:
19 下载程序后,直接按六次S7(即代表数字1),8位LED亮,锁被打开,输入密码时,
20 六位数码管依次显示小横杠。
21 2、更改密码:
22 只有当开锁(LED亮)后,该功能方可使用。
23 首先按下更改密码键S16,然后设置相应密码,此时六位数码管会显示设置密码对应
24 的数字。最后设置完六位后,按下S17确认密码更改,此后新密码即生效。
25 3、重试密码:
26 当输入密码时,密码输错后按下键S18,可重新输入六位密码。
27 当设置密码时,设置中途想更改密码,也可按下此键重新设置。
28 4、关闭密码锁:
29 按下S19即可将打开的密码锁关闭。
30 推荐初级演示步骤:输入原始密码000000---按下更改密码按键S16---按0到9设置密码---按S17
31 确认密码更改---按S18关闭密码锁---输入新的密码打开密码锁
32 *******************************************************************************/
33 #include<reg52.h>
34 #include <intrins.h>
35 #define uint unsigned int
36 #define uchar unsigned char
37
38 uchar old1,old2,old3,old4,old5,old6; //原始密码000000
39 uchar new1,new2,new3,new4,new5,new6; //每次MCU采集到的密码输入
40 uchar a=16,b=16,c=16,d=16,e=16,f=16; //送入数码管显示的变量
41 uchar wei,key,temp;
42
43 bit allow,genggai,ok,wanbi,retry,close; //各个状态位
44
45 sbit dula=P2^6;
46 sbit wela=P2^7;
47 sbit beep=P2^3;
48 sbit sda=P2^0; //IO口定义
49 sbit scl=P2^1;
50
51 unsigned char code table[]=
52 {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
53 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};
54
55 /*****************IIC芯片24C02存储器驱动程序************************************/
C51 COMPILER V8.02 MIMAIIC 07/14/2010 14:43:21 PAGE 2
56
57 void nop()
58 {
59 1 _nop_();
60 1 _nop_();
61 1 }
62 /////////24C02读写驱动程序////////////////////
63 void delay1(unsigned int m)
64 { unsigned int n;
65 1 for(n=0;n<m;n++);
66 1 }
67
68 void init() //24c02初始化子程序
69 {
70 1 scl=1;
71 1 nop();
72 1 sda=1;
73 1 nop();
74 1 }
75
76 void start() //启动I2C总线
77 {
78 1 sda=1;
79 1 nop();
80 1 scl=1;
81 1 nop();
82 1 sda=0;
83 1 nop();
84 1 scl=0;
85 1 nop();
86 1 }
87
88 void stop() //停止I2C总线
89 {
90 1 sda=0;
91 1 nop();
92 1 scl=1;
93 1 nop();
94 1 sda=1;
95 1 nop();
96 1 }
97
98 void writebyte(unsigned char j) //写一个字节
99 {
100 1 unsigned char i,temp;
101 1 temp=j;
102 1 for (i=0;i<8;i++)
103 1 {
104 2 temp=temp<<1;
105 2 scl=0;
106 2 nop();
107 2 sda=CY; //temp左移时,移出的值放入了CY中
108 2 nop();
109 2 scl=1; //待sda线上的数据稳定后,将scl拉高
110 2 nop();
111 2 }
112 1 scl=0;
113 1 nop();
114 1 sda=1;
115 1 nop();
116 1 }
117
C51 COMPILER V8.02 MIMAIIC 07/14/2010 14:43:21 PAGE 3
118 unsigned char readbyte() //读一个字节
119 {
120 1 unsigned char i,j,k=0;
121 1 scl=0; nop(); sda=1;
122 1 for (i=0;i<8;i++)
123 1 {
124 2 nop(); scl=1; nop();
125 2 if(sda==1)
126 2 j=1;
127 2 else
128 2 j=0;
129 2 k=(k<<1)|j;
130 2 scl=0;
131 2 }
132 1 nop();
133 1 return(k);
134 1 }
135
136 void clock() //I2C总线时钟
137 {
138 1 unsigned char i=0;
139 1 scl=1;
140 1 nop();
141 1 while((sda==1)&&(i<255))
142 1 i++;
143 1 scl=0;
144 1 nop();
145 1 }
146
147 ////////从24c02的地址address中读取一个字节数据/////
148 unsigned char read24c02(unsigned char address)
149 {
150 1 unsigned char i;
151 1 start();
152 1 writebyte(0xa0);
153 1 clock();
154 1 writebyte(address);
155 1 clock();
156 1 start();
157 1 writebyte(0xa1);
158 1 clock();
159 1 i=readbyte();
160 1 stop();
161 1 delay1(100);
162 1 return(i);
163 1 }
164
165 //////向24c02的address地址中写入一字节数据info/////
166 void write24c02(unsigned char address,unsigned char info)
167 {
168 1 start();
169 1 writebyte(0xa0);
170 1 clock();
171 1 writebyte(address);
172 1 clock();
173 1 writebyte(info);
174 1 clock();
175 1 stop();
176 1 delay1(5000); //这个延时一定要足够长,否则会出错。因为24c02在从sda上取得数据后,还需要一定时间的烧录过
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -