基于51单片机的数字频率计的设计概要

2024-12-01 版权声明 我要投稿

基于51单片机的数字频率计的设计概要(精选8篇)

基于51单片机的数字频率计的设计概要 篇1

频率测量是电子学测量中最为基本的测量之一。由于频率信号抗干扰性强,易于传输,因此可以获得较高的测量精度。随着数字电子技术的发展,频率测量成为一项越来越普遍的工作,测频原理和测频方法的研究正受到越来越多的关注。

1.1频率计概述

数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字显示被测信号频率的数字测量仪器。它的基本功能是测量正弦信号、方波信号及其他各种单位时间内变化的物理量。在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。传统的频率计采用测频法测量频率,通常由组合电路和时序电路等大量的硬件电路组成,产品不但体积大,运行速度慢而且测量低频信号不准确。本次采用单片机技术设计一种数字显示的频率计,测量准确度高,响应速度快,体积小等优点。

1.2频率计发展与应用

在我国,单片机已不是一个陌生的名词,它的出现是近代计算机技术的里程碑事件。单片机作为最为典型的嵌入式系统,它的成功应用推动了嵌入式系统的发展。单片机已成为电子系统的中最普遍的应用。单片机作为微型计算机的一个重要分支,其应用范围很广,发展也很快,它已成为在现代电子技术、计算机应用、网络、通信、自动控制与计量测试、数据采集与信号处理等技术中日益普及的一项新兴技术,应用范围十分广泛。其中以AT89S52为内核的单片机系列目前在世界上生产量最大,派生产品最多,基本可以满足大多数用户的需要。

武汉理工大学《单片机原理与应用》课程设计说明书 系统总体设计

2.1测频的原理

测频的原理归结成一句话,就是“在单位时间内对被测信号进行计数”。被测信号,通过输入通道的放大器放大后,进入整形器加以整形变为矩形波,并送入主门的输入端。由晶体振荡器产生的基频,按十进制分频得出的分频脉冲,经过基选通门去触发主控电路,再通过主控电路以适当的编码逻辑便得到相应的控制指令,用以控制主门电路选通被测信号所产生的矩形波,至十进制计数电路进行直接计数和显示。若在一定的时间间隔T内累计周期性的重复变化次数N,则频率的表达式为式:

Nfx=

TN频率计数器严格地按照f=公式进行测频。由于数字测量的离散性,被测频率在计数

T器中所记进的脉冲数可有正一个或负一个脉冲的1量化误差,在不计其他误差影响的情况下,测量精度将为:

(fA)1N

应当指出,测量频率时所产生的误差是由N和T俩个参数所决定的,一方面是单位时间内计数脉冲个数越多时,精度越高,另一方面T越稳定时,精度越高。为了增加单位时间内计数脉冲的个数,一方面可在输入端将被测信号倍频,另一方面可增加T来满足,为了增加T的稳定度,只需提高晶体振荡器的稳定度和分频电路的可靠性就能达到。

上述表明,在频率测量时,被测信号频率越高,测量精度越高。

2.2总体思路

频率计是我们经常会用到的实验仪器之一,频率的测量实际上就是在单位时间内对信号进行计数,计数值就是信号频率。本文介绍了一种基于单片机AT89S52 制作的频率计的设计方法,所制作的频率计测量比较高的频率采用外部十分频,测量较低频率值时采用单片机直接计数,不进行外部分频。该频率计实现10HZ~2MHZ的频率测量,而且可以实现量程自动切换功能,四位共阳极动态显示测量结果,可以测量正弦波、三角波及方波等各种波形的频率值。

2.3具体模块

根据上述系统分析,频率计系统设计共包括五大模块:单片机控制模块、电源模块、放大整形模块、分频模块及显示模块。各模块作用如下:

1、单片机控制模块:以AT89C51单片机为控制核心,来完成它待测信号的计数,译

武汉理工大学《单片机原理与应用》课程设计说明书

码,和显示以及对分频比的控制。利用其内部的定时/计数器完成待测信号周期/频率的测量。

2、电源模块:为整个系统提供合适又稳定的电源,主要为单片机、信号调理电路以及分频电路提供电源,电压要求稳定、噪声小及性价高的电源。

3、放大整形模块:放大电路是对待测信号的放大,降低对待测信号幅度的要求。整形电路是对一些不是方波的待测信号转化成方波信号,便于测量。

4、分频模块:考虑单片机外部计数,使用12 MHz时钟时,最大计数速率为500 kHz,因此需要外部分频。分频电路用于扩展单片机频率测量范围,并实现单片机频率测量使用统一信号,可使单片机测频更易于实现,而且也降低了系统的测频误差。

5、显示模块:显示电路采用四位共阳极数码管动态显示,为了加大数码管的亮度,使用4个PNP三极管进行驱动,便于观测。

综合以上频率计系统设计有单片机控制模块、电源模块、放大整形模块、分频模块及显示模块等组成,频率计的总体设计框图如图2所示。

信号放大整形分频电路微控制器AT89S52数码管显示驱动电路5V电源

图2.1 频率计总体设计框图

武汉理工大学《单片机原理与应用》课程设计说明书 系统硬件设计

3.1 AT89C51主控制器模块

3.1.1 AT89C51的介绍

AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS 8位微处理器,俗称单片机。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

AT89C51引脚如下图所示。

图3.1 AT89C51引脚图

3.1.2 复位电路

复位电路是维持单片机最小系统运行的基本模块。复位电路如下图所示。

武汉理工大学《单片机原理与应用》课程设计说明书

图3.2 复位电路

高频率的时钟有利于程序更快的运行,也有可以实现更高的信号采样率,从而实现更多的功能。但是告诉对系统要求较高,而且功耗大,运行环境苛刻。考虑到单片机本身用在控制,并非高速信号采样处理,所以选取合适的频率即可。合适频率的晶振对于选频信号强度准确度都有好处,本次设计单片机实物具有11.0592M的晶振频率。AT89C51单片机最小系统如下图所示。

图3.3 单片机最小系统原理图

3.2 分频设计模块

分频电路用于扩展单片机频率测量范围,并实现单片机频率和周期测量使用统一信号,可使单片机测频更易于实现,而且也降低了系统的测频误差。

本频率计的设计以AT89C51单片机为核心,利用他内部的定时/计数器完成待测信号

武汉理工大学《单片机原理与应用》课程设计说明书

周期/频率的测量。单片机AT89C51内部具有2个16位定时计数器,定时/计数器的工作可以由编程来实现定时、计数和产生计数溢出时中断要求的功能。在定时器工作方式下,在被测时间间隔内,每来一个机器周期,计数器自动加1(使用12 MHz时钟时,每1μs加1),这样以机器周期为基准可以用来测量时间间隔。在计数器工作方式下,加至外部引脚的待测信号发生从1到0的跳变时计数器加1,这样在计数闸门的控制下可以用来测量待测信号的频率。外部输入在每个机器周期被采样一次,这样检测一次从1到0的跳变至少需要2个机器周期(24个振荡周期),所以最大计数速率为时钟频率的1/24(使用12 MHz时钟时,最大计数速率为500 kHz),因此采用74LS161进行外部十分频使测频范围达到2MHz。为了测量提高精度,当被测信号频率值较低时,直接使用单片机计数器计数测得频率值;当被测信号频率值较高时采用外部十分频后再计数测得频率值。这两种情况使用74LS151进行通道选择,由单片机先简单测得被测信号是高频信号还是低频信号,然后根据信号频率值的高低进行通道的相应导通,继而测得相应频率值。

