单片机课程设计

时间:2019-05-15 09:40:17下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《单片机课程设计》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《单片机课程设计》。

第一篇:单片机课程设计

分类号

编号

烟 台 大 学

课 程 设 计

基于单片机8051的密码锁控制

系:

机电学院

业:

机械设计制造及其自动化

名:

号:

2010年月 6 日

0

目录

第一章:引言·················2 第二章:方案设计···············3

1、方案论证与比较 ············3

2、单片机8051·············· 4 第三章:电路原理分析与设计··········7

1、开锁机构 ···············7

2、按键电路及LCD设计 ··········7

3、掉电存储单元设计 ···········14

4、密码锁电源电路设计 ··········14

5、设计总框图 ··············16

6、整体程序设计和程序流程图 ·······16

第四章:程序设计 ··············17

第五章:调试、测试分析及结果 ········35 第六章:小结 ················35 参考文献 ·················36

第一章、引言

目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着cmos化、低功耗、大容量、高性能、低价格和外围电路内装化等方向发展。下面是单片机的 主要发展方向

今年,由于chmos技术的进步,大大的促进了单片机的cmos化。Cmos除了低功耗外,还具有功耗的可控性,使单片机可以工作在功耗精细管理状态。Cmos电路的特点是低功耗、大容量、高性能、低价格。采用双极型半导体工艺的ttl电路速度快、但功耗低和芯片面积大。

单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。以前必须由模拟电路或数字电路实现的大部分功能,现在可以用单片机通过软件方法来实现。这种软件代替硬件的控制技术也称为传统控制的一次革命

单片机自二十世纪七十年代问世以来,以其极高的性能价格比受到人们的重视和关注,应用广泛,发展快。由于其的优点多而突出,所以其的应用领域极广,几乎到了无孔不入的地步。在我国广泛的应用于工业自动化控制、自动检测、智能仪表、智能家用电器、航空航天系统和国防军事、尖端武器等各个方面。可以采用软硬件结合的办法提高系统的性能的控制技术为微控技术。

LCD 液晶显示器是 Liquid Crystal Display 的简称,是20世纪70年代初发展起来的一种液晶显示器。随着技术的发展其的分辨率、屏幕发光颜色等进入批量化合实用化。

随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。

第二章:设计方案

本次设计我组采用液晶显示lcd,按键采用4*4键盘矩阵、8051单片机。本系统由单片机系统、矩阵键盘、lcd显示和报警系统。系统可以完成开锁、密码错误报警、修改用户密码、管理员解密基本的密码锁功能。除上述功能,还应具有掉电存储,声光提示等功能。依据实际情况还可以添加遥控功能。本系统成本低廉,功能可靠实用。

设计本课题时构思了两种方案:一种是用以8051为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。考虑到数字电路方案原理过于简单,而且不能满足现在的安全需求,所以本文采用前一种方案。

1、方案论证与比较

方案一:采用数字电路,其原理方框图如图1

图2-1 数字密码锁电路方案

采用数字密码锁电路的好处就是设计简单。用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若输入密码错误报警防止他人的非法操作。电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。

密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路。方案二:采用一种是用以8051为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声 3

光提示甚至添加遥控控制功能。其原理如图1-2所示。

图2-2单片机控制方案

通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。

2、单片机8051 1>、芯片8051有40条引脚,共分为端口线、电源线和控制线三类 ·4并行I/O端口,每个端口有8条端口线,用于传送数据、地址。·可编程串行通道

·5个中断源

·低功耗的闲置和掉电方式 ·两个16位定时器、计数器 ·片内振荡器和时钟脉冲 ·4K内部RoM ·128内部RaM

2>、管脚说明

1)、、主电源引脚VCC和VSS VCC——(40脚)接+5V电压; VSS——(20脚)接地。

2)、外接晶体引脚XTAL1和XTAL2 XTAL1(19脚)接外部晶体的一个引脚。在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。当采用外部振荡器时,对HMOS单片机,此引脚应接地;对CHMOS单片机,此引脚作为驱动端。

XTAL2(18脚)接外晶体的另一端。在单片机内部,接至上述振荡器的反相放大器的输出端。采用外部振荡器时,对HMOS单片机,该引脚接外部振荡器的信号,即把外部振荡器的信号直接接到内部时钟发生器的输入端;对XHMOS,此引脚应悬浮。

3)、控制或与其它电源复用引脚RST/VPD、ALE/PROG、PSEN和EA/VPP ①RST/VPD(9脚)当振荡器运行时,在此脚上出现两个机器周期的高电平将使单片机复位。推荐在此引脚与VSS引脚之间连接一个约8.2k的下拉电阻,与VCC引脚之间连接一个约10μF的电容,以保证可靠地复位。VCC掉电期间,此引脚可接上备用电源,以保证内部RAM的数据不丢失。当VCC主电源下掉到低于规定的电平,而VPD在其规定的电压范围(5±0.5V)内,VPD就向内部RAM提供备用电源。

②ALE/PROG(30脚):当访问外部存贮器时,ALE(允许地址锁存)的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE端仍以不变的频率周期性地出现正脉冲信号,此频率为振荡器频率的1/6。因此,它可用作对外输出的时钟,或用于定时目的。然而要注意的是,每当访问外部数据存储器时,将跳过一个ALE脉冲。ALE端可以驱动(吸收或输出电流)8个LS型的TTL输入电路。

对于EPROM单片机(如8751),在EPROM编程期间,此引脚用于输入编程脉冲(PROG)。

③PSEN(29脚):此脚的输出是外部程序存储器的读选通信号。在从外部程序存储器取指令(或常数)期间,每个机器周期两次PSEN有效。但在此期间,每当访问外部数据存储器时,这两次有效的PSEN信号将不出现。PSEN同样可以驱动(吸收或输出)8个LS型的TTL输入。

