单片机课程设计_简易频率计数器..

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

第一篇:单片机课程设计_简易频率计数器..

单 片 机 课 程 设 计

简易频率计数器

1.实验目的

1.要求学生具有制作调试单片机最小系统及外设的能力,能够掌握单片机内部资源的使用。

2.熟练掌握焊接技术的基础上,能熟练使用单片机软件开发环境Keil C51编程调试,并使用STC ISP调试工具采用串口下载方式联调制作的单片机最小系统。

二、实验要求

自制一个单片机最小系统,包括串口下载、复位电路,采用外部计数器T0或T1作为外部频率输入,外部频率由信号源提供,计算出来的频率显示在四位一体的数码管上。

三、实验器材

89C54RD芯片(与89c51芯片管脚和指令共用,只是内部存储单元有差异)一个,晶振一个,电容3个,电阻3个,12个10千欧姆电阻,4位一体共阴数码显示管一个,按钮1个,导线若干。

四、实验原理 1.芯片介绍

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

1.主要特性: ·与MCS-51 兼容 ·4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年 ·全静态工作:0Hz-24Hz ·三级程序存储器锁定 ·128*8位内部RAM ·32可编程I/O线 ·两个16位定时器/计数器 ·5个中断源 ·可编程串行通道 ·低功耗的闲置和掉电模式 ·片内振荡器和时钟电路 2.管脚说明:

VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示: 口管脚 备选功能 P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。3.振荡器特性:

XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

4.芯片擦除:

整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。

此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。

2、最小系统电路的组成

由电源、复位及振荡电路、四位一体数码管显示电路、按钮及LED电路。

复位及振荡电路

复位电路由按键复位和上电复位两部分组成。电阻给电容充电,电容的电压缓慢上升直到vcc,到vcc时芯片复位脚近似低电平,于是芯片复位,接近vcc时芯片复位脚近高电平,于是芯片停止复位,复位完成。

AT89C51系列单片机为高电平复位,通常在复位引脚RST上连接一个电容到VCC,再连接一个电阻到GND,由此形成一个RC充放电回路保证单片机在上电时RST脚上有足够时间的高电平进行复位,随后回归到低电平进入正常工作状态,这个电阻和电容的典型值为10K和10uF。

按键复位就是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。使用6MHz的晶体振荡器作为振荡源,由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF之间。如下图所示

数码管显示电路

利用单片机的T0,T1计数定时器功能,来完成对输入信号进行率计数,计数结果通过4位动态数码管显示出来,能对0到9999HZ的方波信号频率进行准确计数。如下图所示

3、软件设计

根据设计项目所需功能,我们先进行初始化,在待机状态下,采集频率。然后检测是否有按钮按下,若按钮按下,则数码管显示所采集的频率,再按下键0时则不显示。系统实现所有功能,其程序框图如图所示。

4、设计源程序 #include bit int_flag;//定时器0,1S到标志位

unsigned char volatile T0Count;//定时器0的中断次数 unsigned char volatile T1Count;unsigned char code table[] //定时器1的中断次数

