首页 > 论文发表知识库 > 基于单片机的电子密码锁毕业论文

基于单片机的电子密码锁毕业论文

发布时间:

基于单片机的电子密码锁毕业论文

哈哈。快点回答吧。好几天了

程序设计内容

(1). 密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。

(2). 密码的输入问题:  由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。

(3).按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。

C语言源程序

#include unsigned char code ps[]={1,2,3,4,5};

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,                               

0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

unsigned char pslen=9; unsigned char templen;

unsigned char digit; unsigned char funcount;

unsigned char digitcount;

unsigned char psbuf[9];

bit cmpflag;

bit hibitflag;

bit errorflag;

bit rightflag;

unsigned int second3;

unsigned int aa;

unsigned int bb;

bit alarmflag;

bit exchangeflag;

unsigned int cc;

unsigned int dd;

bit okflag;

unsigned char oka;

unsigned char okb;

void main(void)

{  

unsigned char i,j;  

P2=dispcode[digitcount];  

TMOD=0x01;  

TH0=(65536-500)/256;  

TL0=(65536-500)%6;  

TR0=1;  

ET0=1;  

EA=1;  

while(1)   

  {      

if(cmpflag==0)        

{          

if(P3_6==0) //function key           

  {              

for(i=10;i>0;i--)              

for(j=248;j>0;j--);      

         if(P3_6==0)                

{                

   if(hibitflag==0)       

              {     

                  funcount++;  

                     if(funcount==pslen+2)

                        {  

                         funcount=0;

                          cmpflag=1;

                         }

                       P1=dispcode[funcount];

                    }

                    else

                      {

                         second3=0;

                      }  

                 while(P3_6==0);

                }

            }

          if(P3_7==0) //digit key

            {

              for(i=10;i>0;i--)

              for(j=248;j>0;j--);

              if(P3_7==0)

                {

                  if(hibitflag==0)

                    {

                      digitcount++; 

                  if(digitcount==10)

                        {

                          digitcount=0;

                        }

                      P2=dispcode[digitcount];

                      if(funcount==1)

                        {

                          pslen=digitcount;                          

templen=pslen;

                        }

                        else if(funcount>1)

                          {  

                           psbuf[funcount-2]=digitcount;

                          }

                    }

                    else

                      {

                        second3=0;

                      }

                  while(P3_7==0);

                }

            }

        }  

       else

          {

            cmpflag=0;

            for(i=0;i

              {  

               if(ps[i]!=psbuf[i])

                  {

                    hibitflag=1;

                    i=pslen;

                    errorflag=1;

                    rightflag=0;

                    cmpflag=0;

                    second3=0;

                    goto a;  

                 }

              }   

          cc=0;  

           errorflag=0;  

           rightflag=1;

            hibitflag=0;

a:   cmpflag=0;

          }

}

}

void t0(void)

interrupt 1 using 0 {   TH0=(65536-500)/256;  

TL0=(65536-500)%6;  

if((errorflag==1) && (rightflag==0))  

{

      bb++;

      if(bb==800)

        {

          bb=0;

          alarmflag=~alarmflag;

        }

      if(alarmflag==1)

        {

          P0_0=~P0_0;

        }

      aa++;

      if(aa==800)

        {

          aa=0;

          P0_1=~P0_1;

        }

      second3++;

      if(second3==6400)

        {

          second3=0;

          hibitflag=0;

          errorflag=0;

          rightflag=0;

          cmpflag=0;

          P0_1=1;  

         alarmflag=0;

          bb=0;  

         aa=0;  

       }

    }

  if((errorflag==0) && (rightflag==1))

    {

      P0_1=0;

      cc++;

      if(cc<1000)

        {

          okflag=1;

        }

        else if(cc<2000)

          {

            okflag=0;

          }

          else

            {

              errorflag=0;

              rightflag=0;

              hibitflag=0;

              cmpflag=0;

              P0_1=1;

              cc=0;  

             oka=0;

              okb=0;

              okflag=0;  

             P0_0=1;  

           }

      if(okflag==1)

        {  

         oka++;  

         if(oka==2)

            {

              oka=0;

              P0_0=~P0_0;

            }

        }

        else

          {

            okb++;

            if(okb==3)

              {

                okb=0;

                P0_0=~P0_0;

              }  

         }

    }

}

用STC的单片机,里面有EEPROM,把设定的密码写到里面。正常运行时 输入密码和EEPROM里面的密码比较 正确了就可以进入

这里有 毕业论文 基于单片机的电子密码锁设计AT89S51|矩阵键盘|电子密码锁|毕业设计文件格式:word毕业论文 基于单片机的电子密码锁设计论文正文共49页。共19073个字符数(不计空格)。如需下载,请点击页面最下方“下载地址 点击下载”。基于单片机的电子密码锁设计摘 要随着人们对安全的重视和科技的发展,对日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求 ,增加其安全性 ,用密码代替钥匙的密码锁应运而生。电子锁由于具有报警功能,保密性高,使用灵活性好,安全系数高,设计方法合理,简单易行,成本低,符合住宅、办公室用锁要求 , 具有推广价值。受到了广大用户的亲睐。这种应用以单片机为核心 ,通过编程来实现整体基本功能和安全性要求设计。系统将能完成开锁、超时报警、超次锁定、管理员解密、修改用户密码基本的密码锁的功能。能用PROTEL99SE绘制电路原理图,并做出调试好基于单片机的电子密码锁的实物。关键词:AT89S51,矩阵键盘,电子密码锁Microcontroller-based design of electronic locksABSTRACTAs people focus on security and technology development, life insurance for the safety devices in increasingly high demand. To meet people’s use of the lock request to increase their safety, replace the key with a password lock came into being. Electronic lock as an alarm, high secrecy, use good flexibility, high safety factor, design reasonable, simple, low cost, consistent with residential, office lock request is worth promoting. By the user pro-gaze. This application to SCM is the core of the overall program to achieve the basic functions and design safety will be able to complete the unlock, alarm out, and Ultra lock, decrypt administrator, modify the basic user password lock feature. Can PROTEL99SE circuit schematic drawing and make a good debugging MCU-based electronic code lock of the words: AT89S51, matrix keyboards, electronic lock目 录第一章 绪论 引言 电子密码锁的研究现状 课题研究方法 2第二章 开发环境和开发工具 Protel 99se简介 keil介绍 开发工具在系统中的作用 主要元器件介绍 主控芯片AT89S51 数码管 掉电存储模块AT24c02 8第三章 电子密码锁设计硬件部分 电子密码锁总原理图 开锁电路设计 按键电路设计 显示电路设计 掉电存储电路设计 电源电路设计 12第四章 电子密码锁软件部分 主程序流程图: 键功能流程图: 14第五章 电子密码锁实物制作和调试过程 电路板制作中的问题和调试结果分析 制作好的实物的图片 16第六章 总结 20设计总结 20参考文献 21致 谢 22附录一 电子密码锁的电路图 23附录二 电子密码锁3D截图 24附录三 电子密码锁程序清单 24

单片机密码锁论文外文文献

;----------------------------------------------; 8051 LCD PASSWORD 4; 8051 ASM USE: KEIL; COPYRIGHT CMY 2003;----------------------------------------------KA EQU 0AH ; 按键定义KB EQU 0BHKC EQU 0CHKD EQU 0DHKE EQU 0EHKF EQU 0FH; VAR DEFINE...................PASS EQU 30H ; 30 31 32 33 34 35 I/P TO CHECKPASSNEW EQU 36H ; 36 37 38 39 3A 3BBUF_KEY EQU 4AH ; 按键数据缓冲区KEY_NO EQU 4BH ; 按键编码CO EQU 4CH ; 计数变量LCDE EQU 4DH ; LCD 延迟变量X EQU 53H ; LCD 显示的地址; USER RAM .....5FH 60H-->SP;----------------------------------------------FKEY EQU ; KEY PRESSEDALF EQU ; ALARM FLAG; I/O DEFINE ......................; LCDRS EQU ; LCD RS 引脚定义RW EQU ; LCD RW 引脚定义EN EQU ; LCD EN 引脚定义 SPK EQU ; 压电蜂鸣器引脚定义REL EQU ; 继电器引脚定义WLED EQU ; 工作指示灯引脚定义;-------------------- ORG 0000H ; 程序代码由地址0000开始 JMP BEGIN;---------------------BEGIN: LCALL INIT_PORT LCALL LED_BL ; LED闪动,表示程序开始执行 LCALL BZ ; 压电喇叭发出一声 LCALL SET_LCD ; LCD初始化 LCALL MLOOP ; 执行主程序 JMP $;-----------------------------------------------------------------MESS: DB " 8051 PASSWORD WITH LCD"PASS0: DB 1,2,3,4;--------------------------------------------; DELAY Xms R5*10 msDELAY: ; 总延迟时间R5*10ms MOV R6,#50D1: MOV R7,#100 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,DELAY RET;---------------------LED_BL: ; 工作指示灯闪烁3次 MOV R4,#6LE1: CPL WLED ; 位反向 MOV R5,#3 ; 延迟30ms LCALL DELAY DJNZ R4, LE1 RET;-------------------------------------------------; KEY PAD: TYPE A ; 按键编码; F E D C; B 3 6 9; A 2 5 8; 0 1 4 7TABLE_DIG: DB 0FH, 0BH, 0AH, 00H DB 0EH, 03H, 02H, 01H DB 0DH, 06H, 05H, 04H DB 0CH, 09H, 08H, 07H;--------------------------------------------------; USE P1; R0 : BUF PT NO USE ; 未使用; R1 : COUNT 1 ; 循环计数1; R2 : COUNT 2 ; 循环计数2; R3 : SCAN SIGNAL ; 循环扫描输出信号; R4 : COUNT KEY_NO ; 按键计数编码;------------------SCAN: MOV R3,#0FEH ; 按键计数编码清除为0 MOV R4,#0 ; KEY NO COUNT MOV R1,#4 ; 循环1执行4次 CLR ; 表示未按键;......................................L1:; SEND OUT SCAN SIGNAL VIA MOV A,R3 MOV P1,A ; 由P1口送出扫描输出信号;..................................; DELAY A WHILE ....... MOV R5,#1 ; 延迟10ms LCALL DELAY; READ I/P DATA FROM MOV A,P1 ; 读取P1数据以便判断是否有按键 ANL A,#0F0H ; 取得高4位值 EX:1110XXXX; CHECK KEY PRESSED ? ; 检测是否按键 MOV R2,#4 ; 循环2执行4次;.................................L2: JB ; 累加器A位4若为1表示没按键 MOV KEY_NO,R4 ; 加载按键编号 SETB ; 按键标志设为1 N1: ; 没按键 INC R4 ; 按键编号加1 RR A ; 累加器向右移动一位,以便检查下一位 DJNZ R2,L2 ; 循环2判断是否继续执行; CHANGE SCAN CODE ; 改变扫描码 EX:XXXX1101 MOV A,R3 ; 加载旧的扫描码 RL A ; 累加器向左移动一位 MOV R3,A DJNZ R1,L1 ; 循环1判断是否继续执行;....................................; SET FKEYBACK: JNB ; 设置是否按键 SETB FKEY ; 若有按键 FKEY=1 RETNO_KEY: CLR FKEY ; 若没按键 FKEY=0 RET;---------------------------------------------------------; SCAN KEY ON AND OFF THEN PASS KEY_NOSCAN_KEY: CLR FKEY ; 清除按键标志 LCALL SCAN ; 执行按键扫描; IF(KEY_ON) WAIT KEY_OFF ; 若有按键等待按键放开来 JB FKEY,WAIT_OFF ; 测试按键标志; NO KEY ON RETURN.... ; 若没有按键则直接返回 RETWAIT_OFF: LCALL SCAN ; 执行按键扫描 JB FKEY,WAIT_OFF ; 若有按键等待按键放开来 RET;----------------------------------------; WAIT KEY IN.............; RETURN A: DIGIT NOGET_KEY: ; 等待按键并传回按键码 CLR FKEY ; 清除按键标志 LCALL SCAN ; 执行按键扫描; IF(KEY_ON) WAIT KEY_OFF ; 若有按键等待按键放开来 JB FKEY,G1 ; 测试按键标志; NO KEY ON WAIT KEY IN.... ; 若没有按键则继续等待按键 JMP GET_KEYG1: LCALL SCAN ; 执行按键扫描 JB FKEY,G1 ; 等待按键放开来; KEY INDEX TO DIGIT NO. ; 按键扫描值转换为按键码 MOV A,KEY_NO MOV DPTR,#TABLE_DIG; 经过查表的方式找出按键码 MOVC A,@A+DPTR RET;-----------------------------------------------LOOK: ; 显示所输入的新密码 MOV CO,#4 MOV R0,#PASSNEW ; 指向密码存放的变量区LO1: MOV A,@R0 ; 取出密码值 INC R0 ; 指向下一变量区 DJNZ CO,LO1 ; 是否完成4位数 RET;----------------------CHECK_PASS: ; 密码比较程序 LCALL IP_PASS ; 取得要比较的密码 LCALL LOOK ; 显示所输入的新密码;COMP PASS[] TO PASS0[]........... MOV CO,#4 ; 设置比较4码 MOV R0,#PASS ; 指向密码存放的变量区 MOV DPTR,#PASS0 ; 指向内部固定的密码区CH1: MOV A,#0 MOVC A,@A+DPTR ; 取出数据放入A缓冲器 MOV B,@R0 ; 取出数据放入B缓存器 CJNE A,B,CH2 ; 互相比较 INC DPTR ; 指向下一位置 INC R0;............................. DJNZ CO,CH1 ; 是否处理完所有位数 LCALL OK ; 显示密码正确消息 MOV R4,#1 ; 密码正确LED闪动 LCALL LED_BL LCALL LED_BL RETCH2:;........................... JMP COMP ; 继续比较内部所设置的密码ERROR: LCALL ERR ; 密码错误处理 LCALL LED_BL ; LED闪动 RET;-------------------------COMP:;COMP PASS[] TO PASSNEW[]........... MOV CO,#4 ; 比较4位数值 MOV R0,#PASS ; 指向要比较的密码 MOV R1,#PASSNEW ; 指向内部所设置的密码C1: MOV A,@R0 ; 取出数据放入A缓冲器 MOV B,@R1 ; 取出数据放入B缓冲器 CJNE A,B,ERROR ; 互相比较 INC R0 ; 指向下一位置 INC R1;............................. DJNZ CO,C1 ; 是否处理完成 LCALL OK ; 密码比较正确 RET;---------------------------------------------; KEY IN 4 PASS SHOW ON LCD LINE 2 输入4位密码值IP_PASS: MOV DPTR,#M_IP MOV A,#2 ; LINE2 LCALL LCD_PRINT ; 在LCD上显示执行消息 MOV B,#9 ; 设置LCD位置 MOV CO,#4 ; 设置取得4码 MOV R0,#PASS ; 指向密码存放的变量区I1: LCALL GET_KEY ; 等待按键 MOV @R0,A ; 将按键值存入变量区 ADD A,#30H ; 转换为字符 LCALL LCDP2 ; 显示在LCD上 INC B ; 显示地址增加 INC R0 ; 指向下一变量区 DJNZ CO,I1 ; 是否完成4位数 RET;----------------------------OK: MOV DPTR,#M_OK MOV A,#2 ; LINE2 LCALL LCD_PRINT ; 显示密码正确消息 LCALL DOOR_OPEN ; 执行开启继电器动作 RET;-----------------------------ERR: MOV DPTR,#M_ERR MOV A,#2 ; LINE2 LCALL LCD_PRINT ; 显示密码错误消息 LCALL ALARM ; 警报器响起 RET;-----------------------------SLINE2: ; 在第二行显示消息 MOV DPTR,#LMESS2 MOV A,#2 ; LINE2 LCALL LCD_PRINT RET;----------------------------; SET NEW PASS........... ; 设置新密码SET_PASS:; GET 4 KEYS............ ; 显示执行消息 MOV DPTR,#M_IP_NEW MOV A,#2 ; LINE2 LCALL LCD_PRINT MOV B,#12 ; 设置LCD地址 MOV CO,#4 ; 取得4位数字 MOV R0,#PASSNEW ; 指向变量区S1: LCALL GET_KEY ; 等待按键 MOV @R0,A ; 将按键值放入变量区 ADD A,#30H ; 转换为字符 LCALL LCDP2 ; 显示在LCD上 INC B ; 显示地址增加 INC R0 ; 指向下一变量区 DJNZ CO,S1 ; 是否完成4位数 RET;---------------------------------------------------------M_IP: DB "I/P PASS:.... ",0 ; 显示消息M_OK: DB "PASSWORD OK !!! ",0M_ERR: DB "PASSWORD ERROR !",0M_IP_NEW: DB "I/P NEWPASS:....",0;---------------------------------------------------------; SHOW ON LCD ; 显示内部密码值在LCD上LOOK_PASS: MOV B,#0 ; 设置LCD位置 MOV CO,#4 ; 共有4位数值 MOV R0,#PASSNEW ; 指向变量区LL: MOV A,@R0 ; 取得变量数据 ADD A,#30H ; 转换为字符 LCALL LCDP2 ; 在LCD第二行上显示数据 INC R0 ; 指向下一变量区 INC B ; LCD位置增加 DJNZ CO,LL ; 是否处理完所有位 MOV R5,#100 ; 延迟一下 LCALL DELAY LCALL SLINE2 ; 显示原先LCD消息 RET;----------------------------------------REL_ON: SETB REL ; 继电器状态设为ON RET;-------------------REL_OFF:CLR REL ; 继电器状态设为OFF RET;-------------------INIT_PORT: LCALL REL_OFF ; 初始化I/O接口 RET;---------------------DOOR_OPEN: ; 继电器开启 LCALL REL_ON MOV R5,#200 ; 延迟2s LCALL DELAY LCALL REL_OFF ; 继电器关闭 RET;---------------------------------------ALARM: ; 压电喇叭发出警报声 MOV R2,#3AL1: LCALL LED_BL LCALL BZ DJNZ R2,AL1 RET;----------------------------BZ: MOV R6,#0 ; 压电喇叭发出一声B1: LCALL DEL CPL SPK DJNZ R6,B1 RET;--------------------DEL: MOV R7,#180 ; 短暂延迟DE1: NOP DJNZ R7,DE1 RET;-----------------------------------------------------------MLOOP: ; 主控循环 LCALL GET_KEY; JUDGE WHICH KEY.......... ; 判断按下哪一键; 'A'--> SET NEW PASS.; 'B'--> CHECK PASS. ; 比较是否为A键 CJNE A,#KA,M1 ; 未按下A键则继续扫描; 'A'--> SET NEW PASS. .... ; 执行设置新密码 LCALL SET_PASS ; 设置新密码 LCALL SLINE2 ; LCD显示消息 JMP MLOOP ; 继续循环执行 ; 比较是否为B键M1: CJNE A,#KB, M2 ; 未按下B键则继续扫描; 'B'--> CHECK PASS. .... ; 执行密码输入是否正确 LCALL CHECK_PASS ; 检查密码输入是否正确 LCALL SLINE2 ; LCD显示消息 JMP MLOOP ; 继续循环执行M2: JMP MLOOP ; 继续执行循环 RET;-------------------------------------; LCD I/O;-------------------------------------SET_LCD: ; 对LCD初始化设置及测试 LCALL INIT_LCD ; 初始化LCD MOV R5,#10 LCALL DELAY ; 延迟一下 MOV DPTR,#LMESS1 ; 指针指向显示消息1 MOV A,#1 ; 显示在第一行 LCALL LCD_PRINT ; 显示执行消息1于LCD第一行 MOV DPTR,#LMESS2 ; 指针指向显示消息2 MOV A,#2 ; 显示在第二行 LCALL LCD_PRINT ; 显示执行消息2于LCD第二行 RET;---------------------------------LMESS1: DB "8051 PASSWORD ",0LMESS2: DB "A OR B KEY .....",0;-----------------------------------------; A=LINE 1 OR 2 ; 在LCD的第一行或第二行显示字符; DPTR = MESSAGE POINTERLCD_PRINT: CJNE A,#1,LINE2 ; 判断是否为第一行LINE1: MOV A,#80H ; 设置LCD的第一行地址 LCALL WCOM ; 写入命令 LCALL CLR_LINE ; 清除该行字符数据 MOV A,#80H ; 设置LCD的第一行地址 LCALL WCOM ; 写入命令 JMP FILLLINE2: MOV A,#0C0H ; 设置LCD的第二行地址 LCALL WCOM ; 写入命令 LCALL CLR_LINE ; 清除该行字符数据 MOV A,#0C0H ; 设置LCD的第二行地址 LCALL WCOM ; 写入命令FILL: ; 填入字符 CLR A MOVC A,@A+DPTR ; 由消息区取出字符 CJNE A,#0,LC1 ; 判断是否为结束码 RETLC1: LCALL WDATA ; 写入数据 INC DPTR ; 指针加1 JMP FILL ; 继续填入字符 RET;---------------------------CLR_LINE: ; 清除该行LCD的字符 MOV R0,#20 ; 设置个数CL1: MOV A,#' ' ; 载入空格符至LCD LCALL WDATA ; 输出字符至LCD DJNZ R0,CL1 ; 计数结束 RET;-------------------INIT_LCD: ; 4位I/O控制LCD接口初始化 MOV A,#38H ; 双行显示,8位数据,5X8点阵 LCALL WCOM MOV A,#06H ; 输入方式设置:AC自动加1 LCALL WCOM MOV A,#0CH ; 显示开,光标关 LCALL WCOM MOV A,#01H ; 清LCD显示屏 LCALL WCOM RET;---------------------- B_LCD: PUSH ACC ; 把ACC压入堆栈 CLR RS ; RS=1 SETB RW ; RW=1B_LCD1: MOV P0,#0FFH ; P0口置"1" SETB EN ; EN =1 MOV A,P0 ; 从P1口读出数据 NOP ; 空操作 CLR EN ; EN =0 JB ; 判断忙标志 POP ACC ; 把ACC弹出堆栈 RET ;----------------------WCOM: LCALL B_LCD ; 判断忙标志 CLR RS ; RS=0 CLR RW ; RW=0 SETB EN ; EN =1 MOV P0,A ; 写入指令到P0口 CLR EN ; EN =0 RET;--------------------------------------WDATA: LCALL B_LCD ; 判断忙标志 SETB RS ; RS=1 CLR RW ; RW=0 SETB EN ; EN =1 MOV P0,A ; 写入数据 CLR EN ; EN =0 RET;--------------------------------------; PRINT A CHAR ON LCD LINE 1; A=ASC DATA; B=LINE X : ; 在LCD的第一行显示字符; LINE 1 PUSH ACC ; 将A放入堆栈 MOV A,B ; 设置显示的地址 ADD A,#80H ; 设置LCD的第一行地址 LCALL WCOM ; 写入命令 POP ACC ; 由堆栈取出A LCALL WDATA ; 写入数据 RET;-------------------------------; PRINT A CHAR ON LCD LINE 2; A=ASC DATA; B=LINE X : ; 在LCD的第二行显示字符; LINE 2 PUSH ACC ; 将A放入堆栈 MOV A,B ; 设置显示地址 ADD A,#0C0H ; 设置LCD的第二行地址 LCALL WCOM ; 写入命令 POP ACC ; 由堆栈取出A LCALL WDATA ; 写入数据 RET ;-------------------------------------- END

新款的单片机都可以设置密码

用STC的单片机,里面有EEPROM,把设定的密码写到里面。正常运行时 输入密码和EEPROM里面的密码比较 正确了就可以进入

仔细看目录介绍有一章是讲密码锁控制的

密码电子锁毕业论文

电子密码锁论文的参考文献

参考文献1

【1】阎石.数字电子技术(第五版):高等教育出版社,2009

【2】王孝俭、邓胜全.数字电子技术实验指导书:西北农林科技大学,2007

【3】唐亚楠.数字电子技术同步辅导:中国矿业大学出版社,2009

【4】邱关源.电路(第五版):高等教育出版社,2008

【5】华成英、童诗白.模拟电子技术基础[M].第四版:高等教育出版社,2006

参考文献2

[1]《数字电子技术基础》,伍时和主编,清华大学出版社

[2]《一种电子密码锁的实现》,杨茂涛主编,福建电脑2004

[3]《数字电路逻辑设计》(第二版),王硫银主编,高等教育出版社

[4]《555时基电路原理、设计与应用》,叶桂娟主编,电子工业出版社

[5]《数字电子技术基础》(第四版),阎石主编,高等教育出版社1997

[6]《新型电子密码锁的设计》,李明喜主编,机电产品开发与创新2004

[7]《电子技术基础(数字部分)》(第五版),康华光主编,高等教育出版社

[8]《模拟电子技术基础》(第三版),童诗白华成英主编,高等教育出版社

[9]《电子线路设计·实验·测试》(第三版),谢自美主编,华中科技大学出版社

参考文献3

[1]周润景张丽娜丁莉.基于PROTEUS的电路及单片机设计与仿真(第二版).北京航天航空大学出版社

[2]李朝清.单片机原理及接口技术(第三版).北京航天航空大学出版社.

[3]周兴华.手把手教你学单片机.北京航天航空大学出版社.

[4]张文利.微机原理及单片机接口技术.中国科学技术大学出版社

参考文献

[1].阎石数字电路技术基础[M].高等教育出版社,2005

[2].许琦.基于FPGA的电子密码锁的设计[J].科技信息,2006

[3].李连华.基于FPGA的电子密码锁设计[J].中国科技信息,2006

[4].童诗白华成英模拟电子技术基础[M].高等教育出版社,2006

这里有 毕业论文 基于单片机的电子密码锁设计AT89S51|矩阵键盘|电子密码锁|毕业设计文件格式:word毕业论文 基于单片机的电子密码锁设计论文正文共49页。共19073个字符数(不计空格)。如需下载,请点击页面最下方“下载地址 点击下载”。基于单片机的电子密码锁设计摘 要随着人们对安全的重视和科技的发展,对日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求 ,增加其安全性 ,用密码代替钥匙的密码锁应运而生。电子锁由于具有报警功能,保密性高,使用灵活性好,安全系数高,设计方法合理,简单易行,成本低,符合住宅、办公室用锁要求 , 具有推广价值。受到了广大用户的亲睐。这种应用以单片机为核心 ,通过编程来实现整体基本功能和安全性要求设计。系统将能完成开锁、超时报警、超次锁定、管理员解密、修改用户密码基本的密码锁的功能。能用PROTEL99SE绘制电路原理图,并做出调试好基于单片机的电子密码锁的实物。关键词:AT89S51,矩阵键盘,电子密码锁Microcontroller-based design of electronic locksABSTRACTAs people focus on security and technology development, life insurance for the safety devices in increasingly high demand. To meet people’s use of the lock request to increase their safety, replace the key with a password lock came into being. Electronic lock as an alarm, high secrecy, use good flexibility, high safety factor, design reasonable, simple, low cost, consistent with residential, office lock request is worth promoting. By the user pro-gaze. This application to SCM is the core of the overall program to achieve the basic functions and design safety will be able to complete the unlock, alarm out, and Ultra lock, decrypt administrator, modify the basic user password lock feature. Can PROTEL99SE circuit schematic drawing and make a good debugging MCU-based electronic code lock of the words: AT89S51, matrix keyboards, electronic lock目 录第一章 绪论 引言 电子密码锁的研究现状 课题研究方法 2第二章 开发环境和开发工具 Protel 99se简介 keil介绍 开发工具在系统中的作用 主要元器件介绍 主控芯片AT89S51 数码管 掉电存储模块AT24c02 8第三章 电子密码锁设计硬件部分 电子密码锁总原理图 开锁电路设计 按键电路设计 显示电路设计 掉电存储电路设计 电源电路设计 12第四章 电子密码锁软件部分 主程序流程图: 键功能流程图: 14第五章 电子密码锁实物制作和调试过程 电路板制作中的问题和调试结果分析 制作好的实物的图片 16第六章 总结 20设计总结 20参考文献 21致 谢 22附录一 电子密码锁的电路图 23附录二 电子密码锁3D截图 24附录三 电子密码锁程序清单 24

程序设计内容

(1). 密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。

(2). 密码的输入问题:  由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。

(3).按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。

C语言源程序

#include unsigned char code ps[]={1,2,3,4,5};

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,                               

0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

unsigned char pslen=9; unsigned char templen;

unsigned char digit; unsigned char funcount;

unsigned char digitcount;

unsigned char psbuf[9];

bit cmpflag;

bit hibitflag;

bit errorflag;

bit rightflag;

unsigned int second3;

unsigned int aa;

unsigned int bb;

bit alarmflag;

bit exchangeflag;

unsigned int cc;

unsigned int dd;

bit okflag;

unsigned char oka;

unsigned char okb;

void main(void)

{  

unsigned char i,j;  

P2=dispcode[digitcount];  

TMOD=0x01;  

TH0=(65536-500)/256;  

TL0=(65536-500)%6;  

TR0=1;  

ET0=1;  

EA=1;  

while(1)   

  {      

if(cmpflag==0)        

{          

if(P3_6==0) //function key           

  {              

for(i=10;i>0;i--)              

for(j=248;j>0;j--);      

         if(P3_6==0)                

{                

   if(hibitflag==0)       

              {     

                  funcount++;  

                     if(funcount==pslen+2)

                        {  

                         funcount=0;

                          cmpflag=1;

                         }

                       P1=dispcode[funcount];

                    }

                    else

                      {

                         second3=0;

                      }  

                 while(P3_6==0);

                }

            }

          if(P3_7==0) //digit key

            {

              for(i=10;i>0;i--)

              for(j=248;j>0;j--);

              if(P3_7==0)

                {

                  if(hibitflag==0)

                    {

                      digitcount++; 

                  if(digitcount==10)

                        {

                          digitcount=0;

                        }

                      P2=dispcode[digitcount];

                      if(funcount==1)

                        {

                          pslen=digitcount;                          

templen=pslen;

                        }

                        else if(funcount>1)

                          {  

                           psbuf[funcount-2]=digitcount;

                          }

                    }

                    else

                      {

                        second3=0;

                      }

                  while(P3_7==0);

                }

            }

        }  

       else

          {

            cmpflag=0;

            for(i=0;i

              {  

               if(ps[i]!=psbuf[i])

                  {

                    hibitflag=1;

                    i=pslen;

                    errorflag=1;

                    rightflag=0;

                    cmpflag=0;

                    second3=0;

                    goto a;  

                 }

              }   

          cc=0;  

           errorflag=0;  

           rightflag=1;

            hibitflag=0;

a:   cmpflag=0;

          }

}

}

void t0(void)

interrupt 1 using 0 {   TH0=(65536-500)/256;  

TL0=(65536-500)%6;  

if((errorflag==1) && (rightflag==0))  

{

      bb++;

      if(bb==800)

        {

          bb=0;

          alarmflag=~alarmflag;

        }

      if(alarmflag==1)

        {

          P0_0=~P0_0;

        }

      aa++;

      if(aa==800)

        {

          aa=0;

          P0_1=~P0_1;

        }

      second3++;

      if(second3==6400)

        {

          second3=0;

          hibitflag=0;

          errorflag=0;

          rightflag=0;

          cmpflag=0;

          P0_1=1;  

         alarmflag=0;

          bb=0;  

         aa=0;  

       }

    }

  if((errorflag==0) && (rightflag==1))

    {

      P0_1=0;

      cc++;

      if(cc<1000)

        {

          okflag=1;

        }

        else if(cc<2000)

          {

            okflag=0;

          }

          else

            {

              errorflag=0;

              rightflag=0;

              hibitflag=0;

              cmpflag=0;

              P0_1=1;

              cc=0;  

             oka=0;

              okb=0;

              okflag=0;  

             P0_0=1;  

           }

      if(okflag==1)

        {  

         oka++;  

         if(oka==2)

            {

              oka=0;

              P0_0=~P0_0;

            }

        }

        else

          {

            okb++;

            if(okb==3)

              {

                okb=0;

                P0_0=~P0_0;

              }  

         }

    }

}

用STC的单片机,里面有EEPROM,把设定的密码写到里面。正常运行时 输入密码和EEPROM里面的密码比较 正确了就可以进入

基于单片机电子秤毕业论文

电子信息工程大学毕业论文 (张清卓)从21世纪开始,无线传感器网络就开始引起了学术界,军事界和工业界的极大关注。美国和欧洲相继启动了许多关于无线传感器网络的研究计划。随着科学技术的迅猛发展,人类目前已经置身于信息时代,信息的获取是实现信息化的前提,获取物理家门口满怀欣喜的一种重要工具就是传感器。无线传感器网络是当前国际上备受关注的,由多学高度交叉的新兴研究热点领域⑴它综合了传感器技术,嵌入式计算技术及无线通信技术等三大技术,能够通过嵌入式系统对信息进行处理,并通过随机自组织无线通信网络以多跳中继方式所感知信息传送到用户终端。 无线传感器网络可以用于监控温度,湿度,压力,土壤构成,噪声,机械应力等多种环境条件,使用户可以深入的了解和把我周围的世界。无线传感器网络的随机布设,自组织,环境适应等特点使其在军事国防,环境监测,生物医疗,抢先去救灾以及商业应用等领域具有广阔的应用前景,和很高的应用价值⑵。当然,在空进搜索和灾难拯救等特殊领域,无线传感器网络也有其得天独厚的技术优势。

液压伺服系统设计 液压伺服系统设计 在液压伺服系统中采用液压伺服阀作为输入信号的转换与放大元件。液压伺服系统能以小功率的电信号输入,控制大功率的液压能(流量与压力)输出,并能获得很高的控制精度和很快的响应速度。位置控制、速度控制、力控制三类液压伺服系统一般的设计步骤如下: 1)明确设计要求:充分了解设计任务提出的工艺、结构及时系统各项性能的要求,并应详细分析负载条件。 2)拟定控制方案,画出系统原理图。 3)静态计算:确定动力元件参数,选择反馈元件及其它电气元件。 4)动态计算:确定系统的传递函数,绘制开环波德图,分析稳定性,计算动态性能指标。 5)校核精度和性能指标,选择校正方式和设计校正元件。 6)选择液压能源及相应的附属元件。 7)完成执行元件及液压能源施工设计。 本章的内容主要是依照上述设计步骤,进一步说明液压伺服系统的设计原则和介绍具体设计计算方法。由于位置控制系统是最基本和应用最广的系统,所以介绍将以阀控液压缸位置系统为主。 全面理解设计要求 全面了解被控对象 液压伺服控制系统是被控对象—主机的一个组成部分,它必须满足主机在工艺上和结构上对其提出的要求。例如轧钢机液压压下位置控制系统,除了应能够承受最大轧制负载,满足轧钢机轧辊辊缝调节最大行程,调节速度和控制精度等要求外,执行机构—压下液压缸在外形尺寸上还受轧钢机牌坊窗口尺寸的约束,结构上还必须保证满足更换轧辊方便等要求。要设计一个好的控制系统,必须充分重视这些问题的解决。所以设计师应全面了解被控对象的工况,并综合运用电气、机械、液压、工艺等方面的理论知识,使设计的控制系统满足被控对象的各项要求。 明角设计系统的性能要求 1)被控对象的物理量:位置、速度或是力。 2)静态极限:最大行程、最大速度、最大力或力矩、最大功率。 3)要求的控制精度:由给定信号、负载力、干扰信号、伺服阀及电控系统零飘、非线性环节(如摩擦力、死区等)以及传感器引起的系统误差,定位精度,分辨率以及允许的飘移量等。 4)动态特性:相对稳定性可用相位裕量和增益裕量、谐振峰值和超调量等来规定,响应的快速性可用载止频率或阶跃响应的上升时间和调整时间来规定; 5)工作环境:主机的工作温度、工作介质的冷却、振动与冲击、电气的噪声干扰以及相应的耐高温、防水防腐蚀、防振等要求; 6)特殊要求;设备重量、安全保护、工作的可靠性以及其它工艺要求。 负载特性分析 正确确定系统的外负载是设计控制系统的一个基本问题。它直接影响系统的组成和动力元件参数的选择,所以分析负载特性应尽量反映客观实际。液压伺服系统的负载类型有惯性负载、弹性负载、粘性负载、各种摩擦负载(如静摩擦、动摩擦等)以及重力和其它不随时间、位置等参数变化的恒值负载等。 拟定控制方案、绘制系统原理图 在全面了解设计要求之后,可根据不同的控制对象,按表6所列的基本类型选定控制方案并拟定控制系统的方块图。如对直线位置控制系统一般采用阀控液压缸的方案,方块图如图36所示。图36 阀控液压缸位置控制系统方块图表6 液压伺服系统控制方式的基本类型伺服系统 控制信号 控制参数 运动类型 元件组成机液电液气液电气液 模拟量数字量位移量 位置、速度、加速度、力、力矩、压力 直线运动摆动运动旋转运动 1.阀控制:阀-液压缸,阀-液压马达2.容积控制:变量泵-液压缸;变量泵-液压马达;阀-液压缸-变量泵-液压马达3.其它:步近式力矩马达 动力元件参数选择 动力元件是伺服系统的关键元件。它的一个主要作用是在整个工作循环中使负载按要求的速度运动。其次,它的主要性能参数能满足整个系统所要求的动态特性。此外,动力元件参数的选择还必须考虑与负载参数的最佳匹配,以保证系统的功耗最小,效率高。 动力元件的主要参数包括系统的供油压力、液压缸的有效面积(或液压马达排量)、伺服阀的流量。当选定液压马达作执行元件时,还应包括齿轮的传动比。 供油压力的选择 选用较高的供油压力,在相同输出功率条件下,可减小执行元件——液压缸的活塞面积(或液压马达的排量),因而泵和动力元件尺寸小重量轻,设备结构紧凑,同时油腔的容积减小,容积弹性模数增大,有利于提高系统的响应速度。但是随供油压力增加,由于受材料强度的限制,液压元件的尺寸和重量也有增加的趋势,元件的加工精度也要求提高,系统的造价也随之提高。同时,高压时,泄漏大,发热高,系统功率损失增加,噪声加大,元件寿命降低,维护也较困难。所以条件允许时,通常还是选用较低的供油压力。 常用的供油压力等级为7MPa到28MPa,可根据系统的要求和结构限制条件选择适当的供油压力。 伺服阀流量与执行元件尺寸的确定 如上所述,动力元件参数选择除应满足拖动负载和系统性能两方面的要求外,还应考虑与负载的最佳匹配。下面着重介绍与负载最佳匹配问题。 (1)动力元件的输出特性 将伺服阀的流量——压力曲线经坐标变换绘于υ-FL平面上,所得的抛物线即为动力元件稳态时的输出特性,见图37。 图37 参数变化对动力机构输出特性的影响a)供油压力变化;b)伺服阀容量变化;c)液压缸面积变化 图中 FL——负载力,FL=pLA; pL——伺服阀工作压力; A——液压缸有效面积; υ——液压缸活塞速度, ; qL——伺服阀的流量; q0——伺服阀的空载流量; ps——供油压力。 由图37可见,当伺服阀规格和液压缸面积不变,提高供油压力,曲线向外扩展,最大功率提高,最大功率点右移,如图37a。 当供油压力和液压缸面积不变,加大伺服阀规格,曲线变高,曲线的顶点A ps不变,最大功率提高,最大功率点不变,如图37b。 当供油压力和伺服阀规格不变,加大液压缸面积A,曲线变低,顶点右移,最大功率不变,最大功率点右移,如图37c。 (2)负载最佳匹配图解法 在负载轨迹曲线υ-FL平面上,画出动力元件输出特性曲线,调整参数,使动力元件输出特性曲线从外侧完全包围负载轨迹曲线,即可保证动力元件能够拖动负载。在图38中,曲线1、2、3代表三条动力元件的输出特性曲线。曲线2与负载轨迹最大功率点c相切,符合负载最佳匹配条件,而曲线1、3上的工作点α和b,虽能拖动负载,但效率都较低。 (3)负载最佳匹配的解析法 参见液压动力元件的负载匹配。 (4)近似计算法在工程设计中,设计动力元件时常采用近似计算法,即按最大负载力FLmax选择动力元件。在动力元件输出特性曲线上,限定 FLmax≤pLA= ,并认为负载力、最大速度和最大加速度是同时出现的,这样液压缸的有效面积可按下式计算: (37) 图38 动力元件与负载匹配图形 按式37求得A值后,可计算负载流量qL,即可根据阀的压降从伺服阀样本上选择合适的伺服阀。近似计算法应用简便,然而是偏于保守的计算方法。采用这种方法可以保证系统的性能,但传递效率稍低。 (5)按液压固有频率选择动力元件 对功率和负载很小的液压伺服系统来说,功率损耗不是主要问题,可以根据系统要求的液压固有频率来确定动力元件。 四边滑阀控制的液压缸,其活塞的有效面积为 (38) 二边滑阀控制的液压缸,其活塞的有效面积为 (39) 液压固有频率ωh可以按系统要求频宽的(5~10)倍来确定。对一些干扰力大,负载轨迹形状比较复杂的系统,不能按上述的几种方法计算动力元件,只能通过作图法来确定动力元件。 计算阀控液压马达组合的动力元件时,只要将上述计算方法中液压缸的有效面积A换成液压马达的排量D,负载力FL换成负载力矩TL,负载速度换成液压马达的角速度 ,就可以得到相应的计算公式。当系统采用了减速机构时,应注意把负载惯量、负载力、负载的位移、速度、加速度等参数都转换到液压马达的轴上才能作为计算的参数。减速机构传动比选择的原则是:在满足液压固有频率的要求下,传动比最小,这就是最佳传动比。 伺服阀的选择 根据所确定的供油压力ps和由负载流量qL(即要求伺服阀输出的流量)计算得到的伺服阀空载流量q0,即可由伺服阀样本确定伺服阀的规格。因为伺服阀输出流量是限制系统频宽的一个重要因素,所以伺服阀流量应留有余量。通常可取15%左右的负载流量作为伺服阀的流量储备。 除了流量参数外,在选择伺服阀时,还应考虑以下因素: 1)伺服阀的流量增益线性好。在位置控制系统中,一般选用零开口的流量阀,因为这类阀具有较高的压力增益,可使动力元件有较大的刚度,并可提高系统的快速性与控制精度。 2)伺服阀的频宽应满足系统频宽的要求。一般伺服阀的频宽应大于系统频宽的5倍,以减小伺服阀对系统响应特性的影响。 3)伺服阀的零点漂移、温度漂移和不灵敏区应尽量小,保证由此引起的系统误差不超出设计要求。 4)其它要求,如对零位泄漏、抗污染能力、电功率、寿命和价格等,都有一定要求。 执行元件的选择 液压伺服系统的执行元件是整个控制系统的关键部件,直接影响系统性能的好坏。执行元件的选择与设计,除了按本节所述的方法确定液压缸有效面积A(或液压马达排量D)的最佳值外,还涉及密封、强度、摩擦阻力、安装结构等问题。 反馈传感器的选择 根据所检测的物理量,反馈传感器可分为位移传感器、速度传感器、加速度传感器和力(或压力)传感器。它们分别用于不同类型的液压伺服系统,作为系统的反馈元件。闭环控制系统的控制精度主要决定于系统的给定元件和反馈元件的精度,因此合理选择反馈传感器十分重要。 传感器的频宽一般应选择为控制系统频宽的5~10倍,这是为了给系统提供被测量的瞬时真值,减少相位滞后。传感器的频宽对一般系统都能满足要求,因此传感器的传递函数可近似按比例环节来考虑。 确定系统方块图 根据系统原理图及系统各环节的传递函数,即可构成系统的方块图。根据系统的方块图可直接写出系统开环传递函数。阀控液压缸和阀控液压马达控制系统二者的传递函数具有相同的结构形式,只要把相应的符号变换一下即可。 绘制系统开环波德图并确定开环增益 系统的动态计算与分析在这里是采用频率法。首先根据系统的传递函数,求出波德图。在绘制波德图时,需要确定系统的开环增益K。 改变系统的开环增益K时,开环波德图上幅频曲线只升高或降低一个常数,曲线的形状不变,其相频曲线也不变。波德图上幅频曲线的低频段、穿越频率以及幅值增益裕量分别反映了闭环系统的稳态精度、截止频率及系统的稳定性。所以可根据闭环系统所要求的稳态精度、频宽以及相对稳定性,在开环波德图上调整幅频曲线位置的高低,来获得与闭环系统要求相适应的K值。 由系统的稳态精度要求确定K 由控制原理可知,不同类型控制系统的稳态精度决定于系统的开环增益。因此,可以由系统对稳态精度的要求和系统的类型计算得到系统应具有的开环增益K。 由系统的频宽要求确定K 分析二阶或三阶系统特性与波德图的关系知道,当ζh和K/ωh都很小时,可近似认为系统的频宽等于开环对数幅值曲线的穿越频率,即ω-3dB≈ωc,所以可绘制对数幅频曲线,使ωc在数值上等于系统要求的ω-3dB值,如图39所示。由此图可得K值。 图39 由ω-3dB绘制开环对数幅频特性a)0型系统;b)I型系统 由系统相对稳定性确定K 系统相对稳定性可用幅值裕量和相位裕量来表示。根据系统要求的幅值裕量和相位裕量来绘制开环波德图,同样也可以得到K。见图40。 实际上通过作图来确定系统的开环增益K,往往要综合考虑,尽可能同时满足系统的几项主要性能指标。 系统静动态品质分析及确定校正特性 在确定了系统传递函数的各项参数后,可通过闭环波德图或时域响应过渡过程曲线或参数计算对系统的各项静动态指标和误差进行校核。如设计的系统性能不满足要求,则应调整参数,重复上述计算或采用校正环节对系统进行补偿,改变系统的开环频率特性,直到满足系统的要求。 仿真分析 在系统的传递函数初步确定后,可以通过计算机对该系统进行数字仿真,以求得最佳设计。目前有关于数字仿真的商用软件,如Matlab软件,很适合仿真分析。