④EA/VPP(引脚):当EA端保持高电平时,访问内部程序存储器,但在PC(程序计数器)值超过0FFFH(对851/8751/80C51)或1FFFH(对8052)时,将自动转向执行外部程序存储器内的程序。当EA保持低电平时,则只访问外部程序存储器,不管是否有内部程序存储器。对于常用的8031来说,无内部程序存储器,所以EA脚必须常接地,这样才能只选择外部程序存储器。

对于EPROM型的单片机(如8751),在EPROM编程期间,此引脚也用于施加21V的编程电源(VPP)。

4)、输入/输出(I/O)引脚P0、P1、P2、P3(共32根)

①P0口(39脚至32脚):是双向8位三态I/O口,在外接存储器时,与地址总线的低8位及数据总线复用,能以吸收电流的方式驱动8个LS型的TTL负载。

②P1口(1脚至8脚):是准双向8位I/O口。由于这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向I/O口。P1口能驱动(吸收或输出电流)4个LS型的TTL负载。对8052、8032,P1.0引脚的第二功能为T2定时/计数器的外部输入,P1.1引脚的第二功能为T2EX捕捉、重装触发,即T2的外部控制端。对EPROM编程和程序验证时,它接收低8位地址。

③P2口(21脚至28脚):是准双向8位I/O口。在访问外部存储器时,它可以作为扩展电路高8位地址总线送出高8位地址。在对EPROM编程和程序验证期间,它接收高8位地址。P2可以驱动(吸收或输出电流)4个LS型的TTL负载。

④P3口(10脚至17脚):是准双向8位I/O口,在MCS-51中,这8个引脚还用于专门功能,是复用双功能口。P3能驱动(吸收或输出电流)4个LS型的TTL负载。作为第一功能使用时,就作为普通I/O口用,功能和操作方法与P1口相同。

作为第二功能使用时,各引脚的定义如表所示。

值得强调的是,P3口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。表 P3各口线的第二功能定义

口线 引脚 第二功能

P3.0 10 RXD(串行输入口)P3.1 11 TXD(串行输出口)P3.2 12 INT0(外部中断0)P3.3 13 INT1(外部中断1)

P3.4 14 T0(定时器0外部输入)P3.5 15 T1(定时器1外部输入)P3.6 16 WR(外部数据存储器写脉冲)P3.7 17 RD(外部数据存储器读脉冲)

2>、MCS-51单片机的片外总线结构

综合上面的描述可知,I/O口线都不能当作用户I/O口线。除8051/8751外真正可完全为用户使用的I/O口线只有P1口,以及部分作为第一功能使用时的P3口。如图,是MCS-51单片机按引脚功能分类的片外总线结构图。

由图我们可以看到,单片机的引脚除了电源、复位、时钟接入,用户I/O口外,其余管脚是为实现系统扩展而设置的。这些引脚构成MCS-51单片机片外三总线结构,即:

①地址总线(AB):地址总线宽为16位,因此,其外部存储器直接寻址为64K字节,16位地址总线由P0口经地址锁存器提供8位地址(A0至A7);P2口直接提供8位地址(A8至A15)。

②数据总线(DB):数据总线宽度为8位,由P0提供。

③控制总线(CB):由P3口的第二功能状态和4根独立控制线RESET、EA、ALE、PSEN组成。下表列出各个子系列的配制情况供读则参考。

芯片种类 片内存储器 中断源 定时/计数器 串行口 电源消耗(mA)制造工艺 ROM/EPROM RAM 8051(8751,8031)4K 128 5 2 同、异步方式,8位或10位可程序控制 125 HMOS 8052(8752,8032)8K 256 6 3 同、异步方式,8位或10位可程序控制 100 HMOS 80C51(87C51,80C31)4K 128 5 2 同、异步方式,8位或10位可程序控制 24 CHMOS 80C52(87C52,80C32)8K 256 7 3 同、异步方式,8位或10位可程序控制 24 CHMOS 8044(8744,8344)4K 192 5 2 S.L.U 200 HMOS 3>、控制部件

控制部件是单片机的神经中枢,它包括时钟电路、复位电路、指令寄存器、译码以及信息传送控制部件。它以主振频率为基准发出CPU的时序,对指令进行译码,然后发出各种控制信号,完成一系列定时控制的微操作,用来控制单片机各部分的运行。其中有一些控制信号线能简化应用系统外围控制逻辑,如控制地址锁存的地址锁存信号ALE,控制片外程序存储器运行的片内外存储器选择信号EA,以及片外取指信号PSEN

第二章、电路原理分析与设计

1、开锁机构

通过单片机送给开锁执行机构,电路驱动电磁锁吸合,从而达到开锁的目的。其原理如图2-1所示。密码锁开锁机构示意图如下图:

图3-1密码锁开锁机构示意图

当用户输入的密码正确输入的时,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的。其实际电路如下图3-2所示。

2、按键电路设计

1、键盘应用4x4组成的0-9数字键及确认键和功能键。用LCD液晶显示器显示,当密码输入时直接显示,当密码输入完毕按下确认键时对输入的密码和设定的密码比较,若正确则开门,此处用led发光二极管做一秒种提示,同时发出“叮咚”声;若不正确,则发出“滴滴”报警声。

键盘设计采用行列式键盘,同事可以减少键盘与单片机接口时占用的I/O线的数目,在按键比较多的时候通常采用该方法。其原理图如图3-3

每一条行线与列线的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可以组成NXM个按键的键盘

在该行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。

当确认有按键按下后,下一步要识别哪个按键按下。对按键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是先反转法。应要求我们采用第一种方案。

逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。