3.3 显示模块

显示模块由频率值显示电路和量程转换指示电路组成。频率值显示电路采用四位共阳极数码管动态显示频率计被测数值,使用三极管8550进行驱动,使数码管亮度变亮,便于观察测量。量程转换指示电路由红、黄、绿三个LED分别指示Hz、KHz及MHz档,使读数简单可观。

3.3.1 数码管介绍

常见的数码管由七个条状和一个点状发光二极管管芯制成,叫七段数码管,根据其结构的不同,可分为共阳极数码管和共阴极数码管两种。根据管脚资料,可以判断使用的是何种接口类型。

LED数码管中各段发光二极管的伏安特性和普通二极管类似,只是正向压降较大,正向电阻也较大。在一定范围内,其正向电流与发光亮度成正比。由于常规的数码管起辉电流只有1~2 mA,最大极限电流也只有10~30 mA,所以它的输入端在5 V电源或高于TTL高电平(3.5 V)的电路信号相接时,一定要串加限流电阻,以免损坏器件。

3.3.2 频率值显示电路

数码管电路设计不加三极管驱动时,数码管显示数值看不清,不便于频率值的测量与调试。因此加入三极管8550进行驱动数码管。使用4位数码管进行频率值显示,如果选择共阴极数码管显示,则需要8个三极管进行驱动,而采用共阳极数码管则需要4个三极

武汉理工大学《单片机原理与应用》课程设计说明书

管驱动,为了节约成本,因此选用共阳极数码管进行动态显示,具体数码管设计电路如图所示。

图3.4 数码管显示电路

3.3.3 档位转换指示电路

根据设计要求,采用红、黄、绿三个LED分别指示Hz、KHz及MHz档,根据被测信号的频率值大小,可以自动切换量程单位,无需手动切换,便于测量和读数,简单方便。具体设计的档位转换LED指示电路如图所示。

图3.5 LED档位指示电路

武汉理工大学《单片机原理与应用》课程设计说明书 系统软件设计

系统软件设计主要采用模块化设计,叙述了各个模块的程序流程图,并介绍了软件Keil和Proteus的使用方法和调试仿真。

4.1 软件模块设计

系统软件设计采用模块化设计方法。整个系统由初始化模块,信号频率测量模块,自动量程转换和显示模块等模块组成。系统软件流程如图所示。

频率计开始工作或者完成一次频率测量,系统软件都进行测量初始化。测量初始化模块设置堆栈指针(SP)、工作寄存器、中断控制和定时/计数器的工作方式。定时/计数器的工作首先被设置为计数器方式,即用来测量信号频率。

开始系统初始化频率测量频率是否超过1KHzY硬件十分频N计数器计数测频率值测量数据显示

图4.1 系统软件流程总图

首先定时/计数器的计数寄存器清0,运行控制位TR置1,启动对待测信号的计数。计数闸门由软件延时程序实现,从计数闸门的最小值(即测量频率的高量程)开始测量,计数闸门结束时TR清0,停止计数。计数寄存器中的数值经过数制转换程序从十六进制数转换为十进制数。判断该数的最高位,若该位不为0,满足测量数据有效位数的要求,测量值和量程信息一起送到显示模块;若该位为0,将计数闸门的宽度扩大10倍,重新对待测信号的计数,直到满足测量数据有效位数的要求。定时/计数器的工作被设置为定时器方式,定时/计数器的计数寄存器清0,在判断待测信号的上跳沿到来后,运行控制位TR

武汉理工大学《单片机原理与应用》课程设计说明书

置为1,以单片机工作周期为单位进行计数,直至信号的下跳沿到来,运行控制位TR清0,停止计数。16位定时/计数器的最高计数值为65535,当待测信号的频率较低时,定时/计数器可以对被测信号直接计数,当被测信号的频率较高时,先由硬件十分频后再有定时/计数器对被测信号计数,加大测量的精度和范围。

4.2 应用软件简介

此设计需要在Keil软件平台上完成程序的调试,在Proteus软件平台上完成仿真显示。因此介绍如何使用Keil和Proteus进行软件的仿真。

4.2.1 Keil简介

Keil软件是目前最流行开发系列单片机的软件,Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。而Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象[16]。

4.2.2 protues简介

protues是Labcenter公司出品的电路分析、实物仿真系统,而KEIL是目前世界上最好的51单片机汇编和C语言的集成开发环境。他支持汇编和C的混合编程,同时具备强大的软件仿真和硬件仿真功能[17]。Protues能够很方便的和KEIL、Matlab IDE等编译模拟软件结合。Proteus提供了大量的元件库有RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件,它可以仿真单片机和周边设备,可以仿真51系列、AVR,PIC等常用的MCU,与keil和MPLAB不同的是它还提供了周边设备的仿真,只要给出电路图就可以仿真。

武汉理工大学《单片机原理与应用》课程设计说明书 系统仿真

5.1 系统总电路图

根据课程设计任务书的要求,本次课设设计的系统总电路图如下图所示。

图5.1 系统总电路图

5.2 系统仿真结果

系统仿真结果图如下图所示,由图中可以看出,LCD显示的值为900Hz,LED显示的值为886Hz,在误差允许的范围内,二者近似相等,符合课设任务书要求。

图5.2 系统仿真结果图

武汉理工大学《单片机原理与应用》课程设计说明书 系统硬件调试

6.1频率计的测试 如图6.1为频率计的测试实物拍摄图。其中函数信号发生器输出频率为1000Hz、幅值为5V的方波信号时,数字频率计测得的频率为996Hz,在误差允许的范围内,二者相等,符合课设任务书要求。

图6.1 频率计测试的实物拍摄图

6.2 低频方波信号发生器的测试

图6.2 低频信号发生器测试的实物拍摄图

武汉理工大学《单片机原理与应用》课程设计说明书

如图6.2为低频信号发生器测试的实物拍摄图。其中低频方波信号发生器输出频率的LED显示值为400Hz,经过示波器检测得到幅值为4.88V,频率为396.2Hz,在误差允许的范围内,二者相等,符合课设任务书要求。

6.3 低频方波信号发生器、数字频率计的综合测试

如图6.3为低频方波信号发生器检测频率计的实物拍摄图。其中低频方波信号发生器输出频率的LED显示值为300Hz,经过数字频率计检测得到频率的LCD显示值为297Hz,在误差允许的范围内,二者相等,符合课设任务书要求。

图6.3 低频方波信号发生器检测频率计的实物拍摄图

武汉理工大学《单片机原理与应用》课程设计说明书 心得体会

本次设计的过程和结果都给了我很多感触。初次拿到课程设计的题目时,只是对频率有一定的理解,至于怎么设计,几乎没有什么想法。在同学的指导和讲解下,对频率计的介绍有了一定的了解。后来通过不断的学习和查阅资料,终于清楚的知道了频率计的基本情况和设计的方案有了一定的理解。通过对各种性能的比较和所学知识能实现的状况,对本次课程设计进行了设计,最后进行的是课设报告的撰写。

通过本次设计,让我学会了从系统的高度来考虑设计的方方面面,对电路的设计和研究有了更深刻的体会;让我了解到软件的设计是建立在对硬件了解的基础上的,特别是对单片机的功能,引脚定义和内部结构要有较为详细的了解,此外对电路板中所用到的各个芯片的引脚和功能,也要进行了解;在编写程序时,进行模块化设计,以严谨的态度进行编程,避免出现低级错误,养成为程序添加注释和说明的好习惯,以便自己的修改和阅读者轻松的了解程序的各部分及整体的功能。