正好我刚做好了,过两天也要交了,论文,仿真,还有PPt,不是一个学校的话可以发给你QQ1255324803

天下没有免费的午餐

电子密码门锁毕业论文

新款的单片机都可以设置密码

电子密码锁摘要 本文的电子密码锁利用数字逻辑电路,实现对门的电子控制,并且有各种附加电路保证电路能够安工作,有极高的安全系数。关键词 电子密码锁 电压比较器 555单稳态电路 计数器 JK触发器 UPS电源。1 引言随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。设计本课题时构思了两种方案:一种是用以AT89C2051为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。考虑到单片机方案原理复杂,而且调试较为繁琐,所以本文采用后一种方案。

基于EDI的电子征税系统应用探讨 【论文摘要】作为电子化贸易工具的EDI技术已相当成熟,将其用于电子征税发挥了其安全可靠、数据从计算机到计算机自动传输不需人工介入操作等优点。本文对基于EDI的电子征税系统进行了探讨,提出了自己的一些看法。 1.1 EDI的定义 EDI(Electronic Data Interchange,电子数据交换)是20世纪80年代发展起来的一种新颖的电子化贸易工具,是计算机、通信和现代化管理相结合的产物。国际标准化组织(ISO)对EDI的定义是:“为商业或行政事务处理,按照一个公认的标准,形成结构化的事务处理或消息报文格式,从计算机到计算机的数据传输方法。”通俗地讲,就是标准化的商业文件在计算机之间从应用到应用的传送。EDI是企业单位之间的商业文件数据传输,传输的文件数据采用共同的标准和固定格式,其所通过的数据通信网络一般是增值网和专用网,数据是从计算机到计算机自动传输,不需人工介入操作。 1.2 EDI的组成元素 EDI有3个基本组成要素:通信网络、计算机硬件和专用软件组成的应用系统以及报文标准。通讯网络是实现EDI的基础,可利用公用电话交换网、分组交换网以及广域网、城域网和局域网来建立EDI的增值网络。计算机应用系统是实现EDI的前提,该应用系统是由EDI用户单位建立的,其硬件由PC机(服务器)、调制解调器等组成,软件由转换软件、翻译软件、通信软件等组成。转换软件将计算机系统的文件转换为翻译软件能理解的中间文件,或将翻译软件接受的中间文件转换成计算机系统的文件;翻译软件将中间文件翻译成EDI的标准格式,或将后者翻译成前者;通信软件将要发送的EDI标准格式文件外层加上通信信封,送到EDI交换中心信箱,或从信箱将接受的文件取回,计算机应用系统能将EDI传送的单证等经济信息进行自动处理。EDI报文必须按照国际标准进行格式化,目前应用最广泛的EDI国际标准是UN/EDIFACT标准。 EDI接入如图1所示。 1.3 EDI的工作过程 EDI的工作过程为:你的应用系统产生一个文件,例如报税单,EDI翻译器自动将报税单转换成征纳税双方同意的EDI标准格式,通信部分上增值网进行发送,网络进行一系列的合法性和数据完整性检查,将其放入EDI中心的相应邮箱里,税收征收机关上网取出邮箱里的信件,EDI翻译器将信封里的数据从标准格式转换成内部应用系统可读的格式进行处理,从而实现电子报税。 2 基于EDI的电子征税系统 2.1 电子征税系统 税务征纳电子化的总体发展方向是形成以电子报税为主,其他申报方式为辅的格局。电子征税包括电子申报和电子结算2个环节。电子申报指纳税人利用各自的计算机或电话机,通过电话网、分组交换网、Internet等通讯网络系统,直接将申报资料发送给税务征收机关,从而实现纳税人不必亲临税务机关,即可完成申报的一种方式;电子结算指国库根据纳税人的税票信息,直接从其开户银行划拨税款的过程。第1个环节解决了纳税人与税务部门间的电子信息交换,实现了申报无纸化;第2个环节解决了纳税人、税务、银行及国库间电子信息及资金的交换,实现了税款收付的无纸化。 2.2 EDI征纳税系统工作流程 EDI的应用领域非常广泛,涵盖工业、商业、外贸、金融、保险、运输、政府机关等,而EDI在税务系统的应用推进了税务处理电子化的进程。 电子报税流程如图2所示。 EDI征税系统工作流程如下: (1)纳税人通过计算机按一定格式将申报表填写好,并由计算机进行自动逻辑审核后,利用电话网或分组网,通过邮电局主机发往税务局邮箱; (2)税务局主机收到申报表后进行处理,发回执并开出缴款书; (3)纳税户通过邮箱系统收取回执和缴款书,了解税款划拨结果; (4)国库处收到缴款书后,按缴款书内容通知银行划款;银行收到缴款书后进行划款,将划款结果返回国库,并通过国库返回税务局。 2.3 EDI电子征税的优势 利用EDI实现电子报税,有利于实现税收征管现代化。可以节省时间,提高工作效率,消除纸面作业和重复劳动,改善对客户的服务。EDI意味着更准确地实现数据标准化及计算机自动识别和处理,消除人工干预和错误,减少了人工和纸张费用。 3 我国电子征税的现状和几点看法 发展电子税务是中国政府实施信息化的一项重大工程。国家税务总局实施的“金税工程”通过计算机网络已初步实现对企业增值税发票和纳税状况的严密监控。目前全国区县级国税局已配备了低档认证子系统,专门对百万元版、十万元版和部分万元版增值税专用发票进行认证,计算机稽核软件和发票协查软件也已开发完成并正在部分地区试运行,国家税务总局已完成了与北京等九省市国税系统的四级(总局、省局、地市局和县级局)网络建设,其他省区网络建设和全国稽核设备配备工作正在准备中。 应该看到国家发展电子税务的决心。在实施的过程中,笔者认为,应注意以下几点: (1)重视税务部门工作人员计算机应用能力的培养。为了适应电子税务的需要,税务部门工作人员除了要具有专业知识,还应掌握计算机应用知识,要分期分批进行培训。尤其是区县级以及比较偏远落后地区,在网络建设的同时,就应对其工作人员进行计算机知识的培训。将计算机的应用能力作为上岗的一个条件。 (2)由于电子税务作为电子政务的一个组成部分,所以,在构建电子税务系统的时候,在思想上要有全局观念、发展的眼光,要考虑未来与电子政务平台的整合问题,防止 构建一个封闭的系统。 (3)将具有标准性的EDI与具有普遍性的Internet相结合,建立互联网EDI,缴税人员可在家里或办公室利用浏览器从Web上填写税表进行有关电子商务,简单方便,免去在徼税大厅排队之苦。 互联网EDI对于纳税户来讲,基本上是零安装、零维护,不必额外投资,费用低。而对税务部门来讲,采用互联网EDI报税可使税表以电子文件的模式通过电子商务网送达税务部门,提高了工作效率,减轻了税务部门工作量,方便了税户,缩短了报税时间。电子化的税务表格可以直接进入数据库,无需税务部门进行人工输入,减轻了工作量,减少了人为错误;互联网EDI报税系统通过电子报文审查功能可自动识别税户错填、漏填项目,不允许带有这类人为错误的报文进行传送,减轻了税务部门的检查、校对工作,提高了工作效率。 (4)应重视电子征税的宣传工作,使广大纳税户积极参与到电子纳税的行列中来。 4结语 总之,电子征纳税是税收征管现代化的要求,是社会经济发展的必然趋势。而作为实现电子征税的EDI技术,必将和Internet技术相结合,使互联网成为EDI信息的传输媒体。通过互联网EDI进行电子征税,是电子征税的发展方向。 参考文献 〔1〕 http://www.ctax.com.cn/fask/20011126213203.htm 〔2〕 http://www.e-works.net.cn/jcjs/ia24.htm [3] /examples/tax.htm 〔4〕 http://202.104.84.84/edi/edi/App4.HTML 〔5〕 龚炳铮.EDI与电子商务〔M〕.北京:清华大学出版社,1999.