1>、判断键盘中有无键按下 将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。

2>、判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

按键的操作面板如图3-4所示,共计数字键10个,功能键6个,另外有指示灯一个、LCD液晶显示器一个和蜂鸣器一个。

图3-4按键操作面板示意图

10个数字键用来输入密码,另外六个功能键分别是:CLRE、EN、A、B、F1、F2。其中CLR键的功能是当输入密码错误时,清除前面输入的数据,从新输入。EN键的功能是确认密码。A设置新密码B输入数字密码并检查。F1用作电铃键,F2用来关闭显示器。

2、LCD显示器的基本结构和原理

2>、LCD显示电路d3d2d19LED09LED19LED29LED39LED49bcpbcpbcpbcpbcpbcpYdYdYdYdYdYdPagPagPagPagPagPagDdDdDdDdDdDdfefefefefefeppppppabcdefgdabcdefgdabcdefgdabcdefgdabcdefgdabcdefgdHEADER2vcc***************456111***56111***56111134561111HEADER***6701234567QQQQQQQQIC1QQQQQQQQIC2QQQQQQQQIC***6701234567QQQQQQQQIC4QQQQQQQQIC5QQQQQQQQ12KKKKKKLRLRLRLRLRLRABCMABCMABCMABCMABCMABCM***912891289C

IC6LED5

LCD模组是由控制器,驱动器,显示器三部份所组成,而目前市面上LCD的模组驱动/控制器都是由日制的HD44780控制器晶片(或是相容产品),因此外部接脚的功能也都相同,这个控制器的内部共有80 个位元组可供储存由外部送进来的资料,因此使用此款控器的LCD模组最多一次可显示80个字HD44780中储存显示资料的80个位元组,称之为Display DataRAM(DDRAM),DDRAM 的位址从00H~67H,共80个Byte。在LCD 上Show 出资料DDRAM 位址与可供显示位置的对应图

至于CPU 如何将资料送给LCD 显示的方法,是将欲显示的字元的ASCII 码写到LCD内部的DDRAM,LCD就会将这个自在其对应的位置显示出来.例如,若想在LCD 的左上角处(位址00h),显示’A’.就将ASCII码-41H,送到DDRAM 的00H 位址.例:

第二节 LCD 的接脚规格

虽然LCD 的接脚因制造厂商的不同而排列方式有所不同,不过都是编号由1 至14,的14 根接脚。

LCD 模组内只有2 个8 位元暂存器,称为指令暂存器(Instruction Register IR),和资料暂存器(Data Register, DR),他们都是8 位元暂存器,由RS 脚来选 用

指令暂存器IR 用来接收单片机送来的命令,例如清除显示,或功能设定等等…资料暂存器DR则用来接收单片机要写到DDRAM(共80Byte)或CGRAM(共64Byte)的资料缓冲区。当单片机写到DR 暂存器之后。LCD 内部的控制电路会将资料自动写到DD RAM或 CG RAM中,而位址是由LCD内部的位址计数器(Address CounterAC)所指定。而单片机要读取资料时,需先将欲读取的位址放入IR 暂存器中,LCD 就会将其内容放入DR中,然后单片机就可以去读取DR 的资料。

图表、LCD 模组写入时序

图表、LCD 模组读出时序图

3、掉电存储单元设计

掉电存储单元的作用是在电源断开的时候,存储当前设计的单价信息。AT24C02是ATMEL公司的2KB字节的电源可檫除存储芯片,采用两线串行的总线和单片机通讯,电压 14

最低可为2.5V,额定电流为1mA,静态电流10UA,芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装。如图3-5示

图3-5 掉电存储单元电路原理图

图中R8、R10是上拉电阻,其作用是减少AT24C02的静态功耗,由于AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA(数据、地址)与单片机传送。

每当设定一次掉电,系统自动调用存储程序,将信息存储在芯片内;当系统重新上电时自动调用读存储器程序,将存储器中的信息读到缓存单元中,供主程序使用。

4、密码锁电源电路设计

为防止停电情况的发生,本电路备有UPS电源,它包含市电供电电路,停电检测电路,电子开关切换电路,蓄电池充电电路和蓄电池组成。电源电路图如图示

图3-6市供电电路

220V市电通过变压器降压成12V的交流电,再经整流桥式整流,7805稳压到5V送往电子切换电路,由于本电路功耗少,所以选10W的小型变压器。

由R6、R7、R8、R9及IC14构成比较电压器,正常情况下,V+V-IC14输出高电平,由T3、T4构成的达林顿管使继电器J开启,将其常开触点把蓄电池和电路相连,实现市电与蓄电池的切换,保证电子密码锁的正常工作。电路图如3-7所示

图3-7停电检测及电子开关切换电路

T1、T2构成的蓄电池自动充电电路,其在充电池充满后自动停止充电,其中D1亮为正在充电,D2为工作指示。其电路图如图3-8所示

5、总框图设计

6、整体程序设计和程序流程图

1>、程序分为主程序和中断服务程序两个主要部分,主程序完成变量和单片机特殊功能寄存器的初始化后,进入一个循环结构。在循环中,首先判断有无按键按下,若有则判断是数字键还是功能键,根据按键的情况执行相应的功能。然后根据密码是否正确的判断情况,执行相应的操作。循环中最后需要显示的内容通过动态扫描子在液晶显示器上显示。中断服务程序需要实现待机计时5秒。

单片机采用MCS51系列的单片机8051作为主要主控制器,外围电路器件包括液晶显示驱动、蜂鸣器的驱动输出、独立式键盘和发光二极管的输出等。

2>、程序主要包括以下几个模块

1)、主程序模块——主要完成初始化、设置中断向量、检查有无按键按下、以及调用显示等等。

