第一篇:单片机课程设计
镇江高等专科学校课程设计1 项目要求
基于AT89S51单片机的密码锁设计,具体功能如下:(1)总共可以设置8位密码,每位密码值范围为1~8。(2)用户可自行设定和修改密码。(3)按每个密码时都有声音提示。
(4)若键入的8位开锁密码不完全正确,则报警5s已提醒他人注意。
(5)开锁密码连续错3次要报警1分钟,报警期间输入密码无效,以防窃贼多次试探密码。
(6)键入的8位开锁密码完全正确才能开锁,开锁时要有1s的提示音。(7)电磁锁的电磁线圈每次充电5s,然后恢复初态。
(8)密码键盘上只允许有8个密码按键。锁内有备用电池,只有内部上电复位才能设置或修改密码,因此,仅仅在门外按键是不能修改或设置密码的。(9)密码设置完毕后要有2s的提示音。硬件设计
2.1 设计思路
按照系统设计的要求和功能,将系统分为主控模块;按键扫描模块;蜂鸣器;电源电路;复位电路晶振电路;驱动电路几个模块,系统组成框图如图1-1所示。主控模块采用AT89S51单片机。
电源电路复位电路主控模块晶振电路AT89S51按键扫描模块驱动器蜂鸣器 图1-1 基于AT89S51单片机的密码锁组成框图 镇江高等专科学校课程设计2.2 硬件图及说明(硬件图见图1-2,)
元件型号单片机晶振电容型号数量/个用途元件型号蜂鸣器电阻型号数量/个用途AT89S52 1 控制核心12MHz 1 晶振电路30pF 2 晶振电路1 报警电路1kΩ10kΩ4.7kΩ1 上拉电路1 复位电路1 放大电路电阻电阻继电器电源电解电容20uF/10V 1 复位电路按键三极管二极管9 按键电路8550 2 放大电路IN4004 1 5V 1 控制对象+5V/0.5A 1 提供+5V电源 图1-3 基于AT89S51单片机的密码锁元件清单
注:1.AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
2.蜂鸣器的工作原理: 软件设计
2.1 设计思路 镇江高等专科学校课程设计应位置的,分析程序时可以仔细对照参考。该密码锁中RAM存储单元的分配方案如下所示
如图1-3所示给出了该单片机密码锁电路的软件软件流程图。图中AA1~AA8以及START,SET,SAVE是程序中的标号,是为了理解程序而专门标在流程图的对 31H~38H;依次存放8位设定的密码,首位密码存放在31H单元中。 R0:只指向密码地址 R2;已经输入密码的位数
R3:存放允许的错码次数3与实际错码次数的差值。 R4~ R7:延时用。 00H:错码标志位。
对于ROM存储单元的分配,由于程序比较短,而且占用的存储空间的较少,因此,在无特殊要求时,可以从0030H单元(其他地址也可以)开始存放主程序。3.2 程序流程图
开始初始化1s提示音等待设置密码NN有键按下?Y短音提示保存设置密码N是否够8位?Y长音提示错误次数清零错误标识清零N有键按下?Y短音提示密码对否?Y是否够8位?Y标志=1?N开锁并长音提示延时锁恢复错误清零错3次?Y报警1 min错误次数清零报警5s错误标志清零Y错误次数加1NN错误标志置1 图1-4 基于AT89S51单片机的密码锁程序流程图
3.3 程序清单(注释)
LOC OBJ LINE SOURCE
0000 1 ORG 0000H 0000 0130 2 AJMP START 0030 3 ORG 0030H 镇江高等专科学校课程设计0030 11A1 4 START:ACALL BP 0032 7831 5 MOV R0,#31H 0034 7A08 6 MOV R2,#8 0036 7590FF 7 SET1:MOV P1,#0FFH 0039 E590 8 MOV A,P1 003B B4FF02 9 CJNE A,#0FFH,L8 003E 0136 10 AJMP SET1
0040 11B0 11 L8: ACALL DELAY 0042 B4FF02 12 CJNE A,#0FFH,SAVE 0045 0136 13 AJMP SET1 0047 11A1 14 SAVE: ACALL BP 0049 F6 15 MOV @R0,A 004A 08 16 INC R0 004B DAE9 17 DJNZ R2,SET1 004D 7D10 18 MOV R5,#16 004F 11A1 19 D2S: ACALL BP 0051 DDFC 20 DJNZ R5,D2S 0053 7831 21 MOV R0,#31H 0055 7B03 22 MOV R3,#3 0057 7A08 23 AA1: MOV R2,#8 0059 7590FF 24 AA2: MOV P1,#0FFH 005C E590 25 MOV A,P1 005E B4FF02 26 CJNE A,#0FFH, L9 0061 0159 27 AJMP AA2 0063 11B0 28 L9:ACALL DELAY 0065 B4FF02 29 CJNE A,#0FFH,AA3 0068 0159 30 AJMP AA2 006A 11A1 31 AA3: ACALL BP 006C C3 32 CLR C 006D 96 33 SUBB A, @R0 006E 08 34 INC R0 006F B40002 35 CJNE A,#00H,AA4 0072 0176 36 AJMP AA5 0074 D200 37 AA4: SETB 00H 镇江高等专科学校课程设计0076 DAE1 38 AA5: DJNZ R2,AA2 0078 20000E 39 JB 00H,AA6 007B C2B5 40 CLR P3.5 007D 7D08 41 L3:MOV R5,#8 007F 11A1 42 ACALL BP 0081 DCFA 43 DJNZ R4,L3 0083 7B03 44 MOV R3,#3
0085 D2B5 45 SETB P3.5 0087 0157 46 AJMP AA1 0089 DB0C 47 AA6: DJNZ R3,AA7 008B 7D18 48 MOV R5,#24 008D 7CC8 49 L5: MOV R4,#200 008F 11A1 50 L4: ACALL BP 0091 DCFC 51 DJNZ R4,L4 0093 DDF8 52 DJNZ R5,L5 0095 7B03 53 MOV R3,#3 0097 7D28 54 AA7: MOV R5,#40 0099 11A1 55 ACALL BP 009B DDFA 56 DJNZ R5,AA7 009D C200 57 AA8: CLR 00H 009F 0157 58 AJMP AA1 00A1 C2B7 59 BP: CLR P3.7 00A3 7FFA 60 MOV R7,#250 00A5 7E7C 61 L2: MOV R6,#124 00A7 DEFE 62 L1: DJNZ R6,L1 00A9 B2B7 63 CPL P3.7 00AB DFF8 64 DJNZ R7,L2 00AD D2B7 65 SETB P3.7 00AF 22 66 RET 00B0 7F14 67 DELAY:MOV R7,#20 00B2 7E7D 68 L7: MOV R6,#125 00B4 DEFE 69 L6: DJNZ R6,L6 00B6 DFFA 70 DJNZ R7,L7 00B8 22 71 RET 镇江高等专科学校课程设计 72 END 3.4 程序调试
按键AN1~AN7分别代表数码1~7,按键AN0代表8。在没有键按下时,P1.0~P1.7全是高电平1;若某个键被按下,相应的口就变为低电平0.加入设定的密码是612345678,当按键AN6被按下时,P1.6变为低电平,P1端口其余口线为高电平,此时从P1口输入的数值为10111111,存到31H单元的密码值就是10111111,也就是BFH。以此类推,存到32H至38H单元的密码值分别是FDH,FBH,F7H,EFH,DFH,7FH,FEH。开锁时必须先按AN6,使从P1口读入的第一个密码值与31H单元存储的设定值相同,再按顺序按AN1,AN2,AN3,AN4,AN5,AN7,AN0才能开锁。否则不能开锁,同时开始报警。小结
通过此次课程设计,使我更加扎实的掌握了有关单片机方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。
实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰
参考文献:(另起一页)
【1】杨居义。单片机课程设计指导。北京:北京大学出版社,2009。
【2】王效华,张咏梅。单片机原理与应用。北京:北京交通大学出版社,2007。【3】杨光义,马宁,靳光明等。单片机原理与工程应用。北京:清华大学出版社,2009。
第二篇:单片机课程设计
设计题目: 单片机课程设计
学生姓名:
学
院: 电气与信息工程学院
班
级: 电子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)姓名(学号):