程序设计内容

(1). 密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。

(2). 密码的输入问题:  由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。

(3).按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。

C语言源程序

#include unsigned char code ps[]={1,2,3,4,5};

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,                               

0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

unsigned char pslen=9; unsigned char templen;

unsigned char digit; unsigned char funcount;

unsigned char digitcount;

unsigned char psbuf[9];

bit cmpflag;

bit hibitflag;

bit errorflag;

bit rightflag;

unsigned int second3;

unsigned int aa;

unsigned int bb;

bit alarmflag;

bit exchangeflag;

unsigned int cc;

unsigned int dd;

bit okflag;

unsigned char oka;

unsigned char okb;

void main(void)

{  

unsigned char i,j;  

P2=dispcode[digitcount];  

TMOD=0x01;  

TH0=(65536-500)/256;  

TL0=(65536-500)%6;  

TR0=1;  

ET0=1;  

EA=1;  

while(1)   

  {      

if(cmpflag==0)        

{          

if(P3_6==0) //function key           

  {              

for(i=10;i>0;i--)              

for(j=248;j>0;j--);      

         if(P3_6==0)                

{                

   if(hibitflag==0)       

              {     

                  funcount++;  

                     if(funcount==pslen+2)

                        {  

                         funcount=0;

                          cmpflag=1;

                         }

                       P1=dispcode[funcount];

                    }

                    else

                      {

                         second3=0;

                      }  

                 while(P3_6==0);

                }

            }

          if(P3_7==0) //digit key

            {

              for(i=10;i>0;i--)

              for(j=248;j>0;j--);

              if(P3_7==0)

                {

                  if(hibitflag==0)

                    {

                      digitcount++; 

                  if(digitcount==10)

                        {

                          digitcount=0;

                        }

                      P2=dispcode[digitcount];

                      if(funcount==1)

                        {

                          pslen=digitcount;                          

templen=pslen;

                        }

                        else if(funcount>1)

                          {  

                           psbuf[funcount-2]=digitcount;

                          }

                    }

                    else

                      {

                        second3=0;

                      }

                  while(P3_7==0);

                }

            }

        }  

       else

          {

            cmpflag=0;

            for(i=0;i

              {  

               if(ps[i]!=psbuf[i])

                  {

                    hibitflag=1;

                    i=pslen;

                    errorflag=1;

                    rightflag=0;

                    cmpflag=0;

                    second3=0;

                    goto a;  

                 }

              }   

          cc=0;  

           errorflag=0;  

           rightflag=1;

            hibitflag=0;

a:   cmpflag=0;

          }

}

}

void t0(void)

interrupt 1 using 0 {   TH0=(65536-500)/256;  

TL0=(65536-500)%6;  

if((errorflag==1) && (rightflag==0))  

{

      bb++;

      if(bb==800)

        {

          bb=0;

          alarmflag=~alarmflag;

        }

      if(alarmflag==1)

        {

          P0_0=~P0_0;

        }

      aa++;

      if(aa==800)

        {

          aa=0;

          P0_1=~P0_1;

        }

      second3++;

      if(second3==6400)

        {

          second3=0;

          hibitflag=0;

          errorflag=0;

          rightflag=0;

          cmpflag=0;

          P0_1=1;  

         alarmflag=0;

          bb=0;  

         aa=0;  

       }

    }

  if((errorflag==0) && (rightflag==1))

    {

      P0_1=0;

      cc++;

      if(cc<1000)

        {

          okflag=1;

        }

        else if(cc<2000)

          {

            okflag=0;

          }

          else

            {

              errorflag=0;

              rightflag=0;

              hibitflag=0;

              cmpflag=0;

              P0_1=1;

              cc=0;  

             oka=0;

              okb=0;

              okflag=0;  

             P0_0=1;  

           }

      if(okflag==1)

        {  

         oka++;  

         if(oka==2)

            {

              oka=0;

              P0_0=~P0_0;

            }

        }

        else

          {

            okb++;

            if(okb==3)

              {

                okb=0;

                P0_0=~P0_0;

              }  

         }

    }

}

  • 索引序列
  • 基于单片机的电子密码锁毕业论文
  • 单片机密码锁论文外文文献
  • 密码电子锁毕业论文
  • 基于单片机电子秤毕业论文
  • 电子密码门锁毕业论文
  • 返回顶部