={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示段码值为123456789 unsigned char code temp[] = {0xfe,0xfd,0xfb,0xf7};//数码管选通 unsigned long sum;//1S内脉冲总个数 unsigned char Led[4];//Led显示缓存

void delay(unsigned int num){ //软件延时

while(--num);//定时器0初始化 } void init(void){ TMOD=0x51;//T1定时器0工作于方式1,定时器1计数 TH0=(65536-50000)/256;//定时50ms TL0=(65536-50000)%256;TH1=0x00;TL1=0x00;} void disp(void){ //数码显示

unsigned char i;for(i=0;i<4;i++){

P2=temp[i];//片选

P0=table[Led[i]];//取数据显示

delay(100);//延时1毫秒

} } void main(void){ EA=1;//开总中断

init();//初始化定时器

TR0=1;//定时器开始工作

TR1=1;ET1=1;//开T0中断

ET0=1;while(1){

if(int_flag==1){

int_flag=0;

sum=TL1+TH1*256+T1Count*65536;//计算个数

//将数据格式化,转化成可显示的BCD码

Led[3]=sum%10000/1000;//显示千位

Led[2]=sum%1000/100;//显示百位

Led[1]=sum%100/10;//显示十位

Led[0]=sum%10;//显示个位

T0Count=0x00;

T1Count=0;

TH1=0x00;

TL1=0x00;

TR1=1;

}

内脉冲1S

disp();} } void int_t0(void)interrupt 1{ TH0=(65535-50000)/256;TL0=(65536-50000)%256;T0Count++;if(T0Count==20){

TR1=0;

int_flag=1;

T0Count=0x00;} } void int_T1(void)interrupt 3{ T1Count++;

5、设计仿真图 输入正弦波频率为1324HZ的仿真情况; 输入方波频率为4216HZ的仿真情况;

6、实物图(未上电)

六、实验结果分析

在实验电路板验收的时候,对于给定的输入信号,数码管显示的频率示数与实际信号源给定的频率有大约20HZ的偏差,产生偏差的原因可能有:1.电路电容的选取不恰当;2.焊接电路板的时候,因为操作不恰当,某些焊点的焊接不到位;3.实际器件与仿真所用到的的元件有差别。

七、心得体会

通过这次课程设计,我熟悉了Keil C51编程与PROTUSE的使用,对单片机的使用有了更深刻的了解,在焊接与测试过程中要有大局观,注意布局和布线。频率计的设计让我更好的了解如何应用单片机的定时器计数器模块。其中最重要的是分析问题解决问题的能力,在我看来,写程序并不难,重要的是把程序优化,无论是在节省硬件资源,还是提高数据的准确度来看,都需要下一些功夫把它做到最好。通过这次课程设计使我明白了自己原来知识还比较欠缺。学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。

第二篇:单片机课程设计频率计数器

单片机课程设计

--频率计数器

专业:自动化 指导老师:朱兆优 班级:1430201

学号:201430020118 姓名:张超梅

一、绪论

1.1设计任务和要求

二、电路设计方案

2.1电路工作原理 2.2系统性能

三、软件设计方案

3.1功能模块 3.2.编程算法思路 3.3程序流程图

四、系统调试

4.1 硬件调试 4.2 软件调试

五、心得体会

目录

一、绪论

频率计又称为频率计数器,是一种专门对被测信号频率进行测量的电子测量仪器。其最基本的工作原理为:当被测信号在特定时间段T内的周期个数为N时,则被测信号的频率f=N/T。频率计主要由四个部分构成:时基(T)电路、输入电路、计数显示电路以及控制电路。在一个测量周期过程中,被测周期信号在输入电路中经过放大、整形、微分操作之后形成特定周期的窄脉冲,送到主门的一个输入端。主门的另外一个输入端为时基电路产生电路产生的闸门脉冲。在闸门脉冲开启主门的期间,特定周期的窄脉冲才能通过主门,从而进入计数器进行计数,计数器的显示电路则用来显示被测信号的频率值,内部控制电路则用来完成各种测量功能之间的切换并实现测量设置。

1.1设计任务和要求

本次课程设计的内容是使用AT89C51单片机最小系统设计频率计系统,系统以单片机为主控单元,主要用于对方波频率的测量,使用 NE555 输出脉冲,用单片机计数器实现技术,再把计数值转换为频率,用静态或动态显示频率值,频率计数器要实现0~1MHz信号频率测量范围,要分段频率段测量,低频段用测周法,高频段用测频法。

二、电路设计方案

2.1电路工作原理

由NE555振荡电路产生脉冲,然后经过二分频电路,然后与定时器/计数器T1相连,P2.0接74Ls273锁存器的时钟信号端,P2.1口接74Ls273锁存器的时钟信号端,P0口接74LS273段选码和位选码,输出与七位共阳数码管显示,采用动态显示。由于P0口输出数据,T2截至,输出级属于开漏电路,要使高电平1信号正确输出,应该外接上拉电阻560k.分频电路

本次设计采用的是脉冲定时测频法,由于考虑到单片机的定时计数器得计数 能力有限,无法对过高频进行测量,所以我们对待测信号进行了分频,这样能提高测量频率的范围,还能相应的提高频率测量的精度。所以我们需要把待测信号进行分频。

显示电路

我们测量的频率最终要显示出来八段LED 数码管显示器由8 个发光二极管组成。基中7 个长条形的发光管排列成“日”字形,另一个圆点形的发光管在数码管显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。LED 数码管显示器有两种形式:一种是8 个发光二极管的阳极都连在一起的,称之为共阳极LED 数码管显示器;另一种是8 个发光二极管的阴极都连在一起的,称之为共阴极LED 数码管显示器。如下图所示。共阴和共阳结构的LED 数码管显示器各笔划段名和安排位置是相同的。当二极管导通时,对应的笔划段发亮,由发亮的笔划段组合而显示的各种字符。8个笔划段 h g f e d c b a 对应于一个字节(8 位)的D7、D6、D5、。D4、D3、D2、D1、D0,于是用8 位二进制码就能表示欲显

符的字

码。

在单片机应用系统中,数码管显示器显示常用两种办法:静态显示和动态扫 描显示。所谓静态显示,就是每一个数码管显示器都要占用单独的具有锁存功能 的I/O 接口用于笔划段字形代码。这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种办法单片机中CPU 的开销小,能供给单独锁存的I/O 接口电路很多。在单片机系统中动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有显示器的8 个笔划段a-h 同名端连在一起,而每一个显示器的公共极COM 是各自独立地受I/O 线控制。CPU 向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM 端,而这一端是由I/O 控制的,所以我们就能自行决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的办法,轮流控制各个显示器的COM 端,使各个显示器轮流点亮。在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

总电路图

三、软件设计方案

3.1功能模块

测周法

 定时器/计数器初始化,测出周期t  4字节除4字节  二进制转换为BCD码  提取BCD码  查表显示

测频法

 定时器/计数器初始化,设置中断

 二进制转换为BCD码  提取BCD码  查表显示 3.2.编程算法思路

子程序主要包括:按键中断子程序、定时中断子程序、计数中断子程序、周期中断子程序、超量程判断子程序、除法子程序、二进制转BCD子程序、显示程子序。除法子程序

该子程序用于周期转换频率,因为周期为两到三字节,所以使用移位除法。

3.3程序流程图

四、系统调试

4.1硬件调试

硬件调试,由大到小,从整体到局部,进行调试。本设计电路简单,所以不一一调试,就最复杂的显示电路进行调试。

先由仿真器连接显示电路,循环发送四位(1-9)显示编码,如果四位都不能显示,检查信号传输电路,时钟电路,电源。

如果四位都能显示,但有的位显示不正确,检查LED与移位寄存器的连线顺序是否正确。如果还显示不正确,与正常的位调换LED数码管。调换后,正常的位显示不正常,则数码管坏了,换数码管。调换后,不正常的位显示不正常,则移位寄存器坏了,换移位寄存器。4.2软件调试 4.2.1软件调试的步骤

(1)源文件的建立:使用菜单 “File-New”或者点击工具栏的新建文件按钮,即可在项目窗口的右侧打开一个新的文本编辑窗口,在该窗口中输入汇编语言源程序(4.2小节所示)。保存该文件,加上扩展名(.asm),这里将文件保存为频率计数器程序.asm。

(2)建立工程文件:点击“Project-New Project”菜单,出现一个对话框,要求给工程起一个名字,输入频率计数器程序,不需要扩展名,点击保存按钮,出现第二个对话框。这个对话框要求选择目标CPU(即我们所使用的芯片型号80C51)点击ATMEL前面的“+”号,展开该层,点击其中的80C51,然后点击确定按钮。回到主界面,此时,在工程窗口的文件页中,出现了“Targ et1”,前面有 “+”号,点击“+”展开,可以看到下一层的“Source Group1”,这时的工程还是一个空工程,里面什么文件也没有,需要手动把刚才编写好的源程序加入,点击“Souce Group”使其反白显示,然后,点击鼠标右键,出现一个下拉菜单。选中其中的“Add file to Group”Souce Group1”,对话框,要求寻找源文件,注意该对话框下面的“文件类型“默认为C Souce file(*.c),也就是以C为扩展名的文件,而我们的文件是以asm 为扩展名的,所以在列表框中找不到频率计数器程序.asm,要将文件类型该掉,点击对话框中”文件类型‘后的下拉列表,找到并选中“Asm Souce File(*.asm,*.a51)”,这样,在列表框中就可以找到频率计数器程序.asm文文件了。双频率计数器程序.asm文件,将文件加入项目,注意,在文件加入项目后,该对话框并不消失,等待继续加入其他文件,但初学时常会认为操作没有成功而再次双击同一文件,这时会出现对话框,提示你所选的文件以在列表中,此时点击确定,返回前一对话框,然后,点击”Close”即可返回主界面,返回后,点击“Souce Goup 1”前的加号,会发现频率计数器程序.asm 文件以在其中。双击文件名,即打开源程序。

(3)工程的详细设置:首先点击左边Project窗口的Target 1,然后使用菜单“Proget-Option for target ‘target 1’”即出现对工程设置的对话框,对这个对话框可谓非常复杂,共有8个页面,要全部高清可不容易,好在绝大部分设置项取默认值就行了。设置完成以后安确认返回主界面,工程建立、设置完毕。(4)编译、连接:在设置好工程后,既可以进行编译、连接。选择菜单Project-Build target,对当前工程进行连接,如果当前文件已修改软件会先对该文件进行比,然后在连接以产生目标代码。编译过程中的信息将出现在输出窗口中的Build页中,如果源程序有语法错误,会有错误报告出现,双击该行,可以定到出错的位置,对源程序反复修改后,最终会得到如图5-1所示的结果,提示获得了名为频率计数器程序.hex的文件,该文件即可被编程器读入并写到芯片中,同时还产生了一些其他相关文件可被用于KEIL的仿真与调试4.2.2调试过程中遇到的问题及解决方法

在进入环境以后,遇到了很多问题,总结如下:(1)提示无asm文件 编译时候提示: F:...XX.asm.hex的文件,该文件即可被编程器读入并写到芯片中,同时还产生了一些其他相关文件可被用于KEIL的仿真与调试。

File has been changed outside the editor, reload ? 解决方法:重新生成项目,产生频率计数器程序.asm即可。(2)在进入Keil的调试环境以后,发现程序有错。解决方法:将光标定位于需要修改的程序上,用菜单,DebugInline Assambly„即可出现对话框,Enter New 后面的编辑框内直接输入需要修改的程序语句,输入完之后键入回车将自动指向下一条语句,可以继续修改,如果不在需要修改,可以点击右上角的关闭按钮关闭窗口。

(3)程序调试时,一些程序必须满足一定的条件才能被执行到

解决方法:这些条件往往是异步发生或难以预先设定的,这类问题使用的单步实行方法是很难调试的,这时就要使用发现程序调试中的另一种非常重要是方法---断点设置。断点设置的方法有多种,常用的是在某一程序行设置断点,设置好断点后可以全速运行程序,一旦执行到该程序行即停止,可在此观察有关变量值,以确定问题所在。在程序行设置/移除断点的方法是将光标定位于需要设置断点的程序行,使用菜单Debug/Insert/RemoveBreakPoint设置或移除断点(也可以用鼠标在该行双击实现同样的功能);Debug/Enable/Disable BreakPoint是开启或暂停光标所在懂行的断点功能;Dubug/Disale All BreakPoint暂停所有断点;Debug/Kill All BreakPoint清除所有的断点设置。这些功能也可以用工具条上的快捷键进行设置。(4)输入程序时,有中文标点,用keil编译时出现错误 解决方法:程序里有带中文标点,用英文重输入一遍(5)汇编出现数字、字母混淆 解决方法:字母“O” 和 数字 “0”。主要错在这里。注意细节。

五、心得体会

通过这一个月来的忙碌和学习,本次课程设计已接近尾声,由于经验的匮乏,难免有许多考虑不周全的地方,在这里衷心感谢指导老师的督促指导,以及一起学习的同学们的支持,让我按时完成了这次课程设计。在论文设计过程中,我遇到了许许多多的困难。在此我要感谢我的指导老师给我悉心的帮助和对我耐心而细致的指导,我的论文较为复杂烦琐,但是老师仍然细心地纠正图中的错误。除了敬佩老师的专业水平以外,他的治学严谨和科学研究的精神也是我永远学习的榜样,并将积极影响我今后的学习和工作,我才得以解决课程设计中遇到的种种问题。感谢大学三年传授我们专业知识的所有老师,谢谢你们呕心沥血的教导。还有谢谢我周围的同窗朋友,他们给了我无数的关心和鼓励,也让我的大学生活充满了温暖和欢乐。如果没有他们的帮助,此次论文的完成将变得困难。他们在我设计中给了我许多宝贵的意见和建议。同时也要感谢自己遇到困难的时候没有一蹶不振,取而代之的是找到了最好的方法来解决问题。

第三篇:单片机课程设计-00-99手动计数器设计

单片机综合实验

题目:00-99手动计数器

班级:10计科一班 姓名:

学号:

设计时间:2013.06.2

目录

一、设计目的:..............................................................................................................................3

二、实验设备和实验平台:...........................................................................................................3

三、实验原理:..............................................................................................................................3

四、设计步骤:..............................................................................................................................4

1.电路设计................................................................................................................................4 2.软件设计................................................................................................................................4 3.实验调试................................................................................................................................5

五、心得体会..................................................................................................................................7

一、设计目的:

利用AT89S51单片机来制作一个手动计数器,在AT89S51单片机的P3.7管脚接一个轻触开关,作为手动计数的按钮,用单片机的P2.0-P2.7接一个共阴数码管,作为00-99计数的个位数显示,用单片机的P0.0-P0.7接一个共阴数码管,作为00-99计数的十位数显示

二、实验设备和实验平台:

EL-MUT-III 型单片机实验箱、8051CPU 模块、Keil uVision2、Proteus 7 Professional

三、实验原理:

1.把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。

2.把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个数码管的a-h端口上;

把“单片机系统”区域中的P3.7/RD端口用导线连接到“独立式键盘”区域中的SP1端口上; 1. 程

2.3. 序设计内容

3.单片机对按键的识别的过程处理

单片机对正确识别的按键进行计数,计数满时,又从零开始计数;

单片机对计的数值要进行数码显示,计得的数是十进数,含有十位和个位,我们要把十位和个位拆开分别送出这样的十位和个位数值到对应的数码管上显示。如何拆开十位和个位我们可以把所计得的数值对10求余,即可个位数字,对10整除,即可得到十位数字了。

通过查表方式,分别显示出个位和十位数字。

四、设计步骤: 1.电路设计

2.软件设计

Count EQU 30H

;EQU ——标号赋值伪指令 SP1

BIT P3.7

ORG 0 START: MOV Count,#00H NEXT: MOV A,Count

MOV B,#10

DIV AB

;A除以B,商(存于)A余(下)B

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P0,A

MOV A,B

MOVC A,@A+DPTR

MOV P2,A WT:

JNB SP1,WT

;SP为0转移 WAIT: JB SP1,WAIT

;SP为1转移

LCALL DELY10MS

JB SP1,WAIT

INC Count

;Count加1 MOV A,Count

CJNE A,#100,NEXT

;累加器与立即数不等转移 LJMP START MOV R6,#20 MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET

DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

;0---9 END

DELY10MS: D1:

TABLE:

3.实验调试

运行后,每按一下开关,后面的个位数字就加1,按到9以后再按一下向十位进1.6

五、心得体会

为期两周的单片机课程设计,给我留下了很深刻的印象.这是我第一次从硬件方面接触到单片机.在平时的上课学习中.对于书上所讲的.感觉很抽象.在做课程设计时我们从最简单的实物开始做起.在制作过程中,我们首先是实验设计,设计电路图,然后画出电路流程图,这个大概耗时一周的时间,在这期间,我们花费大量的时间在寻找方法,上网查资料,不断的讨论,每天都研究的很晚,在焊电路片,由于以前有做过.所以没有什么问题.最后就是程序的下载,这个东西我们以前没有接触过,但是进过我们的研究还是终于成功了,我心情万分激。

这次单片机制作对我收获很大.激发了我对单片机的兴趣.接下来我会慢慢的制作更多更复杂的板子.从中发现问题.解决问题.对我单片机的学习是很有帮助的.由于第一次制作单片机电路.还有许多不好的地方.恳请老师指教!

第四篇:单片机课程设计 简易报警系统设计(定稿)

课程设计(论文)

题 目 名 称

简易防盗系统设计

课 程 名 称

单片机原理及应用课程设计

学 生 姓 名

系、专

信息工程系、信息工程类

指 导 教 师

2013年 6 月 28 日

目录

1概 要﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 3

2设计指标与要求﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 3 3设计方案与论证﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 3 4电路设计原理与流程图﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌5采用的主要元器件﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌6编程实现﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌7仿真结果与分析﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌8总结与致谢﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

9参考文献﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

概 要

传感技术是21世纪人们在高新技术发展方面争夺的一个制高点,各个发达国家都将传感技术视为高新技术发展的关键。从20世纪80年代起,基于传感技术的光电防盗系统也得到了高速的发展,最早的非可见光侵物探测器,有发射机 将一个编码信号送到一个 IR LED中。此LED的输出聚成一束很窄的光束,并使其对准远距离仿制的接收机中的一只匹配的IR光敏探测器。此系统是以针尖视线的原理来工作的,它可以被任何一个进入到发射机与接收机透视镜之间瞄准直线上的大于针尖的物体所触发。随后又出现了给予被动是红外传感技术的被动式红外入侵报警器,它能可靠地将运动着的物体和飘落着的物体加以区别,同时它还具有强大的监控范围,隐蔽性好,抗干扰能力强,和误报率低等特点。

本设计采用光电传感器检测入侵者,其基本原理为:传感器感应到入侵者,将其转换成超低频信号,经电路放大,输出。同时由接受装置根据接受到的信号得到高低电平,输出。经判断,再将报警信号通过电路输入到单片机的接口上,由单片机决定是否对报警信号进行触发。

2设计指标与要求

采用光电式传感器检测入侵者,用蜂鸣器作为报警器的输出,报警距离≥10M;

3设计方案与论证

系统主控部分采用AT89C51芯片,当光电感应器感受到外部有入侵物时,发出信号,单片机接收到信号时,采用延时抖动,再次检测是否还有报警信号,如果有报警信号,启动报警器,红灯全部亮,报警结束后,红灯灭,绿灯亮,如果误报警,可以采用外部中断0使人工停止报警,如果光电感应器没能检测到入侵物,可以采用外部中断1人工报警,人工报警时流水灯亮,蜂鸣器响!

因为如果用光电感应器来检测入侵者,在仿真里无法看到现象,故采用开关来模拟光电感应器。

4电路设计的原理与流程图

(1)电路设计的原理

首先给单片机的P1.0安装一个开关,用来模拟光电感应器。然后给单片机的P3.1脚通过三级管接一个蜂鸣器,用于当有报警信号时用来报警。再给P3.0接4个LED灯,用于报警时显示报警灯作用。再给P3.2接一个按键,用于当光电感应误报警时,可以人工中断报警。给P3.3接一个按键,用于当光电感应没有报警时,按下可以人工报警。

(2)流程图

开始压入堆栈程序初始化P1.2=1P3.0=1P3.1=0P2=00HP1.2清零NP1.0=0?P1.2清零出栈N返回P1.0=0?P1.2=1P3.0取反P3.1取反20H=50TR0=1NTF0=1?Y压入堆栈P1.2=1R7=5P2=0FFH调用延时子程序NP2=00H调用延时子程序P3.1清零P1=0FFH调用延时子程序调用延时子程序YR7-1=0?YP3.1=1调用延时子程序30H=50TR0=1NTF0=1?YTF0清零TF0=0重装系统NN重装系统30H-1=0?P3.1=0P1.2=0出栈P2=00H返回结束YN20H-1=0?YP3.0=1P3.1=0P1.2=0

5采用的主要元器件

主要元器件:AT89C51,NPN,RES,CAP,CAP-ELEC,BUTTON,BUZZER, CRYSTAL 6编程实现

ORG 0000H LJMP MAIN ORG 0003H LJMP ZT0 ORG 0013H LJMP ZT1 ORG 0100H MAIN:MOV TMOD,#01 MOV TH0,#3CH MOV TL0,#0B0H SETB EA SETB EX0 SETB IT0 SETB EX1 SETB PX0 SETB IT1 MOV SP,#60 CLR P3.1 MOV P1,#0FFH MOV P2,#00H CLR P1.2 LP:JNB P1.0,LA LJMP LP LA:LCALL DS01 JNB P1.0,ALARM LJMP LP DS01:MOV R1,#0FFH D1:MOV R2,#0FFH D2:NOP DJNZ R2,D2 DJNZ R1,D1 RET ALARM:SETB P1.2 CPL P3.0 CPL P3.1 MOV 20H,#50 SETB TR0 L2:JBC TF0,L1 LJMP L2 L1:CLR TF0 MOV TL0,#0B0H MOV TH0,#3CH DJNZ 20H,L2 SETB P3.0 CLR P3.1 CLR P1.2 LJMP LP ZT0:PUSH ACC SETB P1.2 SETB P3.0 CLR P3.1 LCALL DS01 CLR P1.2 POP ACC RETI ZT1:PUSH ACC SETB P1.2 MOV R7,#05 DQ:MOV P2,#0FFH LCALL DS01 MOV P2,#00H LCALL DS01 DJNZ R7,DQ SETB P3.1 LCALL DS01 MOV 30H,#50 SETB TR0 L4:JBC TF0,L3 SJMP L4 L3:CLR TF0 MOV TH0,#3CH MOV TL0,#0B0H DJNZ 30H,L4 CLR P3.1 CLR P1.2 POP ACC MOV P2,#00H RETI END

7仿真结果与分析

在系统正常的情况下,系统不断检测是否有警报信号,当检测有警报信号时,系统转入报警,从而蜂鸣器响。8 总结

总结

课程设计是我们理论联系实际的最好的途径之一,让我们有机会把课本上学到的知识运用到实际生活中。目前单片机在工业检测领域中得到了广泛的应用,在我们平常的生活中也是随处可见,包括我们日常生活中随处可见的交通灯、闹钟等都含有单片机作为一个主要的部件,懂得并熟悉掌握单片机的运用技术常有用的。通过这次课程设计使对单片机语言的理解和掌握上有了很大的进步,以前所了解的单片机语言仅限于一些片面的知识,通过这次编程,将这些零零碎碎的知识汇集起来,编写出了一个完整的系统,并且对单片机语言的应用能力有了极大的提高。在这次课程设计的过程中,我深深体会到团队合作的精神是极其重要的。因为身在一个团队,有了困难大家一起解决,减少了压力,同时拓展了思维,交换了意见,一个人的思想当被接受和了解时,我们有了更多的思想关于一个问 题,我想这些都是作为一个团队的好处。经过此次课程设计,我们经历了喜,怒,哀,乐。同时我们也对明年的毕业设计有了一定的想法和实现自己想法的决心.9参考文献

[1] 李泉溪.单片机原理与应用实例仿真[M].北京:北京航空航天大学出版社,2009.[2] 江世明.基于Proteus的单片机应用技术[M].北京:电子工业出版社,2009.[3] 周润景,张丽娜.基于Proteus的电路及单片机系统设计与仿真[M].北京:北京航空航天大学出版社,2006.[4] 张友德.单片微型计算机原理、应用与实验[M].上海:复旦大学出版社,2003.

第五篇:单片机课程设计-简易数字钟的设计

单片机课程设计报告

课程设计题目:简易数字时钟

学生姓名:** 学号:********** 学院:****** 专业班级:**********

指导老师:**

2014年5月13日

摘要:

本设计采用了STC公司生产的STC89C52RC型单片机(80C51内核)设计了一个单片机最小系统,加上maxim232和usb转RS232线组成的下载电路,以及共阴极4位一体数码管和按键等外围电路构成了一个简易的数字钟,具有显示年、月、日、时、分、秒的功能,且年、月、日、时、分、秒每一个参数都可以自行设置,以实现时间的校正,总体来说实现了一个数字时钟的应有功能。

关键词:80C51系列单片机、单片机最小系统、时钟定时、下载电路、4位一体数码管显示

一、设计任务 简易数字时钟:自制一个单片机最小系统,包括串口下载、复位电路,采用内部定时器计时,或者采用外部时钟芯片DS1302,设计一个具有秒、分、日、月、年的数字时钟,采用四位一体数码管显示相关信息,秒、分显示一页,日、月显示一页,年显示一页。

二、方案选择

2.1、采用uln2003驱动数码管

由于单片机的I/O口的拉电流只有大约1mA左右,不足以提供4-5mA的电流以驱动数码管上的led,故需要为数码管提供一个驱动电路,如果采用三极管的话由于数码管有7段(实际是8段,但本设计只需要使用7段),需要7个三极管来驱动,给焊接部分增加了工作量,故可考虑采用ULN2003以给数码管提供驱动电流。

Uln2003的内部原理图

ULN2003 是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成。

该电路的特点如下:[3]

ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路

直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。

ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还

可以在高负载电流并行运行。

ULN2003 采用DIP—16 或SOP—16 塑料封装。

内部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTL COMS,由达林顿管组成驱动电路。ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V。用户输出口的外接负载可根据以上参数估算。采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。

ULN2003是一个非门电路,包含7个单元,单独每个单元驱动电流最大可达350mA,9脚可以悬空。

比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。

ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。

输入5VTTL电平,输出可达500mA/5V。

ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。该电路的特点如下: ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路 直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。

ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。

2.2、直接用单片机加上拉电阻的P0口驱动数码管

对于51单片机的4个IO口来说有一个IO口与其他三个有点不同,那就是P0口,由于P0口(在作为输出IO口时)是OC门在最小系统中需要加一个上拉电阻,由此,可以用P0口作为数码管的驱动(可以通过合理配置上拉电阻的大小以提供足够的驱动电流)

51单片机的P0口内部电路图

由于相对来说接一个排阻便宜可靠,且方便,且也足以提供驱动数码管的电流,故采用方案2:直接用单片机加上拉电阻的I/O口驱动数码管

三、电路原理图

简易数字钟原理图

3.1最小系统

本设计最小系统与一般的51最小系统设计保持一致性,晶振电路为12M的晶体振荡器搭配两个30pF的电容组成,复位电路由5v接一个开关与电容并联再与电阻串联后接地构成,下载电路采用的是串口下载,为电脑上连一根usb转串口线,然后串口练到电路上,再通过max232芯片进行电平转换将RS232串口的电平转换为单片机的5v以进行电平匹配。3.2共阴极4位一体数码管

四位一体数码管

数码管的显示由段选和位选控制,段选为图片中的每一位“8”型上的a、b、c、d、e、f、g、h共8段构成。位选有4个引脚,分别对应于数码管的4个位。

四、程序代码 如下:

#include sbit anjian1 = P1^0;sbit anjian2 = P1^1;sbit anjian3 = P1^2;sbit anjian4 = P1^3;int anjian11;int anjian22;int anjian33;int anjian44;int sec=55;//秒,分,时,日,月,年定义全局变量并装载初始值 int min=37;int hour=8;int day=30;int mon=12;int year=2014;int j=0;//j为秒计时变量,T0每计时50ms时j自增1,当j=20时立刻置0,且sec自增1 int play=1;//play为显示变量,当为“1”时显示“时,分”,为“2”时显示“月,日”,为“3”时显示“年”,为“0”时显示“秒” int led[4]={0,0,0,0};unsigned char code table[] ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x76};void delay(void)

//延时10ms {

unsigned char a,b,c;

for(c=1;c>0;c--)

for(b=38;b>0;b--)

for(a=130;a>0;a--);} void main(){ IE=0x8F;//开总中断,开定时T0,开定时T1,开外部中断0,开外部中断1 IP=0x00;//设置中断优先级均为低优先级,默认优先级为:调整时间》定时》设置显示页 IT0=1;IT1=1;TMOD=0x11;//定时器0工作于工作方式1,定时工作方式,由运行控制位TR1启动定时器;定时器1工作于工作方式1,定时工作方式,由运行控制位TR1启动定时器 P2=0Xfd;

TH0 = 0x3C;

TL0 = 0xB0;

{ switch(play){ case 1 :

{

if(anjian1==0)

{

{ delay();delay();if(anjian1==0)anjian11=anjian1;if(anjian1 &!anjian11)hour++;

} TH1=0xD8;TL1=0xF0;TR0=1;TR1=1;

//定时器T0用于20分之一秒的定时,定时器T1用于数码管的动态显示,外部中断0为调整时间,外部中断1为设置显示页

for(;;)else if(anjian2==0)

if(anjian2==0)

anjian22=anjian2;

if(anjian2 &!anjian22)

hour--;

else if(anjian3==0)

{

delay();

if(anjian3==0)

anjian33=anjian3;

if(anjian3 &!anjian33)

min++;

else if(anjian4==0)

{

delay();

if(anjian4==0)

anjian44=anjian4;

if(anjian4 &!anjian44)

min--;

}

break;case 2 : {

if(anjian1==0)

{

delay();

if(anjian1==0)

anjian11=anjian1;

if(anjian1 &!anjian11)

mon++;

else if(anjian2==0)

{

delay();

if(anjian2==0)

anjian22=anjian2;

if(anjian2 &!anjian22)

mon--;

else if(anjian3==0)

{

delay();if(anjian3==0)}

}

}

}

}

anjian33=anjian3;

if(anjian3 &!anjian33)

day++;

else if(anjian4==0)

{

delay();

if(anjian4==0)

anjian44=anjian4;

if(anjian4 &!anjian44)

day--;

}

break;case 3 : {

if(anjian1==0)

{

delay();

if(anjian1==0)

anjian11=anjian1;

if(anjian1 &!anjian11)

year++;

else if(anjian2==0)

{

delay();

if(anjian2==0)

anjian22=anjian2;

if(anjian2 &!anjian22)

year--;

else if(anjian3==0)

{

delay();

if(anjian3==0)

anjian33=anjian3;

if(anjian3 &!anjian33)

year++;

else if(anjian4==0)

{

delay();

if(anjian4==0)anjian44=anjian4;}

}

}

}

}

if(anjian4 &!anjian44)

year--;

}

break;case 0 : {

if(anjian1==0)

{

delay();

if(anjian1==0)

anjian11=anjian1;

if(anjian1 &!anjian11)

sec++;

else if(anjian2==0)

{

delay();

if(anjian2==0)

anjian22=anjian2;

if(anjian2 &!anjian22)

sec--;

else if(anjian3==0)

{

delay();

if(anjian3==0)

anjian33=anjian3;

if(anjian3 &!anjian33)

sec++;

else if(anjian4==0)

{

delay();

if(anjian4==0)

anjian44=anjian4;

if(anjian4 &!anjian44)

sec--;

} break;}

switch(play){

}

}

}

}

} case 1 : { led[0]=hour/10;

};}}

void service_int1()interrupt 2 using 1 { if(play==3)play=0;else play++;} void service_t0()interrupt 1 using 1

//实现1s的延时以及sec到min,min到hour,hour到day,day到month,month到year,year到next_year的转换 {

TH0 = 0x3C;if(j==20){

j=0;sec++;if(sec>=60)

TL0 = 0xB0;

led[1]=hour%10;led[2]=min/10;led[3]=min%10;

} break;

led[1]=mon%10;led[2]=day/10;led[3]=day%10;

} case 2 : { led[0]=mon/10;break;

led[0]=year/1000;led[1]=((year%1000)/100);led[2]=((year%100)/10);led[3]=(year%10);

} case 3 : {

break;

led[1]=16;led[2]=sec/10;led[3]=sec%10;

} case 0 : { led[0]=16;break;

}

else { { sec=0;min++;if(min>=60){ min=0;hour++;if(hour>=24){hour=0;day++;if(day>=31){ day=1;mon++;if(mon>=13){ mon=1;year++;} } } } } } j++;} void service_t1()interrupt 3 using 1 //定时器1实现了数码管的动态显示 {