2)、键盘扫描及识别子程序——键盘采用查询方式,放于主程序中,当没有按键按下时,单片机循环主程序,当按键按下时便转向相应的子程序处理,处理结束后返回。

3)、掉电存储服务程序——当比较密码的时候,需要读取AT24C02程序,将存储于芯片内的数据读到RAM中,然后和输入密码相比较,当修改密码时需要把密码保存于AT24C02中。

4)、显示子程序——包括关闭状态显示子程序(dis-A)、开锁状态显示子程序(DIS-B)、密码输入及修改状态显示子程序(DIS-C)、密码输入错误报警状态子程序(DIS-D).3、程序流程图

第四章、程序设计

1#include #define uint unsigned int #define uchar unsigned char void key_scan();uchar count0,count1,count3,num,n=0,temp,a,j,count4;uchar mima[4];

//初始密码存储区 uchar tab_key[50];

//输入密码存储区 uchar code table[]={

0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};bit enterflag;

//确认键按下与否的标志 bit mimaflag;

//密码正确与否的标志 bit xiugaiflag;

//修改密码标志

bit enter1flag;

//修改密码确认键标志

sbit red=P3^7;sbit bell=P3^6;sbit rs=P2^0;sbit rw=P2^1;sbit lcden=P2^2;sbit alarm_out=P3^2;sbit scl=P3^4;sbit sda=P3^5;uchar code table1[]=“input the passco”;uchar code table2[]=“de:

--------”;uchar code table3[]=“*”;uchar code table4[]=“right

(^_^)

”;uchar code table5[]=“error!!”;uchar code table6[]=“define the passc”;uchar code table7[]=“ode:

--------”;uchar code table8[]=“code

is

new”;//******************************键盘消抖函数******************************* void delay1(){;;} void delay2(uchar x){ uchar a,b;for(a=x;a>0;a--)

for(b=100;b>0;b--);}

void delay(uint z){ uint x,y;for(x=z;x>0;x--)

for(y=110;y>0;y--);}

//****************************e^2room的初始化*******************************

void start()//开始信号 {

sda=1;delay1();scl=1;delay1();sda=0;delay1();}

void stop()

//停止 { sda=0;delay1();scl=1;delay1();sda=1;delay1();} //****************************应答信号************************************* void respond()

{ uchar i;scl=1;delay1();while((sda==1)&&(i<250))i++;scl=0;delay1();} //*****************************写字节操作函数********************************** void write_byte(uchar date){ uchar i,temp;temp=date;for(i=0;i<4;i++){

temp=temp<<1;

//保持最高位,左移到进位CY

scl=0;

delay1();

sda=CY;

delay1();

scl=1;

delay1();} scl=0;delay1();sda=1;//总线释放

delay1();} //*******************************读字节操作函数***************************** uchar read_byte(){ uchar i,k;scl=0;delay1();sda=1;delay1();for(i=0;i<4;i++){

scl=1;

delay1();

k=(k<<1)|sda;

//或运算,放到最低位

scl=0;

delay1();

} return k;} //**********************************写地址函数****************************** void write_add(uchar address,uchar date){ start();write_byte(0xa0);respond();write_byte(address);respond();write_byte(date);respond();stop();} //*******************************读地址函数************************************* uchar read_add(uchar address){ uchar date;start();

write_byte(0xa0);respond();write_byte(address);respond();start();write_byte(0xa1);respond();date=read_byte();stop();return date;} //****************************LCD1602的初始化******************************* void write_com(uchar com){ rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}

void write_date(uchar date){ rs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}

//***************************************密码比较函数******************************** bit mimacmp()