武汉理工大学《单片机原理与应用》课程设计说明书

参考文献

[1]李华.单片机实用接口技术[M].航空航天大学出版社.2006.[2]张鹏.王雪梅.单片机原理与应用实例教程[M].海军出版社.2007.[3]赫建国等.单片机在电子电路设计中的应用[M].清华大学出版社.2005.[4]康华光.电子技术基础(模拟部分)[M].高等教育出版社.1998. [5]吴清平.单片机原理与应用实例教程[M].海军出版社.2008.武汉理工大学《单片机原理与应用》课程设计说明书

#include #define uint unsigned int #define uchar unsigned char signed long count=0;int i=0, x=0;sbit RS=P1^0;sbit RW=P1^1;sbit E=P2^5;sbit dula=P2^6;sbit wela=P2^7;unsigned int shu[]={0x30,0x31,0x32,0x33,0x34,0X35,0x36,0x37,0x38,0x39};//数字的ASCII码放在数组中

uchar code table[]=“made by Li Houmin”;uchar num;

void delay(int count){ int p;

//延时

while(count--)for(p=0;p<110;p++);}

void write_com(unsigned int n){

RS=0;P0=n;delay(5);

//写指令

E=1;delay(5);

武汉理工大学《单片机原理与应用》课程设计说明书

E=0;}

void write_data(unsigned char t){ RS=1;P0=t;delay(5);

//写数据

E=1;delay(5);E=0;}

void time1_int(void)interrupt 3 { TH1=TL1=0;TR1=1;x++;}

