基于51单片机的模数转换(AD)实验设计

基于51单片机的模数转换(AD)实验设计
基于51单片机的模数转换(AD)实验设计

HEFEI UNIVERSITY

单片机课程综述报告

主题基于51单片机的模数转换(A/D)实验设计姓名郭丽丽

专业通信工程

学号1105021006

班级11级通信(1)班

指导老师汪济洲

2014 年 6 月 2 日

目录

1.实验目的与要求 (1)

1.1实验目的 (1)

1.2实验要求 (1)

2.实验原理 (1)

2.1电路原理图 (1)

2.2 Proteus7.4 软件简介 (2)

3、实验步骤 (5)

4、源程序代码 (5)

5. 实验结果分析 (10)

6.总结 (10)

1.实验目的与要求

1.1实验目的

1.掌握A/D转换与单片机的接口方法

2.了解A/D芯片ADC0809转换性能及编程方法

3.通过实验了解单片机如何进行数据采集

1.2实验要求

1.采用查询法或中断法编程进行A/D采集;

2.采集0~5V范围的电压信号(以电位器模拟被测信号),使用4位串行数码管显示0~5V数值,小数点保留三位,实现简易电压表功能。

2.实验原理

2.1电路原理图

熟悉8051的输入输出端口的使用方法, 本实验的电路连接如图1所示。

图1 连接电路

2.2 Proteus7.4 软件简介

Proteus是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:

①实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

②支持主流单片机系统的仿真。目前支持的单片机类型有:ARM7(LPC21xx)、8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。

③提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2、MPLAB等软件。

④具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。

其操作界面如下图所示:

图2 Proteus操作页面

2.模数转换(A/D)实验设计

ADC0809简介

ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。

图3 ADC0809的内部逻辑结构

图4 ADC0809芯片

ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。

ADC0809的内部逻辑结构:

由下图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D 转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。

图5ADC0809的内部逻辑结构

ADC0809各脚功能如下:

D7-D0:8位数字量输出引脚。

IN0-IN7:8位模拟量输入引脚。

VCC:+5V工作电压。

GND:地。

REF(+):参考电压正端。

REF(-):参考电压负端。

START:A/D转换启动信号输入端。

ALE:地址锁存允许信号输入端。

(以上两种信号用于启动A/D转换)

EOC:转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。

OE:输出允许控制端,用以打开三态数据输出锁存器。

CLK:时钟信号输入端(一般为500KHz)。

A、B、C:地址输入线。

3、实验步骤

1.Proteus软件中绘制单片机实验电路;

2.在Keil C软件中编制汇编或C程序,软件调试;

3.在Proteus中加载实验程序,观察并记录实验结果。

4、源程序代码

#include

//*******************引脚定义********************//

sbit dis_ab=P3^0;

sbit dis_clk=P3^1;

sbit CLK=P3^4;

sbit ST=P3^5;

sbit EOC=P3^6;

sbit OE=P3^7;

//*****************7SEG-LED段码表****************//

Unsigned char code

LedTab[21]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77, 0x7c,0x39,0x5e,0x79,0x71,0x76,0x73,0x3e,0x00, 0x40};

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

unsigned char data num_1; //存储十六进制转化为两个单十六进制数的值

unsigned char data num_2;

unsigned char data num_3;

unsigned char data num_4;

void Delay(unsigned int x);

void DispClk(void);

void DisplaySerial(unsigned char x);

void ClearLed(unsigned char x);

void HexToDec(unsigned int x);

void main()