{ bit flag;uchar i;for(i=0;i<4;i++)

{

if(mima[i]==tab_key[i])

flag=1;

else

{

flag=0;

i=4;

}

} return(flag);

//返回flag }

////**********************************LCD显示函数开始************************************** void lcd_display(){ uchar i=0;write_com(0x80+0x40+4);for(i=0;i

//****************************************键盘功能分配函数群开始**************************** //** 0 ** 1 **2 ** 3**

//** 4** 5** 6 **7 ** //**8** 9** 确认(en)

//**清除(clr)**修改密码键(a)

void key_manage1(){ tab_key[n]=0;n++;if(xiugaiflag==1){ mima[count4]=0;count4++;} } void key_manage2(){

tab_key[n]=1;n++;if(xiugaiflag==1){ mima[count4]=1;count4++;} }

void key_manage3(){

tab_key[n]=2;n++;if(xiugaiflag==1){ mima[count4]=2;count4++;} }

void key_manage4(){ tab_key[n]=3;n++;if(xiugaiflag==1){ mima[count4]=3;count4++;} }

void key_manage5(){ tab_key[n]=4;n++;if(xiugaiflag==1){ mima[count4]=4;count4++;} }

void key_manage6(){ tab_key[n]=5;n++;if(xiugaiflag==1){ mima[count4]=5;count4++;} } void key_manage7(){ tab_key[n]=6;n++;if(xiugaiflag==1){ mima[count4]=6;count4++;} } void key_manage8(){ tab_key[n]=7;n++;if(xiugaiflag==1){ mima[count4]=7;count4++;} }

void key_manage9(){ tab_key[n]=8;n++;if(xiugaiflag==1){ mima[count4]=8;

count4++;} } void key_manage10(){ tab_key[n]=9;n++;if(xiugaiflag==1){ mima[count4]=9;count4++;} } //**********************************确认键**************************************************************

void key_manage11(){ enterflag=1;

//确认键按下

if(n==4)

//只有输入4个密码后按确认才做比较

mimaflag=mimacmp();else

mimaflag=0;

if(enterflag==1)

{

enterflag=0;

n=0;

//用FFFF清除已经输入的密码

for(count3=0;count3<4;count3++)

{

delay(5);

tab_key[count3]=0x0f;

}

TR1=1;

//打开计数器1

count1=0;

//定时器1由50MS累计到1S所用的计数器

if(mimaflag==1)

{

a=0;

write_com(0x01);

write_com(0x80);

for(count3=0;count3<16;count3++)

{

write_date(table4[count3]);//密码正确,显示RIGHT,绿灯亮

delay(5);

}

}

else

{

n=0;

red=0;

bell=0;

a++;

if(a==1)

{

for(count3=0;count3<8;count3++)//ffffffff清除密码

{

delay(5);

tab_key[count3]=0x0f;

}

write_com(0x01);

write_com(0x80);

for(count3=0;count3<16;count3++)

{

write_date(table5[count3]);//密码错误,显示

error,红灯亮

{ alarm_out=0;//报警灯亮

pw_error=0;//密码错误指示灯亮

audio_out=0;//长鸣声报警

delay(60000);

delay(60000);

delay(60000);

delay(60000);

delay(60000);

delay(60000);

delay(60000);

delay(60000);

delay(60000);

audio_out=1;

//-------------

TR1=1;

//打开定时器计时

cnt_state=2;//下一状态处于15秒计时的状态

}

delay(5);

}

TR1=0;

}

} } } void key_manage12(){ tab_key[n]=11;n++;

//密码计数清零

} //****************************************************取消键********************************************

void key_manage13(){

n=0;

//密码计数清零

write_com(0x80);

//指针所指位置 for(count3=0;count3<16;count3++){ write_date(table1[count3]);//第一行显示INPUT THE PASSPORD: delay(5);} write_com(0x80+0x40);for(count3=0;count3<16;count3++){ write_date(table2[count3]);//开机显示--------delay(5);tab_key[count3]=0x0f;

//用FFFF清楚已经输入的密码 }

} //*******************************************修改密码键********************************** void key_manage14(){ uchar aa=0;n=0;xiugaiflag=1;

write_com(0x01);write_com(0x80);for(count3=0;count3<16;count3++){ write_date(table9[count3]);//显示define the password delay(5);tab_key[count3]=0x0f;

//用FFFF清楚已经输入的密码 } write_com(0x80+0x40);for(count3=0;count3<16;count3++){ write_date(table10[count3]);//显示--------delay(5);} TR0=1;} //******************************************修改密码键的确认键******************************** void key_manage15(){ n=0;enter1flag=1;if(enter1flag==1){ enter1flag=0;count4=0;for(count3=0;count3<16;count3++){ tab_key[count3]=0x0f;

//用FFFF清楚已经输入的密码

} write_com(0x01);write_com(0x80);for(count3=0;count3<16;count3++){

write_date(table11[count3]);

delay(100);} TR1=1;count1=0;} } void key_manage16()

{ tab_key[n]=15;n++;}

//****************************************定时器1的50MS,共延时1秒***************************** void time_1()interrupt 3 {

TH1=(65536-50000)/256;TL1=(65536-50000)%256;if(count1<20){

count1++;} else

//计时到1S {

TR1=0;

count1=0;

mimaflag=0;

red=1;

bell=1;

//显示FFFF

write_com(0x01);

write_com(0x80);

for(count3=0;count3<16;count3++)

{

write_date(table1[count3]);//显示PASSWORD A OR B KEY

delay(5);

}

write_com(0x80+0x40);

for(count3=0;count3<16;count3++)

{

write_date(table2[count3]);//开机显示FFFF

delay(5);

} } } //***********************************************定时0**********************************************

void time_0()interrupt 1 {

TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(count4<4){ key_scan();} else { TR0=0;count4=0;} }

//初始化函数 void init(){

uchar i;lcden=0;write_com(0x38);

//打开显示模式设置

write_com(0x0c);

//打开显示,光标等等设置未零

write_com(0x06);

//当读或写一个字符后地址指针加一,且光标加一,当写一个字符后整频显示左移,write_com(0x01);

//清零指令

write_com(0x80);

//指针所指位置

//定时器初始化

TMOD=0x11;

//T0,T1工作方式1 TH0=(65536-2000)/256;TL0=(65536-2000)%256;

//T0初始化2MS

TH1=(65536-50000)/256;TL1=(65536-50000)%256;

//T1初始化50MS

TR1=0;ET1=1;EA=1;TR0=0;ET0=1;

count0=0;

//初始没有密码输入,故为零

enterflag=0;

//没有确认键按下

mimaflag=0;

//密码正确与否键先置零

red=1;

//红灯不亮

//************密码存入EPROM中********************************** sda=1;delay(5);scl=1;delay(5);for(i=0;i<8;i++){

write_add(i,8);

delay2(100);} for(i=0;i<8;i++){

mima[i]=read_add(i);

delay(5);} } void main(){ rw=0;

init();write_com(0x80);

//指针所指位置

for(count3=0;count3<16;count3++){

write_date(table1[count3]);//第一行显示INPUT THE PASSPORD:

delay(5);} write_com(0x80+0x40);for(count3=0;count3<16;count3++){

write_date(table2[count3]);//开机显示FFFF

delay(5);} while(1){

key_scan();

//调用键盘扫描函数

lcd_display();

}

} //**************************************************键盘扫描函数开始******************************** void key_scan(){ //**********扫描第一行********* P1=0xfe;temp=P1;temp=temp&0xf0;if(temp!=0xf0){ delay(100);if(temp!=0xf0){ temp=P1;switch(temp){ case 0xee: key_manage1();break;

case 0xde: key_manage2();break;

case 0xbe: key_manage3();break;

case 0x7e: key_manage4();break;} while(temp!=0xf0){ temp=P1;temp=temp&0xf0;} } }