void time0_int(void)interrupt 1 { TH0=(65535-50000)/256;//装初值,定时50ms TL0=(65535-50000)%256;i++;

if(i==20){ i=0;//1s时间已到

武汉理工大学《单片机原理与应用》课程设计说明书

TR1=0;//关闭计数器1 count=65536*x+256*TH1+TL1;x=0;//重新装初值 //重新启动计数器器1 TH1=TL1=0;TR1=1;} }

void show(){

write_com(0x85);write_data(shu[count/100000]);delay(5);

//在第一行第五列显示十万位

write_com(0x86);write_data(shu[(count/10000)%10]);delay(5);write_com(0x87);write_data(shu[(count/1000)%10]);delay(5);write_com(0x88);write_data(shu[(count/100)%10]);delay(5);write_com(0x89);write_data(shu[(count/10)%10]);delay(5);write_com(0x8a);write_data(shu[count%10]);delay(5);

//显示万位 //显示千位 //显示百位

//显示十位

//显示个位

write_com(0x83);write_data(0x66);delay(5);//显示频率表示的字符f write_com(0x84);write_data(0x3d);delay(5);//显示字符= write_com(0x8b);write_data(0x48);delay(5);//显示字母H write_com(0x8c);write_data(0x7a);delay(5);//显示字母z write_com(0x80+0x40);

}

void main()

//第二行显示

for(num=0;num<17;num++){ write_data(table[num]);delay(5);}

武汉理工大学《单片机原理与应用》课程设计说明书

{ TMOD=0x51;

//T1计数、T2定时,且都工作在方式1 TH1=0x00;TL1=0x00;TH0=(65535-50000)/256;//装初值,定时50ms TL0=(65535-50000)%256;EA=1;

ET0=1;ET1=1;

TR0=1;TR1=1;

dula=0;wela=0;RW=0;E=0;write_com(0x01);write_com(0x38);write_com(0x0c);write_com(0x06);while(1){ show();

delay(5);} }

//开总中断

//中断允许

//启动定时器

//显示清零,数据指针清零

//设置16X2显示5X7点阵,8位数据口

//设置开显示,显示光标且闪烁

基于51单片机的数字频率计的设计概要 篇2

随着科技的不断发展, 频率的测量在各个方面都发挥着重要的作用。 大多数频率计由时序逻辑电路构成, 具有运算速度慢, 体积较大等缺点。 针对以上不足, 设计了该频率计。

在目前所有的基础理论和专业技术基础上, 该设计以STC89C51 为该数字频率计的控制核心, 采用C语言进行程序编程, 单片机进行智能控制, 之后结合外围的设计电路, 最终设计出数字频率计。 该频率计具有诸多优点, 在各种测试场所都可以有广泛的应用。 通过本设计, 使自己对频率计有了更深的认识, 为今后的教学工作打下基础。

2 系统总体设计

2.1 设计概述

数字频率计作为一种便捷的测量工具, 在科技领域中发挥着越来越重要的作用, 如: 通信仪器、 视频设备等, 是必不可少的测量仪器, 主要用它来测量信号的频率, 并在显示模块上以十进制数显示出来。

本数字频率计测量频率采用的是定时、 计数的方法, 显示器采用LCD1602 液晶屏, 测量范围为100Hz~1MHz的正弦波。

2.2 基本原理

该设计的基本设计原理是通过放大整形电路及单片机的计算将被测信号的频率显示在显示装置上, 用计数的方法实现对信号频率的测量。

本数字频率计的核心部分为单片机, 结合定时器和计数器来实现对信号频率和周期的测量。 通过程序的编写来实现1s的闸门时间的设定, 以及计数和中断。 可以测得在1s的闸门时间内通过的脉冲数目, 利用该脉冲数目可以间接地得出原待测信号的频率, 可以综合得出一个表达式: f=1/N, 式中N即为在单位时间内测得的经过整形的脉冲信号的个数[1]。

3 系统硬件

3.1 系统结构硬件框图

为了实现该数字频率计的设计, 该硬件结构从总体上讲可以分为3 大部分: 信号处理部分、 信号采集部分及液晶显示部分。 单片机部分主要负责脉冲信号的采集, 由它完成对脉冲信号的计数和显示等, 信号处理部分主要实现将被测信号转换为脉冲信号便于计数, 外部硬件结构还有LCD显示、信号处理等。 各个部分之间的关系如图1 所示[2]。

3.2 硬件电路

3.2.1 信号放大整形模块

放大整形电路包括衰减器、 放大器、 74HC14 施密特触发器。

74HC14: 74HC14 是一款兼容TTL器件引脚的高速CMOS器件, 逻辑功能为6 路斯密特触发反相器, 其耗电量低, 速度快。 在电子工业中, 现已基本取代74LS14 (TTL器件)。

在实际情况中信号是多种多样的, 幅度是不一定的, 会使得信号不利于测量, 幅度大会造成对器材的损害, 幅度小信号可能不能被很好地采集。

3.2.2 分频模块

分频模块主要由74HC390 十进制计数器构成, 如图2 所示。

为了满足要求中的测量范围, 本设计采用两个74HC390,完成100 次分频。

3.2.3 LCD显示模块

1602采用标准的16脚接口,其中:

第1脚:VSS为电源地;

第2 脚: VCC接5V电源正极;

第3 脚: 可以调节屏幕的对比度。 V0 为液晶显示器对比度调整端, 接正电源时对比度最弱, 接地电源时对比度最高(对比度过高时会产生 “ 鬼影” , 使用时可以通过一个10K的电位器调整对比度);

第4脚:该引脚RS为数据指令选择端;

第5脚:该引脚RW为数据读写选择端;

第6脚:E引脚为使能端;

第7~14 脚: D0~D7 为8 位双向数据端;

第15~16 脚: 空脚或背灯电源。 15 脚背光正极, 16 脚背光负极。

4 系统软件

4.1 程序流程图

如图3 所示。

4.2 工作原理

单片机的计数器输入口接受整形电路输出的脉冲信号,将定时器0 打开并初始化, 设置为1s的闸门时间, 则信号的频率就是计数器所记得的脉冲信号的个数。 将数据给到LCD液晶显示屏上显示。

5 测试

5.1 测试方案

(1) 软件仿真, 将程序在电脑上编译运行, 检查结果是否正确。

(2) 将各个模块连接在一起, 输入单个脉冲信号进行装置的逻辑检测。

(3) 将程序烧录至单片机上, 并通入待测信号, 检查输出数据是否正确。

5.2 测试结果

如表1 所示。

6 结语

以STC89C51 单片机为核心的数字频率计, 性能稳定、 成本低廉、 易于功能拓展、 人机交互性良好、 有利于工业化生产。 该频率计具有诸多优点, 在各种测试场所都可以有广泛的应用。 通过本设计, 锻炼了自己综合应用知识的能力, 为今后的工作打下基础。

摘要:提出一种数字频率计的设计方案,以单片机STC89C51为控制核心,实现频率的测量。硬件由放大电路、整形电路、计数显示电路组成;软件由数据显示模块和信号频率测量模块组成。

基于51单片机的数字频率计的设计概要 篇3

【关键词】 LED显示屏 Proteus仿真 单片机 点阵字库

1 引言

LED显示屏具有功耗小、亮度高,寿命长,性能稳定,驱动简单以及可视距离远等优点,已经成为最受欢迎的信息传播媒体工具。目前,LED显示屏应用十分广泛,如城市广场群显示、道路交通信息显示、世界杯体育场馆显示比赛信息、世界博览会会会场馆照明等各个领域。显示汉字信息时,一般需要多个LED点阵显示组合,最常见的组合方式有8x8,16×16,32×16等。本文将介绍由Proteus软件进行的LED显示屏仿真电路设计。

2 Proteus软件介绍

Proteus 7.4软件集电路设计、制版及仿真等多种功能于一身,是目前世界上较为先进、完整的嵌入式系统设计与仿真平台。它是一种可视化的支持多种型号单片机(如51 、PIC、AVR 等),并且支持与当前流行的单片机开发环境( Keil、IAR等) 连接调试的软硬件仿真系统。针对微控制系统与外设的混合电路的电路仿真、软件仿真、系统协同仿真,做到了一体化和互动效果。

PROTEUS 是纯软件环境,可免费下载。 在进行单片机系统的开发时,可以先在软件环境中模拟通过,再进行硬件的投入。这样处理,不仅省时省力,也可以节省因为方案不正确所造成的硬件投入的浪费。本文利AT89C5l单片机作为主控制器,采用Proteus软件实现对16×16 LED点阵汉字的分批显示。仿真运行通过后再进行点阵显示电路制作,大大缩减实际开发周期,节约了开发成本。

3 硬件電路设计

点阵式LED滚动汉字显示屏硬件电路分单片机控制部分、显示驱动、显示模块。设计框图如图1所示。

电路设计的核心是利用单片机读取显示字型码,通过驱动电路对16×16 LED点阵进行动态列扫描,以实现汉字的移动显示。设计选用的单片机为ATMEL公司的AT89C51,显示屏采用16×16 LED点阵。由于Proteus软件目前版本中还没有16×16点阵模块,设计中采用4个8×8点阵模块组合成1个16×16点阵模块。

LED显示屏驱动电路分阳极驱动和阴极驱动。阳极驱动电路向16×16点阵送字型码,本设计采用74HC595。阴极驱动电路对16×16点阵进行列扫描,本设计采用74HCl54。

4 软件设计

AT89C51单片机只有8位数据总线,要向16×16点阵送出16行阳极驱动,需要送两次,或先送上8行,或先送下8行,为了能够实现每一列字型码的完整显示,利用两片74HC595进行锁存,否则会出现字型残缺现象。

16×16共阴极LED点阵由4个8×8点阵构成,需要显示汉字字符串“单片机”,可通过建立数据表格的形式进行。通过16×16点阵汉字字模提取软件,可提取各显示汉字的字模数据, “单片机”字型码表如下:

本设计利用了Keil μVision2软件进行程序编写。 在新建Keil项目时选择AT89C51单片机作为CPU;编写C语言源程序并检查;确认程序无误后在“Options For Target”对话窗口中,选中“Output”选项中的“Create HEX File”,编译链接后就可以生LED.HEX文件。

5 系统调试与仿真

在利用Proteus、 Keil μVision2软件里分别设计好LED显示屏的硬件电路和程序部分后就可以进行系统调试了。Proteus仿真时,单片机需要加载程序,加载程序为从软件设计中获得的LED.HEX文件。在Proteus ISIS中,选中AT89C51并单击鼠标左键,对AT89C51进行设置,设置单片机时钟频率为12MHz,按照正确的文件路径加载LED.HEX文件。设置完毕相应参数后就可以开始仿真了。仿真过程中如有硬件问题可在Proteus软件中直接修改,如有软件问题可在Keil μVision2中修改,通过Keil与Proteus的联合调试就可以得到满意的结果。

6 结论

利用Proteus实现了对点阵式LED滚动汉字显示屏的仿真,显示了“单片机”3个字,达到了良好的设计效果。该仿真电路接近实际电路,可以直接由该电路利用相关软件设计印制电路板,加上电源、时钟和复位电路,就可以制作出实际的点阵式LED汉字显示屏。通过前期仿真缩短了开发周期,降低了开发成本,不失为进行单片机系统设计的有效手段。

参考文献:

[1] 朱清慧,张凤蕊,翟天嵩,等. Proteus 教程2电子线路设计、制版与仿真[M]. 北京:清华大学出版社,2008 :2892310

[2] 朱清慧, 王志奎. Proteus 在L ED 点阵滚动显示屏设计中的应用[J].液晶与显示, 2009(4)

[3] 孙凌燕,黄允千. Proteus 与Keil 软件的整合在单片机实验开发中的应用[J]. 实验室研究与探索, 2008(4)

基于51单片机的数字频率计的设计概要 篇4

一、功能要求

要求甲车道和乙车道两条交叉道路上的车辆交替运行,每次通行时间都设为25秒,黄灯先亮5秒钟,才能变换运行车道;黄灯亮时,要求每秒钟闪亮一次。

二、电路图

说明:1)每一位数码管位选要分开,对应IO口参照程序中红色部分 2)图示数码管为共阳,没加驱动数码管显示较暗,建议加驱动

三、程序

//TrafficLight.c #include“reg52.h”

//IO口定义 sbit red_1 =P2^0;//南北方向 sbit red_2 =P2^3;//东西方向 sbit yellow_1 =P2^1;sbit yellow_2 =P2^4;sbit green_1 =P2^2;sbit green_2 =P2^5;sbit com1_1 =P3^6;//十位 南北方向 数码管位选 sbit com1_2 =P3^7;//个位 南北方向 sbit com2_1 =P3^4;//十位 东西方向 sbit com2_2 =P3^5;//个位 东西方向

//全局变量 char time=30;//倒计时

unsigned char num1=0,num2=0;//辅助计时 unsigned char flag1=0,flag2=0;//黄灯闪标志位 unsigned char shi1,shi2,ge1,ge2;//数码管十位个位

