您好,欢迎来到投聚财经。
搜索
您的当前位置:首页单片机保险箱c语言课程实施方案

单片机保险箱c语言课程实施方案

来源:投聚财经




个人收集整理仅供参考学习

#include<8051.h>
#include <string.h>
#include "vir_buzzer_cfg.h"
#include"vir_buzzer.h"
#include"vir_key_cfg.h"
#include"vir_key.h"
#include"vir_lock_cfg.h"
#include"vir_lock.h"
#include"vir_memory_cfg.h"
#include"vir_memory.h"
#include"vir_show.h"
#include"buzzer.h"
#include "delay_cfg.h"
#include "delay.h"
#include "lock.h"
/* #include "i2c.h" */
#include"delay_cfg.h"
#include"delay.h"

#include"led_display_cfg.h" #include"led_display.h"#include"I2C_cfg.h"

staticvoid ____zyI2cBitSend(void)
{
if((ucData&0x80)){
__ZY_I2C_SDA=1;
}else{

} __ZY_I2C_SDA=0;

__ZY_I2C_DELAY();

1/ 32



个人收集整理仅供参考学习

__ZY_I2C_SCL=1;
__ZY_I2C_DELAY();
__ZY_I2C_SCL=0;
}

unsignedchar __zyI2cBitReceive(void)
{
unsignedchar ucRt;
__ZY_I2C_DELAY();
__ZY_I2C_SCL=1;
__ZY_I2C_DELAY();
ucRt=__ZY_I2C_SDA;
__ZY_I2C_SCL=0;
returnucRt;
}

staticvoid __zyI2cStartSend(void)

{

}

__ZY_I2C_DELAY(); __ZY_I2C_SDA=0; __ZY_I2C_DELAY();

{
__ZY_I2C_SDA=0;
__ZY_I2C_DELAY();
__ZY_I2C_SCL=1;
__ZY_I2C_DELAY();
__ZY_I2C_SDA=1;
}

staticvoid __zyI2cRestartSend(void)
{
__ZY_I2C_SDA=1;
__ZY_I2C_DELAY();
__ZY_I2C_SCL=1;

__ZY_I2C_DELAY();
__ZY_I2C_SDA=0;



__ZY_I2C_DELAY();

2 / 32



个人收集整理仅供参考学习

__ZY_I2C_SCL=0;
}

staticvoid __zyI2cAckSend(void)
{
__ZY_I2C_SDA=0;
__ZY_I2C_DELAY();
__ZY_I2C_SCL=1;
__ZY_I2C_DELAY();
__ZY_I2C_SCL=0;
}

staticvoid __zyI2cNakSend(void)
{
__ZY_I2C_SDA=1;
__ZY_I2C_DELAY();
__ZY_I2C_SCL=1;
__ZY_I2C_DELAY();

}

{

__ZY_I2C_SCL=0;



__ZY_I2C_SCL=1;
__ZY_I2C_DELAY();
if(__ZY_I2C_SDA==1){
__ZY_I2C_SCL=0;
return0;
}
__ZY_I2C_SCL=0;
return1;
}

staticvoid__zyI2cByteSend(unsigned char ucData)

{

unsigned char i;


i=8;


3/ 32



个人收集整理仅供参考学习

do{
__zyI2cBitSend(ucData);
ucData=ucData<<1;
}while(--i!=0);
}

static unsigned char __zyI2cBitReceive(void)
{
unsignedchar ucRt;
unsigned char i;
ucRt=0;
__ZY_I2C_SDA=1;
i=8;
do{
ucRt=(ucRt<<1)+__zyI2cBitReceive;
}while(--i!=0);
return ucRt;
}

void zyLedDisplayScan(void)
{

static unsigned char ucIndex=0;

/*

* 关闭显示

*/

//定义扫描位置索引静态变量

__ZY_LED_DIG1_OFF(); //关闭数码管__ZY_LED_DIG2_OFF();
__ZY_LED_DIG3_OFF();
__ZY_LED_DIG4_OFF();
__ZY_LED_DIG5_OFF();
__ZY_LED_DIG6_OFF();

/* *显示ucIndex 位:将待显示数字字符地数值送到段选位控制I/O

*/

4 / 32



个人收集整理仅供参考学习

__ZY_LED_SEG(~GucZyLedDisplayShowBuf[ucIndex]);

switch(ucIndex){

case0:

__ZY_LED_DIG1_ON(); //点亮数码管1

break;

case1:

__ZY_LED_DIG2_ON(); //点亮数码管2

break;

case2:

__ZY_LED_DIG3_ON(); //点亮数码管3

break;

case3:

__ZY_LED_DIG4_ON(); //点亮数码管4

break;

case4:

__ZY_LED_DIG5_ON();

break;
default:

break;

}

/*

*准备显示下一位

*/

ucIndex++;

if(ucIndex>=6){

ucIndex=0;

}

}



