这是一个可以设定新密码的单片机电子密码锁设计
所有资料下载:
密码锁程序设计.rar
(61.02 KB, 下载次数: 21)
密码锁源程序:
- #include <reg51.h>
- #define uint unsigned int
- #define uchar unsigned char //宏定义
- uchar code LEDData[] ={0xc0,0xf9,0xa4,0xb0,0x99,
- 0x92,0x82,0xf8,0x80,0x90,0xff,0xBF}; //共阳数码管
- sbit weixuan1 = P2 ^ 7; //数码管位选定义
- sbit weixuan2 = P2 ^ 6;
- sbit weixuan3 = P2 ^ 5;
- sbit weixuan4 = P2 ^ 4;
- //sbit hongse = P2 ^ 2;
- //sbit lvse = P2 ^ 1;
- //sbit lanse = P2 ^ 0;
- sbit K7 = P1 ^ 0; //按键
- sbit K8 = P1 ^ 1;
- sbit K9 = P1 ^ 2;
- sbit K4 = P1 ^ 3;
- sbit K5 = P1 ^ 4;
- sbit K6 = P1 ^ 5;
- sbit K1 = P1 ^ 6;
- sbit K2 = P1 ^ 7;
- sbit K3 = P3 ^ 0;
- sbit K0 = P3 ^ 1;
- sbit K10 = P3 ^ 2;
- sbit K11 = P3 ^ 3;
- int a, b, c, d, moshi = 0, jishu = 0;
- uint mi[4] = {1, 2, 3, 4};
- uint ma[4] = {10, 10, 10, 10};
- /*****延时子程序*****/
- void Delay(uint i)
- {
- while( i-- );
- }
- void qudou(void) //去抖延迟
- {
- int i;
- for(i = 0; i < 2400; i++);
- }
- /*****显示温度子程序*****/
- void xianshi()
- {
- weixuan1 = 0;
- weixuan2 = 0;
- weixuan3 = 0;
- weixuan4 = 0;
- P0 = LEDData[a];
- weixuan1 = 1;
- weixuan2 = 0;
- weixuan3 = 0;
- weixuan4 = 0;
- Delay(300);
- weixuan1 = 0;
- weixuan2 = 0;
- weixuan3 = 0;
- weixuan4 = 0;
- P0 = LEDData[b];
- weixuan1 = 0;
- weixuan2 = 1;
- weixuan3 = 0;
- weixuan4 = 0;
- Delay(300);
- weixuan1 = 0;
- weixuan2 = 0;
- weixuan3 = 0;
- weixuan4 = 0;
- P0 = LEDData[c];
- weixuan1 = 0;
- weixuan2 = 0;
- weixuan3 = 1;
- weixuan4 = 0;
- Delay(300);
- weixuan1 = 0;
- weixuan2 = 0;
- weixuan3 = 0;
- weixuan4 = 0;
- P0 = LEDData[d];
- weixuan1 = 0;
- weixuan2 = 0;
- weixuan3 = 0;
- weixuan4 = 1;
- Delay(300);
- }
- void key_guan()
- {
- if (K0 == 0) //按键0按下
- {
- qudou();
- if(K0 == 0)
- {
- jishu = 1;
- ma[0] = 0;
- moshi = 1;
- }
- while(K0 == 0);
- }
- if (K1 == 0) //按键1按下
- {
- qudou();
- if(K1 == 0)
- {
- jishu = 1;
- ma[0] = 1;
- moshi = 1;
- }
- while(K1 == 0);
- }
- if (K2 == 0) //按键2按下
- {
- qudou();
- if(K2 == 0)
- {
- jishu = 1;
- ma[0] = 2;
- moshi = 1;
- }
- while(K2 == 0);
- }
- if (K3 == 0) //按键3按下
- {
- qudou();
- if(K3 == 0)
- {
- jishu = 1;
- ma[0] = 3;
- moshi = 1;
- }
- while(K3 == 0);
- }
- if (K4 == 0) //按键4按下
- {
- qudou();
- if(K4 == 0)
- {
- jishu = 1;
- ma[0] = 4;
- moshi = 1;
- }
- while(K4 == 0);
- }
- if (K5 == 0) //按键5按下
- {
- qudou();
- if(K5 == 0)
- {
- jishu = 1;
- ma[0] = 5;
- moshi = 1;
- }
- while(K5 == 0);
- }
- if (K6 == 0) //按键6按下
- {
- qudou();
- if(K6 == 0)
- {
- jishu = 1;
- ma[0] = 6;
- moshi = 1;
- }
- while(K6 == 0);
- }
- if (K7 == 0) //按键7按下
- {
- qudou();
- if(K7 == 0)
- {
- jishu = 1;
- ma[0] = 7;
- moshi = 1;
- }
- while(K7 == 0);
- }
- if (K8 == 0) //按键8按下
- {
- qudou();
- if(K8 == 0)
- {
- jishu = 1;
- ma[0] = 8;
- moshi = 1;
- }
- while(K8 == 0);
- }
- if (K9 == 0) //按键9按下
- {
- qudou();
- if(K9 == 0)
- {
- jishu = 1;
- ma[0] = 9;
- moshi = 1;
- }
- while(K9 == 0);
- }
- }
- void key_shuru()
- {
- if (K0 == 0) //按键0按下
- {
- qudou();
- if(K0 == 0)
- {
- ma[jishu] = 0;
- jishu++;
- }
- while(K0 == 0);
- }
- if (K1 == 0) //按键1按下
- {
- qudou();
- if(K1 == 0)
- {
- ma[jishu] = 1;
- jishu++;
- }
- while(K1 == 0);
- }
- if (K2 == 0) //按键2按下
- {
- qudou();
- if(K2 == 0)
- {
- ma[jishu] = 2;
- jishu++;
- }
- while(K2 == 0);
- }
- if (K3 == 0) //按键3按下
- {
- qudou();
- if(K3 == 0)
- {
- ma[jishu] = 3;
- jishu++;
- }
- while(K3 == 0);
- }
- if (K4 == 0) //按键4按下
- {
- qudou();
- if(K4 == 0)
- {
- ma[jishu] = 4;
- jishu++;
- }
- while(K4 == 0);
- }
- if (K5 == 0) //按键5按下
- {
- qudou();
- if(K5 == 0)
- {
- ma[jishu] = 5;
- jishu++;
- }
- while(K5 == 0);
- }
- if (K6 == 0) //按键6按下
- {
- qudou();
- if(K6 == 0)
- {
- ma[jishu] = 6;
- jishu++;
- }
- while(K6 == 0);
- }
- if (K7 == 0) //按键7按下
- {
- qudou();
- if(K7 == 0)
- {
- ma[jishu] = 7;
- jishu++;
- }
- while(K7 == 0);
- }
- if (K8 == 0) //按键8按下
- {
- qudou();
- if(K8 == 0)
- {
- ma[jishu] = 8;
- jishu++;
- }
- while(K8 == 0);
- }
- if (K9 == 0) //按键9按下
- {
- qudou();
- if(K9 == 0)
- {
- ma[jishu] = 9;
- jishu++;
- }
- while(K9 == 0);
- }
- }
- void key_xinmima()
- {
- if (K0 == 0) //按键0按下
- {
- qudou();
- if(K0 == 0)
- {
- ma[jishu] = 0;
- jishu++;
- }
- while(K0 == 0);
- }
- if (K1 == 0) //按键1按下
- {
- qudou();
- if(K1 == 0)
- {
- ma[jishu] = 1;
- jishu++;
- }
- while(K1 == 0);
- }
- if (K2 == 0) //按键2按下
- {
- qudou();
- if(K2 == 0)
- {
- ma[jishu] = 2;
- jishu++;
- }
- while(K2 == 0);
- }
- if (K3 == 0) //按键3按下
- {
- qudou();
- if(K3 == 0)
- {
- ma[jishu] = 3;
- jishu++;
- }
- while(K3 == 0);
- }
- if (K4 == 0) //按键4按下
- {
- qudou();
- if(K4 == 0)
- {
- ma[jishu] = 4;
- jishu++;
- }
- while(K4 == 0);
- }
- if (K5 == 0) //按键5按下
- {
- qudou();
- if(K5 == 0)
- {
- ma[jishu] = 5;
- jishu++;
- }
- while(K5 == 0);
- }
- if (K6 == 0) //按键6按下
- {
- qudou();
- if(K6 == 0)
- {
- ma[jishu] = 6;
- jishu++;
- }
- while(K6 == 0);
- }
- if (K7 == 0) //按键7按下
- {
- qudou();
- if(K7 == 0)
- {
- ma[jishu] = 7;
- jishu++;
- }
- while(K7 == 0);
- }
- if (K8 == 0) //按键8按下
- {
- qudou();
- if(K8 == 0)
- {
- ma[jishu] = 8;
- jishu++;
- }
- while(K8 == 0);
- }
- if (K9 == 0) //按键9按下
- {
- qudou();
- if(K9 == 0)
- {
- ma[jishu] = 9;
- jishu++;
- }
- while(K9 == 0);
- }
- }
- void guan()
- {
- // hongse = 0;
- // lvse = 1;
- // lanse = 1;
- a = 11;
- b = 11;
- c = 11;
- d = 11;
- key_guan();
- }
- void shuru()
- {
- // hongse = 1;
- // lvse = 1;
- // lanse = 0;
- switch(jishu)
- {
- case 1:
- a = 10;
- b = 10;
- c = 10;
- d = 11;
- break;
- case 2:
- a = 10;
- b = 10;
- c = 11;
- d = 11;
- break;
- case 3:
- a = 10;
- b = 11;
- c = 11;
- d = 11;
- break;
- case 4:
- a = 11;
- b = 11;
- c = 11;
- d = 11;
- break;
- }
- if(jishu < 4)
- key_shuru();
- else
- {
- if (K10 == 0) //按键4按下
- {
- qudou();
- if(K10 == 0)
- {
- if(mi[0] == ma[0])
- if(mi[1] == ma[1])
- if(mi[2] == ma[2])
- if(mi[3] == ma[3])
- {
- moshi = 2;
- jishu = 0;
- ma[0] = 10;
- ma[1] = 10;
- ma[2] = 10;
- ma[3] = 10;
- }
- else
- {
- moshi = 0;
- jishu = 0;
- ma[0] = 10;
- ma[1] = 10;
- ma[2] = 10;
- ma[3] = 10;
- }
- else
- {
- moshi = 0;
- jishu = 0;
- ma[0] = 10;
- ma[1] = 10;
- ma[2] = 10;
- ma[3] = 10;
- }
- else
- {
- moshi = 0;
- jishu = 0;
- ma[0] = 10;
- ma[1] = 10;
- ma[2] = 10;
- ma[3] = 10;
- }
- else
- {
- moshi = 0;
- jishu = 0;
- ma[0] = 10;
- ma[1] = 10;
- ma[2] = 10;
- ma[3] = 10;
- }
- }
- while(K10 == 0);
- }
- }
- }
- void kai()
- {
- // hongse = 1;
- // lvse = 0;
- // lanse = 1;
- a = 0;
- b = 0;
- c = 0;
- d = 0;
- if (K11 == 0) //按键9按下
- {
- qudou();
- if(K11 == 0)
- {
- moshi = 3;
- a = 10;
- b = 10;
- c = 10;
- d = 10;
- }
- while(K11 == 0);
- }
- }
- void xinmima()
- {
- // hongse = 0;
- // lvse = 0;
- // lanse = 0;
- switch(jishu)
- {
- case 1:
- a = 10;
- b = 10;
- c = 10;
- d = ma[0];
- break;
- case 2:
- a = 10;
- b = 10;
- c = ma[0];
- d = ma[1];
- break;
- case 3:
- a = 10;
- b = ma[0];
- c = ma[1];
- d = ma[2];
- break;
- case 4:
- a = ma[0];
- b = ma[1];
- c = ma[2];
- d = ma[3];
- break;
- }
- if(jishu < 4)
- key_xinmima();
- else
- {
- if (K11 == 0) //按键4按下
- {
- qudou();
- if(K11 == 0)
- {
- mi[0] = ma[0];
- ma[0] = 10;
- mi[1] = ma[1];
- ma[1] = 10;
- mi[2] = ma[2];
- ma[2] = 10;
- mi[3] = ma[3];
- ma[3] = 10;
- jishu = 0;
- moshi = 0;
- }
- while(K11 == 0);
- }
- }
- }
- void zhuangtai()
- {
- switch(moshi)
- {
- case 0:
- guan();
- break;
- case 1:
- shuru();
- break;
- case 2:
- kai();
- break;
- case 3:
- xinmima();
- break;
- }
- }
- /*****主函数*****/
- void main(void)
- {
- while(1)
- {
- zhuangtai();
- xianshi();
- }
- }
复制代码 |