const unsigned char ledNum[] =

{// 0 1

A

b

c

d

E

F

不显示-o(18)H(19)h(20)C(21)0(22)n(23)0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8e,0xFF,0xbf,0xa3,0x89,0x8b,0xc6,0xc0,0xab };//共阳数码管

//中断优先级别T0>T1,数码管显示中断间隔2ms,计时时间间隔50ms //计时要求比较精确,间隔长,不应该被打断,故中断优先级要高,使用T0 //数码管中断可以被打断,打断时间较短,不会影响显示,使用T1 //在交通灯中,计时和数码管显示一直进行,故定时器开启后不用停止 void InitInter(void){ TMOD=0x11;//设置定时器工作方式为16位计时器

TH0=(65535-45872)/256;//11.0592M晶振,50ms TL0=(65535-45872)%256;TH1=(65535-1835)/256;//11.0592M晶振,2ms TL1=(65535-1835)%256;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;}

void Display(void){ static unsigned char i=1;

switch(i){ case 1:

com2_2=0;

P0=ledNum[shi1];

com1_1=1;

break;case 2:

com1_1=0;

P0=ledNum[ge1];

com1_2=1;

break;case 3:

com1_2=0;

P0=ledNum[shi2];

com2_1=1;

break;case 4:

com2_1=0;

P0=ledNum[ge2];

com2_2=1;

break;

default:;}

i++;if(i>4)i=1;}

//红灯可以直接变成绿灯,但绿灯必须先变成黄灯再变红灯 void main(void){ bit i=0;InitInter();

while(1){

red_1=0;//0为亮

red_2=1;

green_2=0;

time=30;

while(time>5)

{

shi1=time/10;

ge1=time%10;

shi2=(time-5)/10;

ge2=(time-5)%10;

}

green_2=1;

yellow_2=0;

flag2=1;

num2=0;

while(time>0)

{

shi1=time/10;

ge1=time%10;

shi2=time/10;

ge2=time%10;

}

flag2=0;

yellow_2=1;

red_2=0;

red_1=1;

green_1=0;

time=30;

while(time>5)

{

shi2=time/10;

ge2=time%10;

shi1=(time-5)/10;

ge1=(time-5)%10;

}

green_1=1;

yellow_1=0;

flag1=1;

num2=0;

while(time>0)

{

shi2=time/10;

ge2=time%10;

shi1=time/10;

ge1=time%10;

}

flag1=0;

yellow_1=1;

//red_1=0;

//green_2=0;} } void Timer_0(void)interrupt 1//计时 { TH0=(65535-45872)/256;TL0=(65535-45872)%256;num1++;if(num1>=20){

num1=0;

time--;

//if(time<0)time=30;

//处理time,显示方式

} if(flag1||flag2){

num2++;

if(num2>=10)

{

num2=0;

if(flag1)yellow_1=~yellow_1;

if(flag2)yellow_2=~yellow_2;

} } }

void Timer_1(void)interrupt 3 { TH1=(65535-1835)/256;//11.0592M晶振,2ms TL1=(65535-1835)%256;

基于51单片机的数字频率计的设计概要 篇5

一.课程设计背景

当今时代,是一个新技术层出不穷的时代。在电子领域,尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。过去习惯于传统电子领域的工程师、技术员正面临着全新的挑战,如不能在较短时间内学会单片机,势必会被时代所遗弃,只有勇敢地面对现实,挑战自我,加强学习,争取在较短的时间内将单片机技术融会贯通,才能跟上时代的步伐。

它所给人带来的方便也是不可否定的,它在一块芯片内集成了计算机的各种功能部件,构成一种单片式的微型计算机。20世纪80年代以来,国际上单片机的发展迅速,其产品之多令人目不暇接,单片机应用不断深入,新技术层出不穷。20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。本设计是由单片机实现的模拟计算器,它不仅能实现数据的加减乘除运算,而且还能使数据及其计算结果在数码管上显示出来,能够实现0-256的数字四则运算。本设计是用单片机AT89C51来控制,采用共阳极数码显示,软件部分是由C语言来编写的。设计任务

二、元器件清单及简介

89c51型芯片 一片

排阻 两个

晶振12MHZ 一个

电容22uf 两个

面包板 三个

导线 若干

三、设计原理及分析

根据功能和指标要求,本系统选用MCS 51 单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计考虑如下: ①由于要设计的是简单的计算器,可以进行四则运算,对数字的大小范围要求不高,故我们采用可以进行四位数字的运算,选用8 个LED 数码管显示数据和结果。

②另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可。系统模块图:

2.1 输入模块:

键盘扫描计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式。为此,我们引入了矩阵键盘的应用,采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图所示:一般有16 个键组成,在单片机中正好可以用一个P 口实现16 个按键功能,这种形式在单片机系统中也最常用。

以上键盘从上到下依次编号为1,2,3,4,D,C,B,A 1

由图 3 矩阵键盘内部电路图可以知道,当无按键闭合时,P10~P13 与P14~P17 之间开路。当有键闭合时,与闭合键相连的两条I/O 口线之间短路。判断有无按键按下的方法是:第一步,置列线P14~P17 为输入状态,从行线P10~P13 输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。第二步,行线轮流输出低电平,从列线P14~P17 读入数据,若有某一列为低电平,则对应行线上有键按下。综合一二两步的结果,可确定按键编号。但是键闭合一次只能进行一次键功能操作,因此须等到按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。2.2 运算模块:(单片机控制)AT89C51 单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。[3][5]单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以进行很快地实现运算功能。2.3 显示模块:

LED 显示发光二极管LED 是单片机应用系统中的一宗简单而常用的输出设备,其在系统中的主要作用是显示单片机的输出数据、状态等。因而作为典型的外围器件,LED 显示单元是反映系统输出和操作输入的有效器件。LED 具备数字接口可以方便的和大年纪系统连接;它的优点是价格低,寿命长,对电压电流的要求低及容易实现多路等,因而在单片机应用系统中获得了广泛的应用。[2][4]通常的数码显示器是由7 段条形的LED 组成(如图4 所示),点亮适当的字段,就可显示出不同的数字。我们采用8 段数码管,其中位于显示器右下角的LED 作小数点用。LED 显示器有两种不同的形式:共阴极和共阳极。本次设计采用共阴极接法(如图5所示)。

3、软件设计

在程序设计方法上,模块化程序设计是单片机应用中最常用的程序设计方法。设计的中心思想是把一个复杂应用程序按整体功能划分成若干相对独立的程序模块,各模块可以单独设计、编程和调试,然后组合起来。这种方法便于设计和调试,容易实现多个程序共存,但各个模块之间的连接有一定的难度。根据需要我们可以采用自上而下的程序设计方法,此方法先从主程序开始设计,然后再编制各从属程序和子程序,层层细化逐步求精,最终完成一个复杂程序的设计。这种方法比较符合人们的日常思维,缺点是一级的程序错误会对整个程序产生影响。功能流程图如下:

4、硬件原理 以下为简易计算器的总体电路图

加运算:

减运算:

乘运算:

除运算:

清零: 四.总结

通过此次单片机实训设计,我们学到了很多东西,在器件的了解和器件选择上有个明确的认识,并在程序的设计,及理论在实践反面的运用能力有巨大的提高。

这次单片机课程设计由我们六位同学经过一周努力设计得到。软件的编程要我们不断的调试,最终我们终于完成了单片机实训课程设计,很高兴它能按着设计思想与要求运动起来。

当然,这其中也有很多的问题。第一、不够细心,由于对课本理论的不熟悉导致的编程错误,对于器件的实际情况的不了解,理论与实践的差距导致我们在设计实际电路时出现了很多错误,使得实验不能一次通过。第二、是在学习态度上,这次课程设计是对我们的学习态度的一次体验。对于这次单片机综合课程实习,我们的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨,这次的课程设计我们所遇到的问题多半是由于我们不够严谨。第三、在做人上,我们认识到,无论做什么事情,只要你足够坚强,有足够的毅力和决心,有足够的挑战困难的勇气,就没什么办不到的。还有就是团队的合作精神。

在这次难得的课程设计过程中我们锻炼了自己的思考能力和动手能力,加强了我们思考问题的完整性和实际生活联系的可行性。在方案设计选择和芯片的选择上,培养了我们综合应用单片机的能力,对单片机的各个管脚的功能也有了进一步的认识。还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题、解决问题的能力。

五.参考文献

《单片机原理及应用》 张毅刚 高等教育出版社

《MCS—51单片机应用设计》 张毅刚 哈尔滨工业大学出版社 《MCS—51系列单片机实用接口技术》 李华 北京航空航天大学出版社 《单片机应用技术选集》 何立民 北京航空航天大学出版社 《单片机原理及其接口技术》 胡汉才 《数码管显示驱动和键盘扫描控制器CH451及其应用》

清华大学出版社 施隆照 /*********************************************** **实现说明:

1:变量flag_fuhao为键入+、-、*、/运算符标志

(即当前一个键值为+、-、*、/运算符时,flag_fuhao为1,其他键值则flag_fuhao置零,其用在显示时)

2:变量flag_shu数输入情况,flag_shu为0时,输入的符号无效(flag_shu为2时,变量fuhao更新为新键值)

*********************************************/ #include #define uchar unsigned char #define uint unsigned int #define duan P0//数码管显示段选定义 #define wei P2//数码管显示位选定义 #define key P3//键盘接口定义

sbit OFF = P1^0;//关机键定义

float shu1,shu2;//进行运算的两个变量数 uchar num;////键盘扫描返回值

char flag1,flag_shu,flag_fuhao,fuhao,newkey,update;

//flag1开机标志newkey新按键标志,fuhao运算符,update表示等于号 //之后紧接着输入的是数的话则清零shu1

char key_shu;//按键值 char ge=0xdf;//char code Wela[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//六位数码管的位选

unsigned char code Duan[]={0x3f,0x06,0x5b, //

0 1 2 0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};// 3 4 5 6 7 8 9 无显示

共阴极数码管

// 函数声明

uchar keyscan();//键盘扫描函数

void display(float);//数码管显示函数

void delay(uint i)//延时函数 {

while(i--);}

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