//**************************************************扫描第二行*********************************** P1=0xfd;temp=P1;temp=temp&0xf0;if(temp!=0xf0){ delay(100);if(temp!=0xf0){ temp=P1;switch(temp){ case 0xed: key_manage5();break;

case 0xdd: key_manage6();break;

case 0xbd: key_manage7();break;

case 0x7d: key_manage8();break;} while(temp!=0xf0){ temp=P1;temp=temp&0xf0;} } } //*********************************************扫描第三行*********************************** P1=0xfb;temp=P1;temp=temp&0xf0;if(temp!=0xf0){ delay(100);

if(temp!=0xf0){ temp=P1;switch(temp){ case 0xeb: key_manage9();break;

case 0xdb: key_manage10();break;

case 0xbb: key_manage11();break;

case 0x7b: key_manage12();break;} while(temp!=0xf0){ temp=P1;temp=temp&0xf0;} } }

//***************************************************扫描第四行**************************************** P1=0xf7;temp=P1;temp=temp&0xf0;if(temp!=0xf0){ delay(100);if(temp!=0xf0){ temp=P1;switch(temp){

case 0xe7: key_manage13();break;

case 0xd7: key_manage14();break;

case 0xb7: key_manage15();break;

case 0x77: key_manage16();break;} while(temp!=0xf0){ temp=P1;temp=temp&0xf0;} } } }

** 0 ** 1 **2 ** 3**

** 4** 5** 6 **7 ** **8** 9**

第五章、调试连接与测试

硬件调试方案:在设计平台中,将单片机的P1.01-P1.7分别与8个独立式键盘通过插线连接起来,将P3.0-P3.3分别与LCD液晶显示器的4引脚连接起来,P3.4与蜂鸣器的输入连接起来。将编程输入软件调试。

第六章、小结

通过这两周的学习,我感觉有何人能打的收获:首先通过学习使自己对对课本是上的知识可以应用于实际,使得理论与实际相结合,加深自己对课本知识的更好理解,同时锻炼了我个人的动手能力;并且在图书馆和网络中查阅资料,增加了许多课外知识。能对所学的软件学以致用。在整个设计过程中懂得了许多东西,也培养了独立思考和设计的能力,树立了对知识的运用信心,并且提高了自己的动手实践操作能力,相信

会对以后的学习工作有很大的帮助!虽然本次设计做的不是很顺畅,但是设计过程中所学到的东西是这次最大的收获和财富,是我终身受益!

参考文献

【1】 胡汉才,单片机原理及接口技术,北京:清华大学出版社2008.【2】 张齐,单片机应用系统设计技术-基于c语言编程.北京:机械工业出版社2006.【3】 赵常德,MCS-51/98单片机原理及应用.北京:机械工业出版社.1997.【4】 曹巧媛,单片机原理及应用.北京:电子工业出版社1998

第二篇:单片机课程设计

设计题目: 单片机课程设计

学生姓名:

院: 电气与信息工程学院

级: 电子111班 指导教师:

日 期: 2014年9月20日

一、课程设计目的:

了解电子元器件的功能与原理,掌握单片机的结构和原理,学会使用单片机应用开发技术的相关软件如 keill、STC_ISP_V394等,能够使用c语言的语言编程简单的功能。

二、设计的思想:

利用所提供的单片机和开发板的原理图用keill软件编程程序以实现一些功能。然后用STC_ISP_V394.exe软件将编译完全正确的程序生成的hxe文件下载到开发板上,再调试编译的程序能否实现其所设计的功能。

1、对蜂鸣器的了解:

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,它由振荡器、电磁线圈、磁铁、振动膜片及外壳组成,接通电源后,振荡器产生的音频信号由电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性的振动发声。

2、设计:

我们所使用的开发板实物图如图一,单片机对右上角蜂鸣器的控制是加入三极管接入vcc,单片机的第22引脚和负极上,以此来控制蜂鸣器工作。单片机我们选择STC89C52RC+1602液晶来实现对蜂鸣器的控制及显示所需要的信息。

图一 调试说明:

首先用Keil软件创建一个工程,将程序源代码输入并编译生成单片可执行的.hex文件。其次,打开单片机实践板的电源,接好串口线,用STC-ISP烧录软件,将.hex文件烧录入单片机中。程序下载完毕后,单片机会自动执行程序功能。最后,观察程序功能的执行情况,看是否达到了设计要求。

如果单片机实践板硬件电路的执行结果与设计结果一致,则说明设计过程及流程没有问题,完全符合设计要求。否则,先检查单片机实践板的硬件电路是否完好,是否有断点、漏焊、虚焊以及元器件是否完好等情况,排除故障重新连接后重新进行调试。如果仍然无法正

常实现,则说明程序编写有误,需要认真检查程序流程,然后经过反复的修改与调试排除故障,实现设计要求的各项功能。编译和烧写该程序到单片机:

(1)用Keil编译上面的代码,并设置产生16进制代码文件*.hex.(2)用专用下载线,连接好实验板和电脑串口(DB9)(2)运行hex文件烧写软件STC_ISP_V394.exe

选单片机的型号,并打开编译产生好的hex文件

点击下载,给开发板上电。

3、实现的功能:使用单片机将歌曲《八月桂花》的调子通过蜂鸣器播放出来,用1602液晶将想要表达的信息有步骤地显示在液晶显示屏上,并且调子与显示内容可以任意通过修改的程序烧录到单片机内,实现设计产品的使用性与灵活性。

三、实验程序:

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

[主题] C51音乐程序《八月桂花》

[功能]

通过单片机演奏音乐,显示一些内容

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

#include

#include

//本例采用89C52, 晶振为11.0592MHZ

//关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;

//所以拿出谱子, 试探编吧!

