51单片机最小系统板论文设计
- 格式:doc
- 大小:661.04 KB
- 文档页数:10
实用标准文案
文档 51单片机最小系统板论文
队员:罗天宏 0900150224
莫若程 0900150225
梁福清 0900150220
时间:2010-10-30
【摘要】51单片机最小系统版的制作以及用单片机控制流水灯与数码管的显示是电子制作初学者所必须掌握的,本文介绍一种基于单片机控制流水灯的流动以及数码管的显示的设计方案,其程序设计简单 ,利用keil uvision2软件编辑程序,非常适合电子制作初学者。
【关键字】点亮LED灯、LED灯流动控制、延时控制、数码管显示、蜂鸣器控制
1. 方案论证与比较
1.1整体系统的选择与比较
方案一:系统各部分采用中小规模集成数字电路,用三极管、数字芯片等器件来控制LED灯的流动与数码管的显示。该方案的特点是中小规模集成电路应用技术成熟,性能可靠,能方便地完成的基本功能,但是由于系统功能要求较高,所以电路连接集成电路相对较多,而且过于复杂,使用不太方便。
方案二:该系统采用MCS-51系列单片机AT89S52作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改性。 MCS-51单片机特点如下:
1> 可靠性好:单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU ,程序指令和数据都可以烧写在ROM许多信号通道都在同一芯片,因此可靠性高。
2> 易扩充:单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统
3> 控制功能强:单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。
由于单片机具有优越的高集成电路性,使其工作速度更快、效率更高。另外AT89S52单片机采用12MHz的晶振,提高了信号的测量精度,并且使该系统可以通过软件改进来扩张功能。针对以上两个方案的比较,我们决定选择第二种方案。
1.2复位电路方案的选择与比较 实用标准文案
文档 复位电路主要分为上电自动复位电路和手动复位电路
○1、上电自动复位电路如下图:
34C120ufR11kRESTVCC
这种方式是将单片机接通后,对复位电路的22uf的电容充电来实现。
○2、手动复位电路如下图:
手动复位方式又分为按键电平复位方式和按键脉冲复位方式,按键电平复位是当按下复位开关’s’是,单片机的rest端通过电阻R1与VCC电源接通实现,我们的设计方案就采取这种方式。
1.3电源电路的选择与比较 实用标准文案
文档 ○1采用交流电供电
基于MCS51单片机需要+5v电压供电,但是在很多情况下,又比较难得到+5v的直流电源,所以可以通过采用三端稳压器7805可以得到直流稳压电源。
○1采用usb供电
如今使用usbx线已经很普遍,usb线除了可以传递数据外,还可以用来作电源线,采用usb线就可以直接插到电脑上,就可以很方便地给单片机提供电源了。
基于以上usb使用的优越性,考虑到某些时候很难得到+5的稳压电源以及单片机内程序的导入需要下载器,我们选择通过制作一个下载器来为我们的供电,因为这样不但可以实现单片机的供电还可以为我们所制作的单片机的程序下载提供方便,一举两得。下载器的电路设计如下:
1.4显示电路的选择与比较
○1采用LCD显示器显示
LCD显示器具有功耗低、体积小、重量轻、超薄等优点,液晶显示器段式LCD、字符式LCD、点阵式LCD,它们可以显示字符,数字等,有比较丰富的功能,但是LCD液晶属于慢显示设备,对程序要求较高,较为复杂,而且价格也比较昂贵。
○2采用LED数码管显示
LED数码管显示器是发光二极管显示字段组成的显示器,有“7”段和“米”字实用标准文案
文档 段之分,也有共阳极和共阴极之分,都具有显示清晰,成本低廉、匹配灵活、与单片机接口简单易行,较LCD液晶显示具有反应快,程序简单的优点,
针对以上两个方案的比较,我们决定采用一位“8”段LED共阴极数码管来实现我们设计方案中的显示功能。并且由于数码管的接口连线比较简单,线路布局也很容易实现,所以我们将其安在万用板上,然后通过系统板上的功能扩展接口来实现数码管的驱动。其大概电路连接如下:
2 系统设计
2.1系统框架原理设计
2.2 系统总电路图设计 LED灯2 LED灯8 电源 复位按键
单片机控制程序
LED灯1 ··· ··· 数码管显示
蜂鸣器 实用标准文案
文档
2.3 软件系统设计
○1流程图 实用标准文案
文档
主循环
LED流水灯依次点亮并伴随着蜂鸣器的响声,每次延时500ms
LED灯全灭后全亮,循环两次,灯亮时蜂鸣器发声,每次延时500ms
伴随着蜂鸣器的发声数码管依次显示0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,每次延时500ms
结束 实用标准文案
文档 ○2程序设计(全部)
#include
sbit fmq=P3^7;
void delay1ms(unsigned int i)
{
unsigned char j;
while(i--)
{
for(j=0;j<125;j++) //1ms基准延时
{
;
}
}
}
void main()
{
unsigned char code
smg[16]={0xdd,0x90,0xce,0xda,0x93,0x5b,0x5f,0xd0,0xdf,0xdb,0xd7,0x1f,0x4d,0x9e,0x4f,0x47}; //定义数码管显示数组,分别显示{0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F}
unsigned char a,b,c,e;
P2=0x00; //让数码管无显示,好让人可以专注于流水灯的变化,人性化设计之一
for(e=0;e<10;e++) //主循环,让程序循环10次
{
delay1ms(1000); //让程序延时1秒再执行,人性化设计之二,使人可以静观其变
for(a=0;a<2;a++)
{
P0=0xfe; //点亮第一个LED灯
fmq=0; //蜂鸣器发出声音
delay1ms(200); //延时200ms
fmq=1; //蜂鸣器关闭
delay1ms(300); //延时300ms,与前面的200ms相加一共500ms
P0=0xfd; //点亮第二个LED灯
fmq=0;
delay1ms(200);
fmq=1;
delay1ms(300); 实用标准文案
文档 P0=0xfb; //点亮第三个LED灯
fmq=0;
delay1ms(200);
fmq=1;
delay1ms(300);
P0=0xf7; //点亮第四个LED灯
fmq=0;
delay1ms(200);
fmq=1;
delay1ms(300);
P0=0xef; //点亮第五个LED灯
fmq=0;
delay1ms(200);
fmq=1;
delay1ms(300);
P0=0xdf; //点亮第六个LED灯
fmq=0;
delay1ms(200);
fmq=1;
delay1ms(300);
P0=0xbf; //点亮第七个LED灯
fmq=0;
delay1ms(200);
fmq=1;
delay1ms(300);
P0=0x7f; //点亮第八个LED灯
fmq=0;
delay1ms(200);
fmq=1;
delay1ms(300);
P0=0xbf; //点亮第七个LED灯,LED灯开始回流
fmq=0;
delay1ms(200);
fmq=1;
delay1ms(300);
P0=0xdf; //点亮第六个LED灯
fmq=0;
delay1ms(200);
fmq=1;
delay1ms(300);
P0=0xef; //点亮第五个LED灯
fmq=0; 实用标准文案
文档 delay1ms(200);
fmq=1;
delay1ms(300);
P0=0xf7; //点亮第四个LED灯
fmq=0;
delay1ms(200);
fmq=1;
delay1ms(300);
P0=0xfb; //点亮第三个LED灯
fmq=0;
delay1ms(200);
fmq=1;
delay1ms(300);
P0=0xfd; //点亮第二个LED灯
fmq=0;
delay1ms(200);
fmq=1;
delay1ms(300);
}
P0=0xfe; //点亮第一个LED灯
fmq=0;
delay1ms(200);
fmq=1;
delay1ms(300);
for(b=0;b<2;b++)
{
P0=0xff; //LED灯全灭
delay1ms(500);
P0=0x00; //LED灯全亮
fmq=0;
delay1ms(200);
fmq=1;
delay1ms(300);
}
delay1ms(700);
for(c=0;c<16;c++) //该循环控制数码管依次显示0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F
{ 每显示一次蜂鸣器就响一声,延时500ms
P2=smg[c];