{

unsigned long num;

ST=0;

OE=0;

while(1)

{

ST=1; //发高脉冲启动采样信号

ST=0;

do{CLK=!CLK;}//提供采样时钟信号,直到采样结束为止

while(!EOC);

OE=1;

num=P1; //读取采样值

num=5000*num/255; //将0~#FFH采样值转化为0~5V数值(0~5000)

HexToDec(num); //将16进制数据,转换为10进制数据,以便于数码管显示

ClearLed(4);

DisplaySerial(num_4); //依次从高位到低为显示采样电压值

DisplaySerial(num_3);

DisplaySerial(num_2);

DisplaySerial(num_1);

Delay(30000); //采样延时间隔,决定采样频率 }

}

//********************延时子程序********************//

void Delay(unsigned int x)

{

unsigned int j;

for(j=0;j

}

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

功能:串行模拟时钟

注意事项:用到delay.h中的延时子程序

形参:无

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

void DispClk(void)

{

dis_clk=1;Delay(1);

dis_clk=0;Delay(1);

}

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

功能:发送一个数字到串行LED上

形参:unsigned char x:0-20

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

void DisplaySerial(unsigned char x)

{

unsigned char i;

unsigned char num_serial=LedTab[x];

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

{

dis_ab=(bit)(num_serial&0x80);

num_serial<<=1;

DispClk();

}

}

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

功能:清串行LED显示

形参:unsigned char x = 需要清显示的LED数

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

void ClearLed(unsigned char x)

{

unsigned char i;

for(i=0;i<(x<<3);i++)

{

DispClk();

dis_ab=0;

}

}

void HexToDec(unsigned int x) //十六进制转十进制{

num_1=x%10; //个位

x=x/10;

num_2=x%10; //十位

x=x/10;

num_3=x%10;

x=x/10;

num_4=x%10;

}

5.实验结果分析

通过改变POT-LIN原件滑片的位置即可调整输入的物理模拟量,可以发现输出的数字信号即观察LED的显示效果的不同。

通过实验,会发现:

(1)当POT-LIN原件上的滑片位置位于参考图的上方时,LED会全亮;

(2)当POT-LIN原件上的滑片位于最下方时,LED全暗;

(3)当POT-LIN原件上的滑片位于上下之间的位置时,则会有其对应的LED 显示效果。

LED显示效果如下图示:

图6 LED效果图

6.总结

通过此次实验,让我学习了A/D 转换与单片机的接口方法。对A/D 芯片ADC0809 转换性能及编程方法有了深入的了解,通过实验了解单片机如何进行数据采集,锻炼了编程能力。总的来说,经过这几个星期的单片机课程的学习,使我们对单片机有了一定的了解,老师只是引导我们入门,要想深入学习还得课下花时间自己钻研。

51单片机用C语言实现交通灯(红绿灯)源程序

51单片机用C语言实现交通灯(红绿灯)源程序 2009-10-29 23:00 交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改。 源程序如下: /* 1、程序目的:使用定时器学习倒计时红绿灯原理主要程序和倒计时一样 2、硬件要求:数码管、晶振12M */ #include bit red,green,yellow,turnred; //定义红、黄、绿及转红标志 code unsigned char tab[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管 0-9 unsigned char Dis_Shiwei;//定义十位 unsigned char Dis_Gewei; //定义个位 void delay(unsigned int cnt) //用于动态扫描数码管的延时程序{ while(--cnt); } main() { TMOD |=0x01;//定时器设置 10ms in 12M crystal定时器0,工作方式1,16位定时器 TH0=0xd8; //65535-10000=55535=D8F0(十六进制) TL0=0xf0; IE= 0x82; //中断控制,EA=1开总中断,ET0=1:定时器0中断允许 TR0=1; //开定时器0中断 P1=0xfc;//红灯亮,根据红黄绿接灯的顺序。 red =1; while(1) { P0=Dis_Shiwei;//显示十位,这里实现用8位数码管,即左1位 P2=0; delay(300);//短暂延时 P0=Dis_Gewei; //显示个位,左数,2位 P2=1;

AT89C51单片机设计60s倒计时

目录 一、课程设计的目的、要求和设计目标 (1) 1、目的 (1) 2、要求 (1) 3、目标.................................................................. 1二、硬件要求 (2) 1、 AT89C51的芯片 (2) 2、 LED 数码管显示器概述 (3) 3、其他元器件介绍及参数选择.......................................... 6三、软件设计 (7) 1、程序流程图 (7) 2、程序导图 (7) 3、定时 /计数器初值计算 (7) 4、软件程序 (8) 5、软件仿真设计………………………………………………… 9四、软件调试………………………………………………………… 10 1、 <.HEX>文件的生成 (10) 2、PROTEUS …………………………………………………… 10五、心得体会………………………………………………………… 11 一、课程设计的目的、要求和设计目标 1、目的

单片机课程即将结束, 课程的最后一项是单片机的课程设计。通过课程设计, 我们要将在一个学期中所学的东西进行整理、归纳, 要把学到的知识转化成实际的运用,进一步的了解单片机的实质。通过动手设计,深入学习,体验单片机在日常生活中的运用,提升专业知识。 课程设计的总体包括:对单片机的了解、运用,设计思路的解析,报告文字的处理等。通过一系列的实际操作, 完善对课程的学习, 提升自我的学习能力和动手能力。 2、要求 (1用单片机 AT89C51的定时器实现 60s 倒计时。本例中用两位数码管静态显示倒计时秒值。 (2用 PROTEUS 设计,仿真基于 AT89c51单片机的 60s 倒计时实验。 (3通过 Keil uVision2软件,生成 .HEX 格式程序并植入 AT59C51单片机并调试、运行。 3、目标 通过自主完成课程设计内容, 整理学期中所学到的知识, 了解单片机的程序过程和一系列的基础操作,将理论和实践相结合,完善课业。 二、硬件要求 1、 AT89C51的芯片 芯片概述 AT89C51是一个低功耗,高性能 CMOS 8位单片机,片内含 4k Bytes ISP的可反复擦写 1000次的 Flash 只读程序存储器, 器件采用 ATMEL 公司的高密度、非易失性存储技术制造,兼容标准 MCS-51指令系统及 80C51引脚结构,芯片内集成了通用

根据51单片机能实现任意时间倒计时

倒计时器 只要修改此文档15页源程序的(如下图)的到计时初值即可实现想要的倒计时。比如30分钟倒计时修改分钟十位和各位即可。 一、设计要求: 由单片机接收小键盘阵列设定倒计时时间,倒计时的范围最大为60分钟,由LED 显示模块显示剩余时间,显示格式为 XX(分):XX(秒).X,精确到0.1s的整数倍。倒计时到,由蜂鸣器发出报警。绘制系统硬件接线图,并进行系统仿真和实验。画出程序流程图并编写程序实现系统功能。 二、设计的作用目的: 此次设计是我们更进一步了解基本电路的设计流程,提高自己的设计理念,丰富自己的理论知识,巩固所学知识,使自己的动手动脑能力有更进一步提高,为自己今后的学习和工作打好基础,为自己的专业技能打好基础。通过解决实际问题,巩固和加深“单片机原理与应用”课程中所学的理论知识和实验能力,基本掌握单片机应用电路的一般设计方法,提高电子电路的设计和实验能力,加深对单片机软硬知识的理解,获得初步的应用经验,为以后从事生产和科研工作打下一定的基础。本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,以便今后自己在单片机领域的学习和开发打下基础,提高自己的动手能力和设计能力,培养创新能力,丰富自己的理论知识,做到理论和实践相结合。本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式作更深层次的了解。

三、具体设计: 1.问题分析: 在电子技术飞速发展的今天,电子产品的人性化和智能化已经非常成熟,其发展前景仍然不可估量。如今的人们需求的是一种能给自己带来方便的电子产品,当然最好是人性化和智能化的,如何能做到智能化呢?单片机的引入就是一个很好的例子。单片机又称单片微型计算机,也称为微控制器,是微型计算机的一个重要分支,单片机是20世纪70年代中期发展起来的一种大规模集成电路芯片,是集CPU,RAM,ROM,I/O接口和中断系统于同一硅片上的器件。单片机的诞生标志着计算机正式形成了通过计算机系统和嵌入式计算机系统两个分支。目前单片机已渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。单片机已在广阔的计算机应用领域中表现得淋漓尽致电器因此,单片机已成为电子类工作者必须掌握的专业技术之一。单片机就是一个微型中央处理器,通过编程即能完成很多智能化的工作,因此它的出现给电子技术智能化和微型化起到了很大的推动作用。 本设计将采用89C51单片机,89C51单片机是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。单片机自带5个中断,两个16位定时器32个I/O口,可擦除只读存储器可以反复擦除多次,功能相当强大。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器。89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 面对如此功能强大的单片机,结合本次设计要求,应该要用到单片机的内部时钟电路以及外围的显示接口电路和报警电路。 对与时钟,它有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法。 在显示方面,有着多种选择,但是8段LED数码管足以满足此次设计的要求了。LED 数码显示器是一种有LED发光二极管组合显示字符的显示器件。它使用了8个LED发光二极管,其中7个用于显示字符,一个用于显示小数点,故通常称之为8段发光二极管数码器。 其内部结构如下图(a)所示:

51单片机输入数字并数码管倒计时典型C语言代码

51单片机输入数字并数码管倒计时典型C语言代码 使用STC89C52RC单片机,外接数码管、蜂鸣器。改代码非常适合初学者学习借鉴。 #include #define uchar unsigned char #define uint unsigned int sbit dula=P0^0; sbit wela=P0^1; sbit p17=P0^3; sbit p02=P0^2; sbit p32=P3^2; sbit p04=P0^4; uchar count; uint Sumnum; uint circle,circle1; uint time; float top;//定义top为浮点型变量 uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar temp,count; uint bian,num,e,d,c,b,a; void delay(uchar x) { uchar a1,b1; for(a1=x;a1>0;a1--) for(b1=200;b1>0;b1--); } void chaishu(uint sum1) { uint e1,b1,c1,d1; e=sum1/10000;////e=6* e1=sum1%10000;///e1=5535 d=e1/1000;///////d=5* d1=e1%1000;//////d1=535 c=d1/100;////////c=5* c1=d1%100;///////c1=35 b=c1/10;/////////b=3* b1=c1%10;////////b1=5 a=b1;////////////a=5* }

51单片机实现数码管99秒倒计时

51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现。 目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全可以做出任意倒计时如10秒倒计时程序。 定时器定时时间计算公式:初值X=M(最大计时)-计数值。 初值,换算成十六进制,高位给TH0,低位给TL0,如果用定时器0的话。 M(最大计时)如果是16位的,就是2的16次方,最大定时,65535 微秒,实现1秒定时,可以通过定时10毫秒,然后100次改变一次秒值即可。10*100毫秒=1S 计数值:你要定时多长时间,如果定时1毫秒,就是1000微秒,(单位为微秒),如果定时10毫秒,就是10000(微秒),当然,最大定时被定时器本身位数限制了,最大2的16次方(16位定时计数器),只能定时65.535毫秒。定时1S当然不可能1S定时器中断。 下面为实现99秒倒计时C语言源程序 /*了解定时器,这样的话,就可以做一些基本的实验了,如定时炸弹~~,10秒后打开关闭继电器*/ /*数码管,12M晶振*/ #include #define uchar unsigned char sbit p11=P1^1; //连的是继电器。。 code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar shiwei; uchar gewei; void delay(unsigned int cnt) { while(--cnt); } void main() { TMOD|=0x01; /*定时器0 16位定时器X=65535-10000(10毫秒)=55535=D8F0(十六进制)定时10ms */ TH0=0xd8; TL0=0xf0; IE=0x82; //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时

AT89C51单片机LED数字倒计时器—课程设计

课题: AT89C51单片机LED数字倒计时器专业: 班级: 学号: 姓名: 指导教师: 设计日期: 成绩: 重庆大学城市科技学院电气学院

目录 一、设计目的作用 (3) 二、设计要求 (3) 三、设计的具体实现 (3) 1、设计原理 (3) (1)系统设计方案 (3) (2)功能模块 (4) (3)工作原理: (4) 2、系统设计 (4) (1)显示模块 (4) (2)晶振模块 (5) (3)复位电路: (5) (4)按键模块: (6) (5)报警模块: (7) 3、系统实现 (7) (1)实物图 (7) (2)分析 (8) 四、总结 (8) 五、附录 (9) 附录1: (9) 附录2: (10) 附录3: (10) 六、参考文献 (17)

LED数字倒计时器设计报告 一、设计目的作用 1、掌握51单片机最小系统的设计; 2、掌握按键电路设计、LED数码管的使用; 3、掌握C51的编程方式。 二、设计要求 基于AT89C51单片机的LED数字倒计时器主要具有如下功能,具体要求如下: 1、LED数码管显示倒计时时间。 2、倒计时过程中能设置多个闹钟,当倒计时值倒计到设定值时会发出2s 的报警声音。(K1设置小时,K2设置分钟,K3设置秒钟,K4完成退出) 3、通过按键可以对倒计时设定处置。倒计时初值范围在24:00:00~00:00:60之间,设置成功后复位初始值为成功设定值。 三、设计的具体实现 1、设计原理 (1)系统设计方案: 基于AT89C51单片机的数码管显示模块显示的倒计时器。主要是以单片机来控制,用按键来设定倒计时初始时刻的值,数码管作为显示模块来显示剩余的时间。此电路对于倒计时器中的LED数码管示器来说,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。 晶振模块

30秒倒计时 c语言51单片机实现

原理图: 程序: #include #define uchar unsigned char #define uint unsigned int

sbit dula=P2^6; sbit wela=P2^7; sbit D=P2^3; uint tt,temp,shi,ge,a; uchar code shuma[]= {0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delay(uint z); void chushi(); void xianshi(uint temp); void main() { chushi(); while(1) { if(tt==20) { tt=0; if(temp<=0)

{ temp=30; D=0; while(1) { xianshi(0); } } temp--; } xianshi(temp); } } void delay(uint z) //延时子程序 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void chushi() //设置定时器1为工作方式1

{ temp=30; TMOD=0X01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } void zhongduan() interrupt 1 //中断函数子程序不需要声明 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt++; } void xianshi(uint temp) //显示子程序{ uint shi,ge; shi=temp/10;

基于51单片机的倒计时实现

基于51单片机的倒计时实现,精确到毫秒。 #include #define uchar unsigned char #define uint unsigned int uchar t1,shu,shi,ge,miao1,miao2; sbit wei1=P2^0; sbit wei2=P2^1; sbit wei3=P2^2; sbit wei4=P2^3; void display(uchar shi,uchar ge,uchar miao1,uchar miao2); uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f}; void delay(uint z) //延时 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void init() {

shu=60; t1=100; TMOD=0x01; TH0=(65536-10000)/256; TL0=(65536-10000)%256; ET0=1; // 开始计时 EA=1; TR0=1; // 开所有中断 } void timer0() interrupt 1 //定时器0 { TH0=(65536-10000)/256; TL0=(65536-10000)%256; t1--; miao1=t1/10; miao2=t1%10; if(t1==0) { t1=100; shu--; shi=shu/10; ge=shu%10; if(shu==0) { TH0=(65536-10000)/256; TL0=(65536-10000)%256; TR0=0; } } } void display(uchar shi,uchar ge,uchar miao1,uchar miao2) //显示{ P2=0xfe; P0=table[shi]; delay(5); P2=0xfd; P0=table[ge]; delay(5); P2=0xfb; P0=table[miao1]; delay(5);

基于单片机控制的60秒倒计时系统的设计与仿真

目录 1前言 (1) 2工程概况 (2) 3正文 (2) 3.1 设计目的与要求 (2) 3.2 设计方法的目标 (2) 3.3 设计方法和内容 (2) 3.3.1硬件设计方法 (3) 3.3.2软件设计方法 (7) 3.4 软件调试过程 (9) 3.4.1 系统调试工具keil C51 (9) 3.4.2 系统调试工具PROTEUS (10) 4设计总结 (11) 5参考文献 (11)

前言 在生活和生产的各领域中,凡是有自动控制要求的地方都会有单片机的身影出现;从简单到复杂,从空中、地面到地下,凡是能想像到的地方几乎都有使用单片的需求。现在尽管单片机的应用已经很普遍了,但仍有许多可以用单片机控制而尚未实现的项目,因此,单片机的应用大有想像和拓展空间。 单片机就是微控制器,它是嵌入式系统中的重要且发展迅速的组成部分。单片机接上震荡元件(或震荡源)、复位电路和接口电路,载入软件后,可以构成单片机应用系统。将它嵌入到形形色色的应用系统中,它就成为众多产品、设备的智能化核心。所以,生产企业称单片机为“微电脑”。 单片机的应用有利于产品的小型化、多功能化和智能化,有助于提高劳动效率,减轻劳动强度,提高产品质量,改善劳动环境,减少能源和材料消耗,保证安全等。但是,单片机应用的意义绝不仅限于它的广阔范围以及所带来的经济效益上,更重要的意义还在于:单片机的应用正从根本上改变着传统的控制系统设计思想和设计方法。从前必须有模拟电路或数字电路实现的大部分功能,现在已能使用单片机通过软件(编程序)方法实现了。这种以软件取代硬件并提高系统性能的控制系统“软化”技术,称之为微控制技术。微控制技术是一种全新的概念,是对传统控制技术的一次革命。随着单片机应用的推广普及,微控制技术必将不断发展、日益完善和更加充实。 近年来随着计算机在社会领域的渗透, 单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。模拟多通道压力系统是利用压力传感器采集当前压力并反映在显示器上,它可以分析压力过量程,并发出报警。并采用电子秤原理可根据输入单价准确的计算出物体的金额。 本篇论文讨论了简单的倒计时器的设计与制作,对于倒计时器中的LED数码显示器来说,我为了简化线路、降低成本,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。

基于51单片机系统的倒计时器

EDA论文 题目交通灯信号控制器的设计 学生姓名黄鹏 学号20101309073 院系电子与信息工程学院 专业信息工程 课程名称电子设计自动化 任课教师周勇 2012 年12 月10日

摘要 随着集成电路(IC)技术的发展,电子设计自动化(EDA)逐渐成为重要的设计手段,已经广泛应用于模拟与数字电路系统等许多领域,本设计采用EDA技术,选用目前应用广泛的VHDL硬件电路描述语言进行设计。EDA技术使得电子电路设计者的工作只需要利用硬件描述语言和EDA软件平台就能完成对系统硬件功能的实现,极大的提高了设计效率,缩短了设计周期,节省了设计成本。 关键词;信号控制器电子设计自动化交通灯

目录 课程EDA············································错误!未定义书签。 摘要 (2) 目录 (3) 交通灯信号控制器的设计 (4) 一EDA简介 (4) 二FPGA简介 (5) 三交通灯信号控制器的设计 (5) 实验内容 (6) FENPIN1的实现程序 (6) 状态机(MOORE_JT2)的程序 (7) 顶层实现电路图 (8) 四波形模拟 (9) 五结束语 (9) 六参考文献 (10)

一EDA简介 概述: EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL 完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。 EDA技术融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA 技术。本文所指的EDA技术,主要针对电子电路设计、PCB设计和IC设计。 EDA设计可分为系统级、电路级和物理实现级。 硬件描述语言HDL是相对于一般的计算机软件语言,如:C、PASCAL而言的。HDL 语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能、电路结构和连接方式。设计者可利用HDL程序来描述所希望的电路系统,规定器件结构特征和电路的行为方式;然后利用综合器和适配器将此程序编程能控制FPGA和CPLD内部结构,并实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。目前,就FPGA/CPLD开发来说,比较常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL。 EDA设计方法 前端设计(系统建模RTL 级描述)后端设计(FPGAASIC)系统建模 IP 复用 前端设计 系统描述:建立系统的数学模型。 功能描述:描述系统的行为或各子模块之间的数据流图。 逻辑设计:将系统功能结构化,通常以文本、原 理图、逻辑图、布尔表达式来表示设计结果。 仿真:包括功能仿真和时序仿真,主要验证系统功能的正确性及时序特性。 EDA常用软件 EDA工具层出不穷,目前进入我国并具有广泛影响的EDA软件有:multiSIM7(原EWB的最新版本)、PSPICE、OrCAD、PCAD、Protel、Viewlogic、Mentor、Graphics、Synopsys、LSIIogic、Cadence、MicroSim,ISE,modelsim等等。这些工具都有较强的功能,一般可用于几个方面,例如很多软件都可以进行电路设计与仿真,同进还可以进行PCB自动布局布线,可输出多种网表文件与第三方软件接口。 二FPGA简介

60秒倒计时时钟 单片机AT89C51 C语言程序

#include typedef unsigned char uint8; typedef unsigned int uint16; /*七段共阳管显示定义*/ uint8 code dispcode[ ]={0x40,0x79,0x24, 0x30,0x19,0x12,0x02, 0x78,0x00,0x10}; /*定义并初始化变量*/ uint8 seconde=59; uint16 mstcnt=0; /*函数声明*/ void delay(uint8 k ); //延时子程序 void time_pro( ); //时间处理子程序 void display( ); //显示子程序 /*****************************/ /*延时子程序*/ /****************************/ void delay (uint8 k) { uint8 j; while((k--)!=0) { for(j=0;j<125;j++) {;} } } /**************************/ /*时间处理子程序*/ /**************************/ void time_pro( void)

{ if(seconde==0)//秒钟设为59进制 { seconde=59; } } /*****************************/ /* 显示子程序*/ /*****************************/ void display(void) { P1=dispcode[seconde/10]; //显示秒的十位 delay(4); P2=dispcode[seconde%10]; //显示秒的个位 delay(4); } /**************************/ /*1s定时定时*/ /**************************/ void timer0(void) interrupt 1 using 0//定时器0方式1,250us中断一次{ TH0=0xff; TL0=0x19; TMOD = 0x01; mstcnt++; if(mstcnt==4000) { seconde--;

51单片机99秒倒计时C语言源程序

51单片机99秒倒计时C语言源程序 51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现。目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全可以做出任意倒计时如10秒倒计时程序。定时器定时时间计算公式:初值X=M(最大计时)-计数值。 初值,换算成十六进制,高位给TH0,低位给TL0,如果用定时器0的话。 M(最大计时)如果是16位的,就是2的16次方,最大定时,65535 微秒,实现1秒定时,可以通过定时10毫秒,然后100次改变一次秒值即可。10*100毫秒=1S 计数值:你要定时多长时间,如果定时1毫秒,就是1000微秒,(单位为微秒),如果定时10毫秒,就是10000(微秒),当然,最大定时被定时器本身位数限制了,最大2的16次方(16位定时计数器),只能定时65.535毫秒。定时1S当然不可能1S定时器中断。 下面为实现99秒倒计时C语言源程序 /*了解定时器,这样的话,就可以做一些基本的实验了,如定时炸弹~~,10秒后打开关闭继电器*/ /*数码管,12M晶振*/ #include #define uchar unsigned char sbit p20 = P2^0; sbit p21 = P2^1; code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; code unsigned char tab_dot[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; uchar shiwei; uchar gewei; int timecounter = 50;

51单片机数码管倒计时实验汇编代码

ORG 0000H LJMP START ORG 000BH LJMP TIME0 ORG 001BH LJMP TIME1 ORG 0030H START:MOV TMOD,#11H MOV TH0,HIGH(65536-9216) MOV TL0,#LOW(65536-9216) MOV TH1,HIGH(65536-9216) MOV TL1,#LOW(65536-9216) MOV IE,#8AH MOV R0,#30 MOV R1,#00 MOV R2,#02 MOV R4,#06 MOV 30H,#0 MOV 31H,#2 MOV 32H,#0 MOV 33H,#0 CLR 20H.1 CLR 21H.1 CLR PSW.5 SETB TR0 MAIN:LCALL DISPLAY JB 20H.1,SOUND AJMP MAIN SOUND:MOV SP,#60 SETB TR1 LOOP:CALL MUSIC JB 21H.1,STOP AJMP LOOP STOP:AJMP $ DISPLAY:MOV DPTR,#TAB MOV A,33H MOVC A,@A+DPTR MOV P0,A CLR P1.0 LCALL DL2MS SETB P1.0 MOV A,32H

MOVC A,@A+DPTR MOV P0,A CLR P1.1 LCALL DL2MS SETB P1.1 MOV A,31H MOVC A,@A+DPTR MOV P0,A CLR P1.2 LCALL DL2MS SETB P1.2 MOV A,30H MOVC A,@A+DPTR MOV P0,A CLR P1.3 LCALL DL2MS SETB P1.3 RET TIME0:MOV TH0,HIGH(65536-9216) MOV TL0,#LOW(65536-9216) DJNZ R0,TIMEOUT MOV R0,#30 CJNE R1,#00,TIMECOUNT MOV A,R2 DEC A MOV R2,A MOV R1,#59 CJNE R2,#00,TIMECOUNT TIMECOUNT:MOV A,R2 MOV B,#10 DIV AB MOV 30H,A MOV 31H,B MOV A,R1 MOV B,#10 DIV AB MOV 32H,A MOV 33H,B DEC R1 CJNE R1,#00,TIMEOUT

基于51单片机数码管100天倒计时程序

基于51单片机数码管100天倒计时程序 (动态显示) #include Unsigned char s[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f }; unsigned char e3,f3,g3,h3,count,flag0,flag2,flag3,flag4,j; void delay(unsigned char i); signed int time1=100,time0=0; void sm(); void time2(); void hms1 (); void timej (); void timez (); /***********************按键脚定义*////////////////// sbit ks=P1^4; sbit hms=P1^5; sbit add=P1^6;

sbit bat=P1^7; void sm() { /****************************数码管显示位*/////////////////////// e3=time1/100; f3=time1%100/10; g3=time1%100%10; P2=0x01; P0=s[f3]; delay(2); P0=0; P2=0x02; P0=s[g3]; delay(2); P0=0; P2=0x04; P0=s[e3]; delay(2); P0=0; } void main()

{ TMOD=0x01; TH0=0x3c; TL0=0xb0; EA=1; ET0=1; while(1) { sm(); time2(); hms1(); timej(); timez(); } } void time2() //计时开始{ if(ks==0) {delay(10);} if(ks==0) {flag0=1;}

51单片机定时器数码管30秒倒计时(三个按键控制开始暂停复位)

程序: #include "" unsigned char code led[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned char code addr[2]={0xef,0xdf}; unsigned char xx[2]; unsigned char time=30; unsigned char flag=0; void delay(void); void sys(void) { TMOD=0x01; TH0=(65536 - 50000) / 256; TL0=(65536 - 50000) % 256; ET0=1; TR0=1; EA=1; EX0=1; IT0=1; } void ftimer0(void) interrupt 1 { static unsigned char cnt; TH0=(65536-50000)/256; TL0=(65536-50000)%256; cnt++; if(cnt>20) { if(flag==1) { time--; cnt=0; if(time==0) { ET0=0; TR0=0; } } } } void int0(void) interrupt 0 { if(P2_0==0) { flag=1;

ET0=1; } else if(P2_1==0) { ET0=0; } else if(P2_2==0) { time=30; ET0=0; TR0=1; } } void main() { unsigned char a; sys(); for(;;) { for(a=0;a<2;a++) { xx[0]=time/10; xx[1]=time%10; P0=led[xx[a]]; P1=addr[a]; delay(); P1=0xff; } } } void delay(void) { long t=100; while (t--); } 电路图及结果:

51单片机抢答器源程序

/********************************************** 程序名: 8路抢答器.c 作者: 风雪子郁 时间: 2012/8/22 邮箱:fxziyu@https://www.360docs.net/doc/bc3140843.html, 地址:四川信息职业技术学院(雪峰校区) **********************************************/ #include #include sbit sjjia=P1^0; sbit sjjian=P1^1; sbit kaishi=P1^2; sbit fuwei=P1^3; sbit soud=P1^4; sbit led_r=P1^5; sbit led_y=P1^6; sbit led_ce=P3^3; sbit key_ce=P3^4; unsigned char num[]={'0','1','2','3','4','5','6','7','8','9'},num2; unsigned char model,time,temp; void init() //初始化函数 { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; ET0=1; TR0=0; EA=1; P1=0x0f; led_ce=1; key_ce=1; model=0; time=30; } void delay(unsigned char i) //延时 { unsigned char j,k; while(i--) for(j=100;j>0;j--) for(k=100;k>0;k--); }

根据51单片机的厨房定时器(可预置分秒倒计时装置)

基于51单片机的厨房定时器 设计报告 学院:信息光电子科技学院 专业:光电信息科学与工程 年级: 姓名: 学号:

一、设计报告概述 日常生活中熬个汤、煮个蛋……都需要预定一定的时间,设计一个厨房定时器,用户预设倒计时的时长,启动后系统开始倒计时,当时间为0后,启动蜂鸣器报警。 本设计报告中的厨房定时器,是以单片机(STC89C52),四位七段数码管、按键开关和蜂鸣器等组成的综合设计系统电路。 上电,电源指示灯点亮,数码管显示为0000,用户可以通过按键开关预设定时时间,启动后系统开始倒计时,当时间为0后,蜂鸣器报警。数码管显示分、秒,计时时间上限为99分钟,按键开关以10分钟或1分钟单位调整时间。 图1 系统设计结构图 本系统组成如图1 系统设计结构图所示,主要由五个部分组成。 报警电路 (蜂鸣器)

1.AT89C52单片机——控制芯片 AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。 AT89C52为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。 图2 AT98C52引脚图

2.时钟震荡电路 AT89C52中有一个用于构成内部振荡器的高增益反相放大器,与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。外接石英晶体(或陶瓷谐振器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。如果使用石英晶体,电容使用30pF±10pF,而如使用陶瓷谐振器建议选择40pF±10pF,可以使系统更稳定,避免噪音干扰而死机。此设计采用的是12MHz的石英晶振。 图3 晶振震荡电路图 3.按键控制电路 本设计共有5个按键,功能依次为复位、启动、增加10分钟定时时间、增加1分钟定时时间、减少1分钟定时时间,由于按键较少,故直接连接I/O口。 复位键原理:当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。

基于AT89C51单片机的LED数字倒计时器设计

单片机原理及其应用课程 设计 课题:基于AT89C51单片机的LED数字倒计时器设计 专业:电工程及其自动化 班级:2013 级4班 学号: 姓名: 设计日期:2015年6月6日——2015年6月19日 成绩:

AT89C51单片机LED数字倒计时器设计报告 一、设计目的作用 1、掌握51单片机最小系统的设计; 2、掌握按键电路设计、LED数码管的使用; 3、掌握C51的编程方式。 4、培养我们的团结合作能力。 5、锻炼我们的动手实践能力。 二、设计要求 基于AT89C51单片机的LED数字倒计时器主要具有如下功能,具体要求如下: (1)LED数码管显示倒计时时间。 (2)倒计时过程中能设置多个闹钟,当倒计时值倒计到设定值时会发出2s的报警声音。(K1设置小时,K2设置分钟,K3设置秒钟,K4完成退出) (3)通过按键可以对倒计时设定处置。倒计时初值范围在24:00:00~00:00:60之间,用户可根据需要对其进行设置,设置成功后复位初始值为成功设定值。 三、设计的具体实现 1、设计原理 (1)LED数字倒计时器主要由AT89C51单片机、晶振电路、复位电路、按键电路、数码管电路、蜂鸣电路组成(如图1.1)。 图1.1 LED数字倒计时器系统设计框图

(2)手绘草图 2、系统设计 (1)晶振电路的分析 a.晶振电路原理: 晶振是通过电激励来产生固定频率的机械振动,而振动又会产生电流反馈给电路,电路接到反馈后进行信号放大,再次用放大的电信号来激励晶振机械振动,晶振再将振动产生的电流反馈给电路,如此这般。当电路中的激励电信号和晶振的标称频率相同时,电路就能输出信号强大,频率稳定的正弦波。整形电路再将正弦波变成方波送到数字电路中供其使用。 b.晶振电路的特点: 晶振是石英振荡器的简称,英文名为Crystal,晶振分为有源晶振和无源晶振两种,其作用是在电路产生震荡电流,发出时钟信号。它是时钟电路中最重要的部件,它的作用是向IC等部件提供基准频率,它就像个标尺,工作频率不稳定会造成相关设备工作频率不稳定,自然容易出现问题。由于制造工艺不断提高,现在晶振的频率偏差、温度稳定性、老化率、密封性等重要技术指标都很好,已不容易出现故障,但在选用时仍可留意一下晶振的质量。

单片机课程设计心得倒计时秒表【模版】

此次设计是我们更进一步了解基本电路的设计流程,提高自己的设计理念,丰富自己的理论知识,巩固所学知识,使自己的动手动脑能力有更进一步提高,为自己今后的学习和工作打好基础,为自己的专业技能打好基础。通过解决实际问题,巩固和加深“单片机原理与应用”课程中所学的理论知识和实验能力,基本掌握单片机应用电路的一般设计方法提高电子电路的设计和实验能力,加深对单片机软硬知识的理解,获得初步的应用经验以后从事生产和科研工作打下一定的基础。本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,以便今后自己在单片机领域的学习和开发打下基础,提高自己的动手能力和设计能力,培养创新能力,丰富自己的理论知识,做到理论和实践相结合。本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式作更深层次的了解。掌握单片机应用系统的软硬件设计过程、方法及实现,强化单片机应用电路的设计与分析能力。提高学生在单片机应用方面的实践技能和科学作风;培育学生综合运用理论知识解决问题的能力,实现理论结合实际,学以至用的原则。用所学的知识和自身课外的拓展学习加深对专业课的理解和学习;锻炼综合运用电路设计及相关电子仪器、单片机软硬件结合的理论,结合生产实际分析和解决工作工程实际问题的能力,加固、加深和扩展有关电子类,汇编语言,相关电子电路和仿真软件方面的知识和能力。通过本次课程设计,应加强培养如下能力: (1)加强自身独立的动手能力和思考解决问题的能力,提高创造能力; (2)学会使用软件Proteus画原理图和仿真调试。 (3)学会基本焊接电路板的技能 通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。 二、设计要求 1、可以以实现正常秒表的所有功能,包括启动、暂停、复位等; 2、可以自由设定倒计时时间(10s、20s、30s···),并进行倒计时; 3、显示方式自选; 4、任选一款51单片机; 5、扩展功能:在秒表的基础上增加时钟功能,倒计时完成时加入报警单元,如声音、灯光等。

相关文档
最新文档