主函数

************************************************/ void main(){

flag1=0;//标志关机

while(1){

if(keyscan()==15)//开机检测

{

flag1=1;//标志开机

shu1=shu2=fuhao=flag_shu=newkey=0;//初始化变量

while(flag1)//判断是否已开机

{

if(!flag_fuhao)

display(shu1);//如果输入的不是

else

display(shu2);

key_shu=keyscan();

if(newkey==1)//有新键值

{

if(key_shu==15)//按下ON/C键,清零

{

flag_fuhao=update=0;

shu1=shu2=fuhao=flag_shu=newkey=0;

}

else if(key_shu==14&&flag_shu==1&&fuhao)//按下“=”

{

switch(fuhao)

{

case 10:shu1=shu2+shu1;break;

case 11:shu1=shu2-shu1;break;

case 12:shu1=shu2*shu1;break;

case 13:shu1=shu2/shu1;break;

}

flag_fuhao=0;

fuhao=0;

update=1;

} 10

else if((key_shu>=0)&&(key_shu<=9))//按下数字键

{

if(update)

shu1=0;

if(shu1<100000)

{

shu1=key_shu+shu1*10;

flag_shu=1;

}

update=0;

flag_fuhao=0;

}

else if((key_shu>=10)&&(key_shu<=13))//按下运算符

{

flag_fuhao=1;//表示按下了运算符号键

update=0;

if(flag_shu==1)//表示之前有数字键按下

{

if(fuhao==0)//表示计算时只有一次按下运算符,如1*8=8,第二个数字后面是=,而不是其他运算符

{

shu2=shu1;

shu1=0;

fuhao=key_shu;//将按下的运算符号的键的值赋值给fuhao,记录前一个运算符,以便按=后实现相应的计算。

flag_shu=2;

}

else

//表示计算时按了多次运算符,如1*8*9=72,第二个数字后面并没有=,而是*

{

switch(fuhao)

{

case 10:shu2=shu2+shu1;break;

case 11:shu2=shu2-shu1;break;

case 12:shu2=shu2*shu1;break;

case 13:shu2=shu2/shu1;break;

}

shu1=0;

fuhao=key_shu;//将按下的运算符号的键的值赋值给fuhao,记录前一个运算符,以便按=后实现相应的计算。

}

}

else if(flag_shu==2)

fuhao=key_shu;//将按下的运算符号的键的值赋值给fuhao,记录前一个运算符,以便按=后实现相应的计算。

}

newkey=0;

}

}

} } }

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

数码管显示函数

************************************************/ void display(float dis_shu){

long zhengshu=(long)dis_shu;char dis_flag,dis_aa,dis_zero=0;uchar dis_data[6]={0,0,0,0,0,0},xiaoshu[6]={0,0,0,0,0,0};

ge=0xdf;//11 01 111 if(zhengshu>99999)dis_flag=6;else if(zhengshu>9999)dis_flag=5;else if(zhengshu>999)dis_flag=4;else if(zhengshu>99)dis_flag=3;else if(zhengshu>9)dis_flag=2;else dis_flag=1;

dis_shu=dis_shu-zhengshu;

for(dis_aa=0;(dis_aa<6-dis_flag)&&(dis_shu=(dis_shu-(char)dis_shu)*10);dis_aa++){

xiaoshu[dis_aa]=(long)dis_shu;}

for(dis_aa=0;(dis_aa<6-dis_flag);dis_aa++){

if(dis_zero||xiaoshu[5-dis_flag-dis_aa])12

{

duan=Duan[xiaoshu[5-dis_flag-dis_aa]];

wei=ge;

ge>>=1;

delay(100);

wei=0xff;

dis_zero=1;

} }

// for(dis_aa=0;dis_aa

dis_data[dis_aa]=zhengshu%10;

zhengshu=zhengshu/10;} //数码管段选

for(dis_aa=0;dis_aa

if(0xdf!=ge&&dis_aa==0)

{

duan=Duan[dis_data[dis_aa]]|0x80;

wei=ge;

ge>>=1;

delay(100);

wei=0xff;

}

else

{

duan=Duan[dis_data[dis_aa]];

wei=ge;

ge>>=1;

delay(100);

wei=0xff;

}

} //数码管位选 }

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

键盘扫描函数

************************************************/ uchar keyscan()// 函数返回按键的值