TH1=0xFC;TL1=0x18;if(P2==0xfd){P2=0xfb;P0=table[led[2]];} else if(P2==0xfb){ P2=0xf7;P0=table[led[3]];} else if(P2==0xf7){P2=0xfe;P0=table[led[0]];

} else if(P2==0xfe){P2=0xfd;P0=table[led[1]];} }

五、制作实物图

六、心得收获

经过本次课程设计,我将课本上的知识转化为了实际的实物,更加深入的理解了单片机这,加强了自己的编程能力,与软硬件调试能力,总体来说,还是收获很大的。

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

文档为doc格式


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

相关范文推荐

    单片机实验三 定时计数器实验[精选合集]

    实验三定时/计数实验 一、实验目的 1、理解单片机的定时/计数原理,掌握定时/计数程序的编写方法。 2、掌握定时/计数器在定时、计数、频率测量等方面的应用。 3、学会使用PRO......

    单片机课程设计

    单片机课程设计 课题: 简易电子琴设计 学院:电气与信息工程学院 专业:电子信息工程 姓名:李琳琳 学号:093411106 指导老师:田巍 河南城建学院 2014年01 月01 日......

    单片机课程设计

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

    单片机课程设计

    基于单片机的火灾智能报警控制系统的设计前言在各种灾害中,火灾是最经常、最普通地威胁公众安全和社会发展的灾害之一。人类能够对火进行利用和控制,是文明进步的一个重要标志......

    单片机课程设计

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

    单片机课程设计

    单片机课程设计_报警器 报警器 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......

    单片机课程设计

    单片机课程设计 --------- 机电汽车工程学院 同组成员:(机091-1) 姓名(学号):......

    单片机课程设计大全

    基于单片机的计算器设计、基于单片机的密码锁设计、基于单片机的电机控制、基于单片机的交通灯设计、基于单片机的八路抢答器设计、基于单片机的温度检测设计、基于单片机的......