5 / 32



个人收集整理仅供参考学习

char zyI2cInit(void)
{
__ZY_I2C_SCL=0;
__zyI2cStopSend();
return 0;
}
unsignedchar zyI2cWrite(unsigned char ucAddr,
unsigned intuiRegAddr,
unsigned char ucRegAddrLen,
unsignedchar *pucData,
unsigned char ucDataLen)
{
unsigned char i;
if(ucDataLen==0||pucData==0){
return 0;
}
i=ucDataLen; __zyI2cStartSend(); __zyI2cByteSend(ucAddr&0xfe);
break;
}
ucRegAddrLen--;
uiRegAddr=uiRegAddr>>8;
}
if(ucRegAddrLen==0){
do{
__zyI2cByteSend(*pucData++);
if(!__zyI2IsAck){
break;
}
}while(--i!=0);

}

}
__zyI2cStopSend();



return(ucDataLen-i);

6 / 32



个人收集整理仅供参考学习

}
unsignedchar zyI2cRead(unsigned char ucAddr,
unsigned int uiRegAddr, unsigned char ucRegAddrLen, unsigned char *pucData, unsigned char ucDataLen) {
unsignedchar i;
if(ucDataLen==0||pucData==0)
{
return0;
}
__zyI2cStartSend();
__zyI2cByteSend(ucAddr&0xfe);
if(__zyI2cIsAck()){
while(ucRegAddrLen>0){
__zyI2cByteSend(uiRegAddr);
if(!__zyI2cIsAck()){
break;
}

} ucRegAddrLen--; uiRegAddr=uiRegAddr>>8;
i=ucDataLen-1;
while(i--1=0){
*pucData++=__zyI2cByteReceive();
__zyI2cAckSend();
}
*pucData=__zyI2cByteReceive();
__zyI2cNakSend();
}
}

}else{
ucDataLen=0;
}
__zyI2cStopSend();

}

return ucDataLen;



7/ 32



个人收集整理仅供参考学习

charzyLedDisplayInit(void)
{
return0;
}