{

//将第一行线置低电平,其余行线全部为高电平,即扫描第一行

key=0xfe;

if(key!=0xfe){

delay(500);//延时消抖操作

if(key!=0xfe)

{

switch(key)

{

case 0xee:num=7;break;//7

case 0xde:num=8;break;//8

case 0xbe:num=9;break;//9

case 0x7e:num=13;break;//除号 ”/”

}

newkey=1;

delay(500);

while(key!=0xfe)

{

if(flag1)//如果已开机

if(!shu1&&num>=0&&num<=9)//如果输入的第一个数不为0且第二个数为数字,则显示第二个数字,否则显示第一个数字

display(num);

else

display(shu1);

}

return num;

} }

//将第二行线置低电平,其余行线全部为高电平,即扫描第二行

key=0xfd;if(key!=0xfd){

delay(500);//延时消抖操作

if(key!=0xfd)

{

switch(key)

{

case 0xed:num=4;break;//4

case 0xdd:num=5;break;//5

case 0xbd:num=6;break;//6

case 0x7d:num=12;break;//*

}

newkey=1;

delay(500);

while(key!=0xfd)

{

if(flag1)

if(!shu1&&num>=0&&num<=9)//如果输入的第一个数不为0且第二个数为数字,则显示第二个数字,否则显示第一个数字

display(num);

else

display(shu1);

}

return num;

} }

//将第三行线置低电平,其余行线全部为高电平,即扫描第三行

key=0xfb;if(key!=0xfb){

delay(500);

if(key!=0xfb)

{

switch(key)

{

case 0xeb:num=1;break;//1

case 0xdb:num=2;break;//2

case 0xbb:num=3;break;//3 15

case 0x7b:num=11;break;//-

}

newkey=1;

delay(500);

while(key!=0xfb)

{

if(flag1)

if(!shu1&&num>=0&&num<=9)//如果输入的第一个数不为0且第二个数为数字,则显示第二个数字,否则显示第一个数字

display(num);

else

display(shu1);

}

return num;

} }

//将第四行线置低电平,其余行线全部为高电平,即扫描第四行

key=0xf7;if(key!=0xf7){

delay(500);

if(key!=0xf7)

{

switch(key)

{

case 0xe7:num=15;break;// ON/C:开关机按键

case 0xd7:num=0;break;// 0

case 0xb7:num=14;break;// =

case 0x77:num=10;break;// +

}

newkey=1;

delay(500);

while(key!=0xf7)

{

if(flag1)

if(!shu1&&num>=0&&num<=9)//如果输入的第一个数不为0且第二个数为数字,则显示第二个数字,否则显示第一个数字

display(num);

else

display(shu1);

} 16

return num;

} }

//判断关机按键是否被按下 if(!OFF){

delay(500);//延时消抖操作

if(!OFF)

{

flag1=0;//

}

} return 100;

}

基于51单片机的数字频率计的设计概要 篇6

关键词:单片机,数字秒表,汇编语言,仿真

1 概述

单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器或计时器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统。单片机与编程语言的结合可以快速高效的实现各种功能,该文结合单片机设计实现了一种基于AT89C51单片机的数字秒表。

2 系统概述

2.1 设计任务

数字秒表设计由单片机AT89C51、数码管、开关、电阻、电容等部分组成。其功能要求是用AT89C51设计一个2位LED数码显示的“秒表”,显示时间为00-99秒,每秒自动加一。另外还设计了一个“开始”按键、一个“复位”按键和一个“暂停”按键。按“开始”按键,开始计数,数码管显示从00开始每秒自动加一;按“复位”按键,系统清零,数码管显示00;按“暂停”按键,系统暂停计数,数码管显示当时的计数。

2.2 总体方案

系统主要有三部分构成:按键控制信号,单片机软件处理,数码管显示。电路运行时,由开关按键决定其运行方式,经过单片机内部的程序进行相应的处理,在数码管上显示出来。利用12M晶振的一个机器周期为1微秒,通过循环产生1秒时间延迟,扫描单片机中所存放的时间值(可正记时,也可倒计时),并通过输出显示在数码管上。此外,数码管各段连接了上拉电阻,是为了保证引脚外接的按键在未按下时,作为电流负载一直保持引脚为低电平。系统整体设计如图1所示。

3 数字秒表的proteus软件仿真电路设计

3.1 整体仿真电路

Proteus软件仿真设计如图2所示。

3.2 AT89C5l单片机和数码管显示电路的接口设计

使用动态显示电路接法,LED灯采用共阳极数码管,电路中采用P0口输出,并联控制两个数码管的8个段选控制端,P2.6、P2.7作为分别采用两个控制LED数码管的位选控制端,其中P2.6接显示个位数,P2.7接十位数,P0.0—P0.7对应了两位数码管的a,b,c,d,e f,g。

3.3 按键控制信号

三个按键采用独立式键盘接法,开始按键接P3.5,暂停按键接P3.6,清零按键接P3.7,低电平有效,三个按键功能均在子程序中显示。定时器0中断程序主要是延时程序。

3.4 其他管脚的设计

单片机中的Vss端接地,Vcc端接+5V电源,另外,三极管发射极端也接+5V电源,保证数码管有足够的电源供应。

4 计时器的软件程序设计

软件设计的思路为:在这个复杂的程序中,先根据设计的总体要求划分出各功能程序模块,分别确定主程序、子程序以及中断服务程序结构,并对各程序模块占用的资源进行统一的调配,最后根据流程图绘制具体的程序。因此在这个秒表程序中可划分为主程序、键盘控制、秒表计时程序三大模块。其中主程序完成初始化作用,动态显示程序,键盘控制程序,秒表计时程序等,延时程序由定时器中断服务子程序构成。

主程序:即初始化程序,用EQU命令首先对三个按键进行了定义,规定了堆栈指针和数据指针的首地址,对定时器进行设定,选用定时器0为工作方式1,50ms为定时时间,则要定时1s可以循环20次,设置中断程序的入口,并开中断EA,ET0等。

子程序:包括按键功能子程序和显示子程序。按键子程序对三个按键功能进行设定,其中P3.5口起到开始的功能,P3.6口连接的按键可以控制数码管的进度,P3.7对数码管数字进行复位,使数码管清零。三个按键均为低电平有效,JB命令先判断按键是否按下,若按下则跳转到显示子程序,JNB命令判断按键按下后是否弹起,若弹起来就执行开始、暂停、清零等功能。显示子程序:定义了P2.6、P2.7两个位选口,在单片机输出时,先选择字位选口,然后在所在的位口上进行字形选择,选择要点亮的字形。

中断程序:中断程序即定时器延时程序,当中断来临时,定时器重新装入初值,判断是否循环了20次,若循环20次说明定时器延时到达1s,就进行加一运算。程序设计流程图如图3所示。

重要程序段说明:

将0到99的数据通过对10整除和对10求余,将数据的个位和十位分开。

这段程序是将要显示的数字分别放到两个数码管上,使两个数码管分别显示十位和个位数字。

5 结论

该文使用AT89C51单片机设计了一款具有计时开始、暂停、复位功能的数字秒表,利用Proteus和Keil软件进行了仿真及调试,达到了期望的效果。系统结构简单,抗干扰能力强,具有较好的应用前景。

参考文献

[1]李朝青.单片机原理及接口技术[M].北京:北京航天航空大学出版社,2005.

[2]王爽.汇编语言[M].北京:清华大学出版社,2008.

[3]蒋辉平,周国雄.基于Proteus的单片机系统设计与仿真实例[M].北京:机械工业出版社,2009.

基于51单片机的数字频率计的设计概要 篇7

关键词 加减计数器 AT89C51单片机 LED数码显示系统

中图分类号:TH724 文献标识码:A

1设计要求

(1)通过双向计数进行出,入数量加减计算;

(2)区别进出方向,分别进行加减计算;