unsigned char i=0;sbit Beep = P2^7;

unsigned char p,m;

//m为频率常数变量

unsigned char n=0;//n为节拍常数变量

unsigned char code music_tab[] ={

0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,0x20, 0x40, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x10,0x1C, 0x10, 0x18 , 0x40,0x1C, 0x20, 0x20 , 0x20,0x1C, 0x20, 0x18 , 0x20,0x20, 0x80, 0xFF , 0x20,0x30, 0x1C, 0x10 , 0x18,0x20, 0x15, 0x20 , 0x1C,0x20, 0x20, 0x20 , 0x26,0x40, 0x20, 0x20 , 0x2B,0x20, 0x26, 0x20 , 0x20,0x20, 0x30, 0x80 , 0xFF,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x80,0x20, 0x30, 0x1C , 0x10,0x20, 0x10, 0x1C , 0x10,0x20, 0x20, 0x26 , 0x20,0x2B, 0x20, 0x30 , 0x20,0x2B, 0x40, 0x20 , 0x15,0x1F, 0x05, 0x20 , 0x10,0x1C, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x30,0x20, 0x30, 0x1C , 0x10,0x18, 0x40, 0x1C , 0x20,0x20, 0x20, 0x26 , 0x40,0x13, 0x60, 0x18 , 0x20,0x15, 0x40, 0x13 , 0x40,0x18, 0x80, 0x00

};

void int0()interrupt 1

//采用中断0 控制节拍

{ TH0=0xd8;

TL0=0xef;

n--;

}

void delay(unsigned char m)

//控制频率延时

{

unsigned i=3*m;

while(--i);

}

void delayms(unsigned char a)//豪秒延时子程序

{

while(--a);

//采用while(--a)不要采用while(a--);各位可编译一下看看汇编结果就知道了!

}

typedef unsigned char BYTE;typedef bit BOOL;

sbit LCD_RS = P2^0;

sbit LCD_RW = P2^1;sbit LCD_EP = P2^2;

BYTE code dis1[] = {“

WLCOME TO

”};BYTE code dis2[] = {“

DanPianJi ”};BYTE code dis3[] = {“

111iZnaiD

”};BYTE code dis4[] = {“

eiXeiX ”};

delays(int ms){

// 延时子程序 int i;while(ms--){

for(i = 0;i< 250;i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

} } }