voidzyLedDisplayScan(void)
{
staticunsigned char ucIndex=0;

/* * 关闭显示
__ZY_LED_DIG4_OFF();
__ZY_LED_DIG5_OFF();
__ZY_LED_DIG6_OFF();

/*
*显示ucIndex位:将待显示数字字符地数值送到段选位控制I/O*/
__ZY_LED_SEG(~GucZyLedDisplayShowBuf[ucIndex]);

switch(ucIndex){

case0:
__ZY_LED_DIG1_ON(); //点亮数码管1 break;

case 1:

//点亮数码管 2


__ZY_LED_DIG2_ON();


8/ 32



个人收集整理仅供参考学习

break;

case2:

__ZY_LED_DIG3_ON(); //点亮数码管3

break;

case3:

__ZY_LED_DIG4_ON(); //点亮数码管4

break;

case4:

__ZY_LED_DIG5_ON(); //点亮数码管5

break;

case5:

__ZY_LED_DIG6_ON(); //点亮数码管6

break;

default:

break;

}

/*
ucIndex=0;

}

}

/****延时驱动实现代码***/

/********************************************************************************b5E2RGbCAP 9/ 32



个人收集整理仅供参考学习

**全局变量定义

********************************************************************************/p1EanqFDPw
static unsigned int _GuiSum; //32位定时器高16

DXDiTa9E3d

staticvolatile unsigned char _GucTimerFlg; //32位定时器溢出标志RTCrpUDGiT

/********************************************************************************5PCzVD7HxA
** Description 延时初始化

********************************************************************************/jLBHrnAILg
char delayInit(void)
{
TMOD=(TMOD &0xf0)|0x01;
ET0=1;
return 0;
}

**xHAQX74J0X *******************************************************************************
*/LDAYtRyKfE
char delayMsStart(unsigned int uiDly);
{
unsigned long ulTmp1;
unsigned int
uiTmp2; /*
* 获得定时器初始值
*/

ulTmp1 =

DELAY_CYCLES(uiDly);

//计算需要地机器周期数



ulTmp1 = -ulTmp1;
/*

//加计数,所以取负Zzz6ZB2Ltk

* 设置定时器初始值
*/

uiTmp2 =ulTmp1 % 0x10000; TL0 = uiTmp2 % 256;

//定时器低16 dvzfvkwMI1

TH0

= uiTmp2 / 256;


10 / 32





个人收集整理仅供参考学习

_GuiSum=ulTmp1 / 0x10000; //定时器高16rqyn14ZNXI

_GueTimerFlg=0; //清处溢出标志TR0=1 //启动定时器

return0
}

/********************************************************************************EmxvxOtOco
** Description 检查延时是否结束

********************************************************************************/SixE2yXPq5
char delayMslsEnd(void);
{
return _GueTimerFlg;
}

/********************************************************************************6ewMyirQFL

*/kavU42VRUs char delayMs(unsigned int uiDly)
{

/*
* 开始延时
*/
if (delayMsStart(uiDly)<0){
return -1;
}
/*
* 等待延时结束
*/
while (!delayMslsEnd()) {
DELAY_HOOK();
}

return 0;

11/ 32



个人收集整理仅供参考学习

}

/********************************************************************************y6v3ALoS
**Description Time0中断服务函数

********************************************************************************/M2ub6vSTnP
void isrTimer0(void)_interrupt 1
{
if(++_GuiSum==0) {
_GuiTimerFlg=1; //设置溢出标志
TR0=0;
//停止定时器0YujCfmUCw }
}


/******************************************************************************
**eUts8ZQVRd
** Description 锁初始化

********************************************************************************/sQsAEJkW5T

char phyLockInit (void) {
_ZY_PHY_LOCK_INIT(); return 0;
}

//返回值:0成功;-1失败GMsIasNXkA

/****************************************************************************** **TIrRGchYzg
** Description 关锁

*******************************************************************************

12 / 32



个人收集整理仅供参考学习

*/7EqZcWLZNX

char phyLockLock (void) {
_ZY_PHY_LOCK_LOCK(); return 0; }

//返回值:0成功;-1失败lzq7IGf02E

/****************************************************************************** **zvpgeqJ1hk
** Description 开锁

******************************************************************************* */NrpoJac3v1

char phyLockUnlock (void) {

//返回值:0成功;-1失败1nowfTG4KI

_ZY_PHY_LOCK_UNLOCK();
return 0;
}

char virMemInit(void)
{

} unsigned char virMemRead(unsigned int uiAddr.char *pcData,unsigned char ucLen)fjnFLDa5Zo return zyCat1024Init()

{ }

/***虚拟键盘驱动实现代码***/



13 / 32



个人收集整理仅供参考学习

charzyKeyGet(void)
{
char ucRt; //返回键值 unsignedchar ucKeySum; //按键数目计数

ucRt=-1;
ucKeySum=0;

/*
* 将所有“列线”设置为输入状态
*/
_ZY_KEY_KC1_PIN=1;
_ZY_KEY_KC2_PIN=1;
_ZY_KEY_KC3_PIN=1;
/*
* 将所有“列线”设置为高电平
*/
_ZY_KEY_KR1_PIN=1;
_ZY_KEY_KR2_PIN=1;
_ZY_KEY_KR3_PIN=1; _ZY_KEY_KR4_PIN=1; /*
ucRt=0; //按键为0
ucKeySum++;
}

if(_ZY_KEY_KC2_PIN==0){按下

//如果kc20,则说明k5按键已经

ucRt=1; //键值为1

ucKeySum++;

}

if(_ZY_KEY_KC3_PIN==0){按下

//如果kc30,则说明k9按键已经

ucRt=2; //键值为2

ucKeySum++;

}

_ZY_KEY_KR1_PIN=1; //第一行扫描完毕,将kr1 恢复为1

/*

* 扫描第二行

*/

14 / 32



个人收集整理仅供参考学习

_ZY_KEY_KR2_PIN=0;
if(_ZY_KEY_KC1_PIN==0){
ucRt=3;
ucKeySum++;
}
if(_ZY_KEY_KC2_PIN==0){
ucRt=4;
ucKeySum++;
}
if(_ZY_KEY_KC3_PIN==0){
ucRt=5;
ucKeySum++;
}
_ZY_KEY_KR2_PIN=1;
/*
* 扫描第三行
*/
_ZY_KEY_KR3_PIN=1;
if(_ZY_KEY_KC1_PIN==0){
ucRt=6;

} if(_ZY_KEY_KC2_PIN==0){ ucKeySum++;
ucRt=8;
ucKeySum++;
}
_ZY_KEY_KR3_PIN=1;
/*
* 扫描第四行
*/
_ZY_KEY_KR4_PIN=1;
if(_ZY_KEY_KC1_PIN==0){
ucRt=9;
ucKeySum++;
}
if(_ZY_KEY_KC2_PIN==0){
ucRt=10;

} ucKeySum++;

if(_ZY_KEY_KC3_PIN==0){

15/ 32



个人收集整理仅供参考学习

ucRt=11;
ucKeySum++;
}
_ZY_KEY_KR4_PIN=1;
/*
* 超过一个按键,返回-1
*/
if(ucKeySum!=1){
return-1;

}
returnucRt; //返回键值

}

static code char_GcKeyTable[]={ ‘#’,’0’,’*’,’9’,’8’,’7’,’6’,’5’,’4’,’3’,’2’,’1’,0//按键转换表tfnNhnE6e5

};

**HbmVN777sL ** Description**Returned value: 键地ASCⅡ

********************************************************************************/V7l4jRB8Hs

static char _virKeyGet1(void) {
char cTmp1,cTmp2;
/*
*等待按键释放
*/
while (1){
while (zyKeyGet()>=0){ delayMs(10);

//返回值:键地ASC83lcPA59W9

//无键闭合,退出mZkklkzaaP

//4.12

/*

}


*去抖


16 / 32





个人收集整理仅供参考学习

*/

delayMs(10);

}

if(zyKeyGet()<0){ //两次状态一致,去抖成功

break

}

/*
*等待按键闭合
*/
while (1){
while(1){

cTmp1=zyKeyGet()

}

//获得按键状态

if (cTmp1>=0){

//有按键闭合,退出

break;

delayMs(10);
}
/*
*去抖
*/
delayMs(10);

AVktR43bpw
cTmp2=zyKeyGet(); //两次按键状态一样,去抖成功

if (cTmp2==cTmp1){


}

cTmp1=_GcKeyTable[cTmp1]; //键码转换成ASC

return cTmp1;

/****************************************************************************** **ORjBnOwcEd
** Description 在指定时间内获得按键地ASC

******************************************************************************* */2MiJTy0dTT
static char _virKeyGet2(unsigned int uiDly) //uiDly:以毫秒为单位,设定最大等待时间,0

为无穷等待gIiSpiue7A



{

17 / 32



个人收集整理仅供参考学习

charcTmp1,cTmp2;
unsignedchar I;

//4.13
delayMsStart(uiDly);
/*
*等待按键释放
*/
while(1){

while (zyKeyGet()>=0){ //无键闭合,退出uEh0U1Yfmh zyLedDisplayScan(); //代替延时
if(delayMslsEnd()){ //超时则返回
return-1;
}
}
/*
*去抖
*/
for(i=0;i<50;i++){
zyLedDisplayScan(); if(delayMslsEnd()){ return -1;//代替延时 //超时则返回

IAg9qLsgBX break;
}
}
/*
*等待按键闭合
*/
while (1){
while(1){
cTmp1=zyKeyGet() //获得按键状态
if(cTmp1>=0){ //有按键闭合,退出
break;
}

}

zyLedDisplayScan();

//代替延时

if (delayMslsEnd()){

//超时则返回

return -1;


}


18/ 32



个人收集整理仅供参考学习

/*
*去抖
*/
for(i=0;i<50;i++){
zyLedDisplayScan(); //代替延时
if(delayMslsEnd()){ //超时则返回
return-1;
}
}
cTmp2=zyKeyGet(); //两次按键状态一样,去抖成功

WwghWvVhPE

if(cTmp2==cTmp1){
break;
}
}

}

cTmp1=_GcKeyTable[cTmp1]; //键码转换成ASC

return cTmp1;

//4.14

**asfpsfpi4k *******************************************************************************
*/ooeyYZTjj1
char virKeyInit(void)
{
return zyKeyInit()
}

/****************************************************************************** **BkeGuInkxI
** Description 获得按键地ASC

******************************************************************************* */PgdO0sRlMo

char virKeyGet(unsigned int uiDly) 无穷等待3cdXwckm15

//uiDly:以毫秒为单位,设定最大等待时间,0


19/ 32



个人收集整理仅供参考学习

{
if(uiDly==0) {
return_virKeyGet1();
}

return_virKeyGet2(uiDly);
}

charphyBuzzerInit(void)
{ TMOD=(TMOD%0x0f)|0x10;
TR1=0;
TF1=0;

ET1=1;
PT1=1;

return0;

}

{ uiFreq =20;
}
if(uiFreq>20000){
uiFreq=20000;
}
uiTimer1Load
=0x10000-(OSC/12)/(uiFreq*2);h8c52WOngM __GucTimerHightLoad =uiTimer1Load/0x100;
__GucTimerlowtLoad =uiTimer1Load%0x100;
TR1=0;
TH1=uiTimer1Load/0X100;
TL1=uiTimer1Load%0X100;
TR1=1;
return 0;
}

20/ 32



个人收集整理仅供参考学习

charphyBuzzerStop(void)
{
TR1 =0;
TF1 =0;
__ZY_BUZZER_PIN=1;
return0;
}

/****虚拟蜂鸣器驱动实现代码******/

/********************************************************************************v4bdyGious
**Description: 虚拟蜂鸣器初始化

********************************************************************************/J0bm4qMpJ9
char virBuzzerInit(void)
{

} return phyBuzzerInit();

**XVauA9grYP **Description:

********************************************************************************/bR9C6TJscw
char virBuzzerTweet (unsigned char ucMod)
{
switch(ucMod){
caseVIR_BUZZER_STOP;
phyBuzzerStop();
break;

case VIR_BUZZER_SHORT;
phyBuzzerTweet(_ZY_BUZZER_HZ);
delayMs(100);
phyBuzzerStop();
delayMs(100);break;

case VIR_BUZZER_TWO_SHORT;

21/ 32



个人收集整理仅供参考学习

phyBuzzerTweet(_ZY_BUZZER_HZ);
delayMs(100);
phyBuzzerStop();
delayMs(100);
phyBuzzerTweet(_ZY_BUZZER_HZ);
delayMs(100);
phyBuzzerStop();
delayMs(100);
break;

caseVIR_BUZZER_LONG;
phyBuzzerTweet(_ZY_BUZZER_HZ);
delayMs(500);
phyBuzzerStop();
delayMs(100);
break;

default
break;
}

} return 0;

/****虚拟显示器驱动实现代码******/
static code unsigned char __GucShowTable[][2]={ //显示字库pN9LBDdtrd
{'0',0x3f},{'1',0x06},{'2',0x5b},{'3',0x4f},{'4',0x66},DJ8T7nHuGT
{'5',0x6d},{'6',0x7d},{'7',0x07},{'8',0x7f},{'9',0x6f},QF81D7bvUA
{'A',0x77},{'B',0x7c},{'C',0x39},{'D',0x5e},{'E',0x79},{'F',0x71},4B7a9QFw9h {'a',0x77},{'b',0x7c},{'c',0x39},{'d',0x5e},{'e',0x79},{'f',0x71},ix6iFA8xoX

{'O',0x3f},{'R',0x50},{'P',0x73},{'N',0x37},{'-',0x40},wt6qbkCyDE

22 / 32




个人收集整理仅供参考学习

{'o',0x3f},{'r',0x50},{'p',0x73},{'n',0x37},{'',0x00},{'\011',0x00},Kp5zH46zRk {0x00,0x00}
};

/********************************************************************************Yl4HdOAA61
**Description: 虚拟显示器初始化

********************************************************************************/ch4PJx4BlI
char virShowInit(void)
{
returnzyLedDisplayInit(); }

/********************************************************************************qd3YfhxCzo
**Description: 输出字符串

*******************************************************************************
*/E836L11DO5
char virShowPuts(char *pcStr) //将程序清单1.40拷贝在这里,仅需修改函数名S42ehLvE3M { chari;
}

for(i=0;i<6;i++){

if(*pcStr==0){

GucZyLedDisplayShowBuf[i]=0;冲区清0501nNvZFis

//如果字符串中地字符为0,则将显示缓

continue; //提前结束本次循环}

/*
* 小数点单独处理:在当前位置显示小数点
*/
if (*pcStr=='.'){
i--; GucZyLedDisplayShowBuf[i]=GucZyLedDisplayShowBuf[i]|0x80;jW1viftGw9

}else{

23 / 32



个人收集整理仅供参考学习

/*
* 查找显示字库
*/
for(j=0;__GucShowTable[j][0]!=0;j++){
if(*pcStr==(char)__GucShowTable[j][0]){

/*
* 显示字符:将待显示字符地数值赋给显示缓冲区
*/
GucZyLedDisplayShowBuf[i]=__GucShowTable[j][1];
break; //终止循环,使流程跳出循环体 }
}
}
pcStr++; //指向字符串地下一个字符}

return0;
}

/********************************************************************************xS0DOYWHLP

*/LOZMkIqI0w char virShowClr(void) //将程序清单1.41拷贝在这里,仅需修改函数名即可

ZKZUQsUJed

{
memset(GucZYLedDisplayShowBuf,0,6);
return 0;
}



24/ 32



个人收集整理仅供参考学习

/***虚拟存储器驱动实现代码**********/
charvirMemInit(void)
{
returnzyCat1024Init()
}
unsigned char virMemRead(unsigned int uiAddr.char *pcData,unsignedchar ucLen)dGY2mcoKtT

{
if(uiAddr>=_ZY_VIR_MEMORY_SIZE) {
return0;
}
/*
*调整读取数据数目
*/
if((uiAddr+ucLen)>=_ZY_VIR_MEMORY_SIZE) { ucLen=_ZY_VIR_MEMORY_SIZE– uiAddr; }

return zyCat1024Read(uiAddr,(unsigned char *)pcData,ucLen);rCYbSWRLIA}

char virMemWrite(unsigned int uiAddr,char *pcData,unsigned charucLen)FyXjoFlMWh
{

/*
*
*/
if((uiAddr+ucLen)>=_ZY_VIR_MEMORY_SIZE){
ucLen=_ZY_VIR_MEMORY_SIZE– uiAddr;
}

returnzyCat1024Write(uiAddr,(uisigned char *)pcData,ucLen);TuWrUpPObX}



25/ 32



个人收集整理仅供参考学习

/**************************************************************************7qWA

q9jPqE

**全局变量定义

**************************************************************************/llVIWT

NQFk

static char

_GeHmiBuf[7];

//缓冲区yhUQsDgRT1

static char

_GePassword[7];

//密码MdUZYnKS8I

/********************************************************************************09T7t6eTno
**Description: 打开保险箱
** Returned value: 0——密码输入正确
** 1——超时
** -1——密码输入错误

*******************************************************************************
*/e5TfZQIUB5
static char_hmiBoxOpen(void) { unsignedchar i,j;
*显示初始画面
*/
stcpy(_GeHmiBuf,”------”); //C标准库函数
virShowPuts(_GetHmiBuf);
/*
*输入密码
*/
j=0;
while(1){
cTmp1=virKeyGet(15*1000);
if (cTmp1<0){
/*
*超时
*/

} return 1;

if (cTmp1==‘*’){ //‘*’为删除键

26/ 32



个人收集整理仅供参考学习

s1SovAcVQM

if(j>0){
j--;
}
_GeHmiBuf[j]=‘-’;
}else {
_GeHmiBuf[j]=cTmp1;//保存输入地字符
j++;
}
if(cTmp1==#){ //密码输入完毕

GXRw1kFW5s

break;
}
/*
*7个字符必须为‘#
*/
if(j==7&&cTmp1!=‘#’){
j--;
_GeHmiBuf[6]=0;
continue;

* 提示用户字符输入完成 } /*
/*
*校验密码
*/
virMemRead(USER_PASSWORD_ADDR, _GePassword,7);

if (_GePassword[0]==(char)0xff){

//cat1024未保存密码

memcpy(_GePassword, 123456#,7); //默认密码为“123456UTREx49Xj9

}

if (memcmp(_GePassword,_GeHmiBuf,j)==0) { /*
*开锁
*/
virShowPuts(“OPEN”);

//比较密码8PQN3NDYyP

virBuzzerTweet(VIR_BUZZER_LOGN);
virLockUnlock(0);

}

return 0;


/*


27 / 32



个人收集整理仅供参考学习

*密码错误
*/
if(i<2) {
virShowPuts(“error”);
virBuzzerTweet(VIR_BUZZER_TWO_SHORT); delayMs(2000);
}
}
/*
*连续输入错误
*/
virShowClr();
virBuzzerTweet(VIR_BUZZER_TWO_SHORT);
virBuzzerTweet(VIR_BUZZER_TWO_SHORT);
delayMs(60000);
return-1;
}

/********************************************************************************mLPVzx7ZNw **Description: 设置用户密码

*/AHP35hB02d {
unsigned char i;
char cTmp1;

virBuzzerTweet(VIR_BUZZER_LONG);
virBuzzerTweet(VIR_BUZZER_SHORT);
/*
*显示初始画面
*/
strcpy(_GeHmiBuf,”------”);
virShowPuts(_GeHmiBuf);
/*
*输入密码
*/
i=0; while(1){

cTmp1=virKeyGet(0);

28/ 32



个人收集整理仅供参考学习

if(cTmp1==*){//*为删除键 if(i>0){
i--;
}
_GeHmiBuf[i]=‘-’;
}else{
_GeHmiBuf[i]=cTmp1;
//保存输入地字符 i++;
}

if (cTmp1==#){
if (i!=1){
break;
}
/*

//输入密码完毕NDOcB141gT

*不允许输入空密码
*/
i--;
continue;
}
/* *7 个字符必须为‘#’ */
}
/*
*提示用户字符输入完成
*/
virShowPuts(_GeHmiBuf);
virBuzzerTweet(VIR_BUZZER_SHORT);
}

virMemWrite(USER_PASSWORD_ADDR,_GeHmiBuf,7); //保存密码1zOk7Ly2vA virBuzzerTweet(VIR_BUZZER_LONG);
delayMs(2000);
virShowPuts(“OPEN”);
return 0; }


/******************************************************************************

29 / 32



个人收集整理仅供参考学习

**fuNsDv23Kh
**Description: 系统主函数

********************************************************************************/ tqMB9ew4YX

voidmain (void)
{
charcTmp1;

zyI2cInit();
delayInit();
virBuzzerInit();
virKeyInit();
virLockInit();
virMemInit();
virShowInit();

EA=1; //允许中断HmMJFY05dE
virBuzzerTweet(VIR_BUZZER_LONG); while(1){

显示ViLRaIt6sk */
while(virKeyGet(0)!=‘#’){
}
virBuzzerTweet(VIR_BUZZER_SHORT);
/*
*进入关锁状态
*/
if (_hmiBoxOpen()!=0) {
continue;
}
/*
*进入开锁状态,等待输入‘*’和‘#’
*/
do{

cTmp1=virKeyGet(0);



if(cTmp1==‘*’){

30 / 32



个人收集整理仅供参考学习

_hmiPasswordSet(); //进入设置密码态

}
}while(cTmp1!==‘#’);
/*
*返回到待机状态

*/
virBuzzerTweet(VIR_BUZZER_SHORT);
virBuzzerTweet(VIR_BUZZER_SHORT);
virLockLock(0);
}
}

版权申明
本文部分内容,包括文字、图片、以及设计等在网上搜集整理.

版权为个人所有

and design. Copyright is personal ownership.9eK0GsX7H1
This article includes text, pictures,

地规定,不得侵犯本网站及相关权利人地合法权利.除此以外,将本文任何内容或服务用于其他用途时,须征得本人及相关权利人地书面许可,并支付报酬.naK8ccr8VI

Users may use the contents or services of this article for personalstudy, research or appreciation, and other non-commercial ornon-profit purposes, but at the same time, they shall abide by theprovisions of copyright law and other relevant laws, and shall notinfringe upon the legitimate rights of this website and its relevantobligees. In addition, 31 / 32



个人收集整理仅供参考学习

whenany content or service of this article is used for other purposes,written permission and remuneration shall be obtained from the personconcerned and the relevant
obligee.B6JgIVV9ao

转载或引用本文内容必须是以新闻性或资料性公共免费信息为
使用目地地合理、善意引用,不得对本文内容原意进行曲解、修改,
并自负版权等法律责任.P2IpeFpap5
Reproduction or quotation of the content of this article
must be reasonable and good-faith citation for the use of news
or informative public free information. It shall not
copyright.3YIxKpScDM



32 / 32

Copyright © 2019- tjwe.cn 版权所有

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务