单片机.docx
《单片机.docx》由会员分享,可在线阅读,更多相关《单片机.docx(14页珍藏版)》请在冰豆网上搜索。
单片机
一、设计目的
学习单片机的目的是能把它应用到实时控制系统以及仪器仪表和家用电器等各个领域,单片机应用技术这门课程的实验课、综合设计和毕业设计是既相互联系又有区别的三大实践性教学环节,而且是循序渐进的。
实验课是穿插在讲课过程中进行的,每讲完一部分内容,跟上一个实验,及时巩固加深学过的理论知识;综合设计是针对单片机应用技术课程结束后的一个总结,让学生自己设计出一个简单的单片机应用系统,用PROTUES完成系统仿真,然后独立搭出硬件线路,编写出相应的软件应用程序,经过调试,运行出结果。
目的是初步培养学生综合运用所学单片机理论知识的能力和应用学过的单片机理论知识解决实际问题的能力,也为最后的毕业设计打下一定的基础。
学生应提交相应的电子和打印规范文档,实验结果、程序源代码和原理图等。
通过综合设计的训练,培养学生实际分析问题、编程和动手能力,最终目标是想通过综合设计的形式,帮助系统掌握该门课程的主要内容。
二、设计内容
1基本电路:
交流电供电
2基本电路:
电池、可调电阻、直流电流表、直流电压表
3逻辑测试
4使用ADC、示波器和仿真表
5LED显示器的选通并显示字符
6基于PROTEUS的多功能数字电子钟
3、设计步骤
例1基本电路:
交流电供电
1.点击PickDevices按钮,打开标题为PickDevices的对话框。
2.在Category列表框中,找到SimulatorPrimitives,这是会在Results中列出该类的所有元件,ALTERNATOR就是我们要找的交流电电源
3.在Results中双击ALTERNATOR会在TheObjectSelector(元件列表框)列出ALTERNATOR。
-同样的方法添加LAMP,在Category->Optoelectronics->LAMP。
-单击PickDevices对话框的OK按钮结束添加元件。
-在TheObjectSelector(元件列表框)单击选择ALTERNATOR。
-接着在位于主窗口左下角的角度调整工具条中设置在原理图窗口中ALTERNATOR的方。
4.放置ALTERNATOR到原理图窗口中,-用同样的方法放置LAMP。
-配置元件参数。
5.单击PickDevices对话框的OK按钮结束添加元件。
6.在TheObjectSelector(元件列表框)单击选择ALTERNATOR
7.-接着在位于主窗口左下角的角度调整工具条中设置在原理图窗口中ALTERNATOR的方向(这一步也可以在放置元件后再设置)
8.放置ALTERNATOR到原理图窗口中
9.用同样的方法放置LAMP。
10.配置元件参数。
a-在原理图窗口中先右击再左击ALTERNATOR,出现EditComponent对话框,参数设置(第一、二个参数与仿真无关,起到标识作用)
b-单击OK完成。
c.-同样方法设置LAMP的参数。
例2基本电路:
电池、可调电阻、直流电流表、直流电压表
1.-新建一个文档
2.-使用PickDevices添加以下元件BATTERYLAMPPOT-LIN
3.-添加直流电流表和直流电压表
a.-找到这个工具条,红色圈的那个就是INSTRUMENTS了。
b.-单击这个按钮,会在TheObjectSelector列出所有仪表,其中的DCAMMETER和DCVOLTMETER是我们要用到的,选中DCAMMETER并在原理图的适当位置单击左键,这样DCAMMETER就被放置到原理图中了。
同理放置DCVOLTMETER。
最终电路:
c.-设置DCAMMETER和DCVOLTMETER,DCAMMETER和DCVOLTMETER不会根据电路的实际电流、电压值来自动改变量程,需要手动修改。
操作跟修改一般元件一样。
例3逻辑测试
添加以下元件:
A-INPUT=LOGICSTATE
B-INPUT=LOGICSTATE
Q-OUTPUT=LOGICPROBE(BIG)
AND=AND
例4.-使用ADC、示波器和仿真表格.
1.-添加以下元件:
ADC0808555POT-LINLED-BLUE电阻
添加GROUND、POWER
添加示波器
单击绿色的那个按钮,在元件列表中会有OSCILLOSCOPE
添加仿真图表
单击蓝色的那个按钮,在元件列表中会有ANALOGUE
放置仿真图表的方法:
选中ANALOGUE后,在原理图中单击左键,并按住左键拖动,这是你会看到一个虚线方框,释放左键后就可以看到ANALOGUE了。
2.-按照上图连接好元件
3.-设置参数,这里主要介绍一下示波器和仿真表格的设置
a.示波器设置,示波器需要运行仿真后才可以对其参数进行设计
b.设置仿真图表,使用仿真图表前,我们要在需要观测的信号线上添加一个电压探针,要观测的信号是555输出的波形,找到这条连接线,点击了电压探针符号后再在这条连接线的某一个位置上单击一下左键,这样就添加了一个电压探针,接着为这探针起个名字(A)。
将这个电压探针跟仿真图表关联起来。
C配置仿真表格ANALOGUE,默认ANALOGUE的仿真时间是0S-1S,这个时间对本例来说我们需要0S-2mS。
开始仿真ANALOGUE了,到菜单Graph,单击SimulateGraph,等待仿真完成后就会看到图
例5LED显示器的选通并显示字符
1、将所需元器件加入到对象选择器窗口。
2、经过以上操作,在对象选择器窗口中,已有了7SEG-MPX6-CA-BLUE、AT89C51、RES三个元器件对象,若单击AT89C51,在预览窗口中,见到AT89C51的实物图,若单击RES或7SEG-MPX6-CA-BLUE,在预览窗口中,见到RES和7SEG-MPX6-CA-BLUE的实物图。
此时,我们已注意到在绘图工具栏中的元器件按钮
处于选中状态。
3、放置元器件至图形编辑窗口
4、放置总线至图形编辑窗口
单击绘图工具栏中的总线按钮
,使之处于选中状态。
将鼠标置于图形编辑窗口,单击鼠标左键,确定总线的起始位置;移动鼠标,屏幕出现粉红色细直线,找到总线的终了位置,单击鼠标左键,再单击鼠标右键,以表示确认并结束画总线操作。
此后,粉红色细直线被蓝色的粗直线所替代。
5、元器件之间的连线
6、元器件与总线的连线
7、给与总线连接的导线贴标签
例6基于PROTEUS的多功能数字电子钟
1、编辑硬件图
2、写入代码
3、校验完成
4、硬件图
例1
例2
例3
例4
例5
例6
五、软件程序
例5
#defineLEDS6
#include"reg51.h"
//led灯选通信号
unsignedcharcodeSelect[]={0x01,0x02,0x04,0x08,0x10,0x20};
unsignedcharcodeLED_CODES[]=
{0xc0,0xF9,0xA4,0xB0,0x99,//0-4
0x92,0x82,0xF8,0x80,0x90,//5-9
0x88,0x83,0xC6,0xA1,0x86,//A,b,C,d,E
0x8E,0xFF,0x0C,0x89,0x7F,0xBF};
voidmain()
{
chari=0;
longintj;
while
(1)
{
P2=0;
P1=LED_CODES[i];
P2=Select[i];
for(j=3000;j>0;j--);//该LED模型靠脉冲点亮,第i位靠脉冲点亮后,会自动熄来头。
//修改循环次数,改变点亮下一位之前的延时,可得到不同的显示效果。
i++;
if(i>5)i=0;
}
}
例6
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineON1//定义1为打开
#defineOFF0//定义0为关闭
#defineLEDBusP1//定义p1口为数码管段码口
sbitMIAO=P1^2;//秒点
sbitHOU_S=P3^0;//时十位位选
sbitHOU_G=P3^1;//时个位位选
sbitMIN_S=P3^2;//分十位位选
sbitMIN_G=P3^3;//分个位位选
sbitH_KEY=P3^5;//时调整键
sbitM_KEY=P3^7;//分调整键
sbitf=P3^4;
bitSHAN;//闪烁标志位
ucharsecond,minute,hour;//定义秒、分、时寄存器
ucharcodeLEDTab[]={0x14,0xd7,0x4c,//数码管段码表0--9
0x45,0x87,0x25,0x24,0x57,0x04,0x05};
voiddelay(uchart);//延时函数
voidinit();//初始化函数
voiddisplay();//显示函数
voidmin_tiao();//分调整函数
voidhou_tiao();//时调整函数
voidmain()
{
init();//调用初始化函数
while
(1)//主程序循环
{
if(!
H_KEY)hou_tiao();//如果时调整键按下(为0),调用时调整函数
if(!
M_KEY)min_tiao();//如果分调整键按下(为0),调用分调整函数
display();//调用显示函数
if(minute==0)
{
if(second<=5)
{
f=!
f;
}
}
}
}
voidinit()
{
TMOD=1;TH0=0X3C;TL0=0XB0;//定时器0模式1,50毫秒
ET0=1;TR0=1;EA=1;//开定时器0中断、启动定时器0、开总中断
}
voiddisplay()
{
LEDBus=LEDTab[minute%10];//分个位送数码管显示
MIAO=SHAN;//秒点闪烁
MIN_G=ON;//打开分个位位选
delay
(1);//显示1毫秒
MIN_G=OFF;//关闭分个位位选
LEDBus=LEDTab[minute/10];//分十位送数码管显示
MIAO=SHAN;//秒点闪烁
MIN_S=ON;//打开分十位位选
delay
(1);//显示1毫秒
MIN_S=OFF;//关闭分十位位选
LEDBus=LEDTab[hour%10];//时个位送数码管显示
HOU_G=ON;//打开时个位位选
delay
(1);//显示1毫秒
HOU_G=OFF;//关闭时个位位选
LEDBus=LEDTab[hour