(3)每一次进出LED显示内部存留净流量;

(4)没有进出信号时,巡回显示存量和时间。

2 硬件电路设计

2.1 设计原理

本设计主要由单片机、中断、液晶显示器等部分组成。其中中断用于实现加减和进行各种功能的实现。由用户通过连接单片机的中断信号,然后实现加减法。

本系统共有两部分构成,即硬件部分与软件部分。其中硬件部分由键盘输入部分、显示部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、按键功能程序、EEPROM读写程序和延时程序等组成。

2.2电路总体构成(见图1)

2.3键盘输入部分

根据设计,我们的模拟交通系统有两个七段码显示倒计时。七段码(a、b、c、d、e、f、g、dp),数码管分别显示:秒数的十位和个位(P3_4十位,P3_5个位)得倒计时。该系统采用共阳极数码管,对于共阳极数码管,其公共端必须接高电平,从而七段码必须低电平显示,所以我们用数组:

a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };來表示。

3主程序流程图

4结束语

本系统采用单片机AT89C51为中心器件来设计加减计数器,由单片机I/O口扩展系统、加减计数及流量时间显示系统、LED数码显示系统、紧急情况中断系统、复位电路等几大部分组成。本系统具有实用性强、操作简单、扩展性强的特点。

参考文献

[1] 宋彩利.单片机原理与C51编程.西安交通大学出版社,2008.

[2] 刘文涛.MCS-51单片机培训教程(C51版).电子工业出版社,2005.

基于单片机的数字密码锁设计 篇8

关键词:AT89S52单片机;1602字符型液晶显示;数字密码锁;报警

中图分类号:TP18文献标识码:A文章编号:1007-9599 (2010) 16-0000-02

SCM-based Design of Digital Code Lock

Li Jingmin

(Jilin Business and Technology College,Changchun130062,China)

Abstract:The application of the current status of building access control devices are analyzed,combined with widely used serial communication technology was designed and implemented a number AT89S52 core lock.Describes the system structure,composition,software and hardware design,and describes the function of the system.

Keywords:AT89S52SCM;1602 character LCD display;Digital code lock;Alarm

電子技术的迅速发展,特别是大规模集成电路的出现,给人类生活带来了根本性的改变。尤其是单片机技术的应用产品已经走进了千家万户。

社会治安仍是当今社会面临的一个重大问题,如何应用高科技手段提高安全防范措施,更有效地阻止犯罪行为的发生是科技工作者义不容辞的责任。目前的形势下,对于普通居民小区,仅仅依靠普通的门锁、防盗门或者报警等系统来保证居民住宅的安全是不够的,鉴于此,本文设计的基于单片机控制带液晶显示和通信功能的数字密码锁,结构简单、性能稳定、智能化程度较高,监控软件具有友好的人机界面和较好的实时性,系统实用性较强。

一、系统硬件结构

本设计以单片机控制为核心,外部包括显示模块、时钟模块、输入模块、报警模块、执行模块和通信模块,如图1.1所示。其中,MCU即微处理单元,对系统的各项数据、指令进行处理;LCD1602显示模块,待机时可显示时钟和日历,切换到密码锁状态时显示各种操作提示;矩阵键盘作为输入模块,用于输入密码,以及配合其他按键对系统进行操作,如切换时钟显示状态和密码锁状态、输入密码等;报警模块,用于当系统被恶意试探或输入密码错误超过三次时发出报警信号;执行模块即是锁的机械动作部件,执行开锁、关锁动作;通信模块,用于与上位机的通信,使上位机对锁具有监控、管理的权限;时钟模块,用于产生时间和日历数据,发送到处理器后显示在LCD上,并且具有短时间掉电仍能保持正常工作的功能。

(一)关键硬件设计

1.单片机选择

单片机是本次设计的核心部分,基于功能可靠性、经济型的考虑,本文采用了AT89S52单片机。

AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统上编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

2.按键设计

经统计,本系统共需要21个按键,包含0-9共10个数字键、确定、重新输入、修改密码、系统复位、关门、关报警、功能切换、时间复位、时间调整、增加、减少。为了节省I/O口,故选用一个非编码式4×4矩阵键盘,采用行扫描法识别按键。

为保证键识别的准确,在电压信号抖动的情况下不能进行状态的输入,为此需进行去抖动处理(消抖)。本文采用软件方法时间延迟以避开抖动,待信号稳定之后,再进行键扫描。一般情况下,延迟消抖的时间约为10-20ms。

3.显示模块的设计

本次系统设计采用常见的1602字符型液晶显示模块。它是专门用于显示字母、数字、符号等的点阵型液晶显示模块,采用8位数据传输方式。它提供显示数据缓冲区DDRAM、字符发生器CGROM和字符发生器CGRAM,可以使用CGRAM来存储自己定义的最多8个5*8点阵的图形字符的字模数据。

4.密码锁动作模块设计

本设计考虑到成本问题,采用一个+5V的继电器来模拟开、闭锁动作。其电路如图2.1所示,当处理器得到开锁信号时给管脚P2.7置低电位,三极管导通,继电器线圈通电,产生磁力吸合常开弹簧开关,使发光二极管亮,模拟开锁动作。当处理器得到关门信号时,给P2.7置高电位,使三极管截止,继电器线圈两端电压为零,失去磁力,弹簧开关恢复断开状态,发光二极管灭,模拟闭锁动作。

5.报警模块设计

本系统带有自动报警功能,当输入密码错误次数超过三次则自动发出报警声、光信号。报警的声音由音乐芯片LX9561驱动一个8欧姆的扬声器产生。报警的光信号由发光二极管产生。

6.时钟功能设计

为了使本设计的功能更加丰富、更人性化,系统增加了时钟、日期显示功能。设计思路是当系统处于待机状态时显示时间和日历,包含二十四小时制时间、阳历日期和星期。当按下切换键时,跳出时间显示界面进入输入密码界面。开锁成功后如果按下关门键则跳出密码锁界面进入时间显示状态。本系统采用最常见的DS1302时钟芯片。

(二)程序设计

本系统的软件设计分为上位机监控软件设计和下位机程序设计,分别予以介绍。

1.上位机监控软件设计

本系统的通信模块的上位机部分采用Visual Basic 6.0编写一个小区密码锁管理系统,主要实现账户管理能力;实时监控各房间的锁的状态;当某房间的锁发出报警时,管理系统同时发出报警并显示报警的房间;并且当下位机开机初始化时首先通过串口向上位机索取本锁的当前密码,以达到掉电密码保护的目的。

2.下位机程序设计

在本次设计的软件设计中,单片机应用软件系统的设计包括功能模块划分、程序流程确立、模块接口设计以及程序代码编写。依据系统的功能要求,将整体软件系统分割成若干个独立的程序模块,如图3.1所示:

二、结论

本次设计在立足密码锁的基础上向智能门禁方向靠拢,主要体现在上位机的管理软件上。目前投入使用的门禁系统一般都可以脱机工作,也可以联网管理,系统主机也分为单门控制机和多门控制机。本设计所完成的是一个家庭用单门控制机,可以完成一扇门的监测及控制。

参考文献:

[1]张毅坤.单片微型计算机原理及应用[M].西安:西安电子科技大学出版,2005

[2]赵茂泰.智能仪器原理及应用[M].北京:电子工业出版社,2006

[3]胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,1996

作者简介:

上一篇:绿色环保植树节倡议书下一篇:安全生产许可证查询