BOOL lcd_bz(){

// 测试LCD忙碌状态 BOOL result;LCD_RS = 0;LCD_RW = 1;LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();result =(BOOL)(P0 & 0x80);LCD_EP = 0;return result;}

lcd_wcmd(BYTE cmd){

while(lcd_bz());LCD_RS = 0;LCD_RW = 0;LCD_EP = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;

}

lcd_pos(BYTE pos){

lcd_wcmd(pos | 0x80);

// 写入指令数据到LCD //设定显示位置

}

lcd_wdat(BYTE dat)

{

//写入字符显示数据到LCD while(lcd_bz());LCD_RS = 1;LCD_RW = 0;LCD_EP = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;}

lcd_init(){

lcd_wcmd(0x38);

delays(1);lcd_wcmd(0x0c);

delays(1);lcd_wcmd(0x06);

delays(1);lcd_wcmd(0x01);

delays(1);}

void main()

{

BYTE j;

lcd_init();

delays(10);

//LCD初始化设定

//16*2显示,5*7点阵,8位数据//显示开,关光标 //移动光标 //清除LCD的显示内容

// 初始化LCD

lcd_wcmd(0x06);

//向右移动光标

lcd_pos(0);

//设置显示位置为第一行的第1个字符

j = 0;

while(dis1[ j ]!= '')

{

//显示字符“Welcome TO”

lcd_wdat(dis1[ j ]);

j++;

delays(30);

//控制两字之间显示速度

}

lcd_pos(0x40);

j = 0;

while(dis2[ j ]!= '')

{

lcd_wdat(dis2[ j ]);

j++;

delays(30);

}

delays(800);

lcd_wcmd(0x01);

delays(1);

lcd_wcmd(0x04);

lcd_pos(15);

j = 0;

while(dis3[ j ]!= '')

{

lcd_wdat(dis3[ j ]);

j++;

delays(30);

}

lcd_pos(0x4F);

j= 0;

while(dis4[ j ]!= '')

{

lcd_wdat(dis4[ j ]);

j++;

delays(30);

}

delays(800);

//设置显示位置为第二行第1个字符 //显示字符“ DanPianJi ”

//控制两字之间显示速度

//控制停留时间

//清除LCD的显示内容

//向左移动光标

//设置显示位置为第一行的第16个字符

//显示字符“DianZi111”

//控制两字之间显示速度

//设置显示位置为第二行的第16个字符//显示字符“ XieXie ”

//控制两字之间显示速度

//控制停留时间

TMOD&=0x0f;

TMOD|=0x01;

TH0=0xd8;TL0=0xef;

IE=0x82;

play:

while(1)

{

a: p=music_tab[i];

if(p==0x00)

{ i=0, delayms(1000);goto play;}

//如果碰到结束符,延时1秒,回到开始再来一遍

else if(p==0xff){ i=i+1;delayms(100),TR0=0;goto a;} //若碰到休止符,延时100ms,继续取下一音符

else

{m=music_tab[i++], n=music_tab[i++];} //取频率常数 和 节拍常数

TR0=1;

//开定时器1

while(n!=0)Beep=~Beep,delay(m);

//等待节拍完成, 通过P1口输出音频(可多声道哦!)

TR0=0;

//关定时器1

}

}

四、电路图的protue仿真

五、单片机课程设计心得体会:

这个学期的单片机课已经早早的上完了,但是理论纯属理论,没有与实践的结合总让我们学的不踏实,感觉没有达到学以致用的效果。所庆幸的是在课程介绍考试完之后,老师给我们安排了这次单片机课程设计,给了我们学以致用的做好的实践

关于这次课程设计,我们花费了比较多的心思,既是对课程理论内容的一次复习和巩固,还让我们丰富了更多与该专业相关的其他知识,比如软件应用等,在摸索中学习,在摸索中成长,在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获,在真正设计之前我们做了相当丰富的准备,首先巩固一下课程理论,再一遍熟悉课程知识的构架,然后结合加以理论分析、总结,有了一个清晰的思路和一个完整的的软件流程图之后才着手设计。在设计程序时,我们不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;养成注释程序的好习惯是非常必要的,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也能为资料的保存和交流提供了方便;我觉得在设计课程过程中遇到问题是很正常,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计又出错了。

除了对此次设计的准备工作之外,我们还学到了很多平时难得的东西,首先是团队协作,在这次设计当中,难免和同学产生观点和意见的分歧,以及分工明细、时间安排等不合理,通过这次设计,我们体会到了团结合作的重要性及力量之强大,还有让我们处理事情更加有条理,思路更加清晰明了了,发现、提出、分析、解决问题和实践能力的提高都将受益于我在以后的学习、工作和生活中。

除了对此次设计的准备工作之外,我们还学到了很多平时难得的东西,首先是团队协作,在这次设计当中,难免和同学产生观点和意见的分歧,以及分工明细、时间安排等不合理,通过这次设计,我们体会到了团结合作的重要性及力量之强大,还有让我们处理事情更加有条理,思路更加清晰明了了,发现、提出、分析、解决问题和实践能力的提高都将受益于我在以后的学习、工作和生活中。

第三篇:单片机课程设计

基于单片机的火灾智能报警控制系统的设计

前言

在各种灾害中,火灾是最经常、最普通地威胁公众安全和社会发展的灾害之一。人类能够对火进行利用和控制,是文明进步的一个重要标志。火,给人类带文明进步、光明和温暖。但是,失去控制的火,就给人类造成灾害。据统计,我国 70 年代火灾年平均损失不到 2.5 亿元,80 年代火灾年平均损失不到

3.2 亿元。进入 90 年代,特别是 1993 年以来,火灾造成的直接财产损失上升到年均十几亿元,年均死亡 2000 多人。2010年上海静安区高层住宅着火,导致58人死亡,70余人受伤。2014年1月云南香格里拉大火,烧毁房屋100多栋,直接经济损失1亿多元人民币。火灾事件经常发生,防止火灾事故关系到人民群众的生命财产安全和社会和谐稳定。现在各种电子产品的普及,再加上人们防火意识的不强,这些都给火灾的发生带来了巨大的安全隐患。

对于火灾最关键的问题在于预防,目前防火报警系统趋于智能化、自动化,灵敏程度也越来越高。在这种背景下,基于单片机的火灾智能报警控制系统能突显出其巨大的优越性。目前,国内大多数偏重于商场、宾馆、高级写字楼、大型仓库等大型火灾报警系统的研发和设计。本系统侧重于小型火灾智能报警系统的设计,可在火灾发生初期检测到并且报警,还能够实时显示温度和烟雾浓度。

第四篇:单片机课程设计

单片机课程设计

课题: 简易电子琴设计

院:

电气与信息工程学院 专

业:

电子信息工程 姓

名:

李琳琳 学

号:

093411106

指导老师:

田巍

河南城建学院

2014年

01 月

01 日

第五篇:单片机课程设计

单片机课程设计

---------

机电汽车工程学院

同组成员:(机091-1)姓名(学号):

下载单片机课程设计word格式文档
下载单片机课程设计.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    单片机课程设计

    单片机课程设计_报警器 报警器 ORG 0010H START:MOV DPTR,#TAB CLR P3.1 SETB P1 MOV A,P1 CPL A ANL A,#0F0H SWAP A MOV R0,A LCALL DISP1 MOV A,P1 CPL A ANL A,#0FH MOV......

    单片机课程设计

    单片机课程设计报告 专业:电气工程及其自动化 班级:电0901-4班 姓名:代红新 学号:20092444 指导老师:石彦辉 电气与电子工程学院 2012/6/22 一、 设计题目:电子时钟 二、 设计要求......

    单片机课程设计

    武汉理工大学单片机实训报告 第一章 绪论 ...............................................................................................................................

    单片机课程设计

    镇江高等专科学校课程设计1 项目要求 基于AT89S51单片机的密码锁设计,具体功能如下: (1)总共可以设置8位密码,每位密码值范围为1~8。 (2)用户可自行设定和修改密码。 (3)按每个......

    单片机课程设计

    中北大学单片机原理及接口技术课程设计说明书 1 绪论 电子钟已成为人们日常生活中必不可少的物品,广泛用于个人、家庭以及车站、影院、办公室等公共场所,给人们的生活、学习、......

    单片机课程设计

    《单片机技术》课程设计说明书 音乐盒 院、部:电气与信息工程学院 学生姓名:刘亮 指导教师:凌云职称讲师 专业:电子信息工程 班级:电子1302班 学号:1330340220 完成时间: 2016年1......

    单片机课程设计

    课 程 设 计 设计题目: 基于单片机的8*8点阵显示数字设计 学生姓名: 指导教师: 二级学院: 专业: 班级: 学号: 目 录 摘要„„„„„„„„„„„„„„„„„„„„„„„„„„......

    单片机课程设计

    单片机课程设计 跑马灯的控制 摘要:本设计选择对跑马灯的控制,先构思跑马灯实现预想效果,然后进行分 析,根据要求编写程序,选择硬件端口,并进行调试致预想效果,最后浅谈课程设计的......