单片机相关论文材料.docx
- 文档编号:12642313
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:36
- 大小:159.66KB
单片机相关论文材料.docx
《单片机相关论文材料.docx》由会员分享,可在线阅读,更多相关《单片机相关论文材料.docx(36页珍藏版)》请在冰豆网上搜索。
单片机相关论文材料
MCS-51/MCS-52单片机实验教材
1-1MCS-51/MCS-52单片机的跑马灯的硬软件设计
1MCS-51/MCS-52单片机跑马灯的硬件电路的设计。
图1-1
如图1-1是一个利用51单片机设计的跑马灯电路,51单片机的第9引脚为复位电路,单片机上电之初,使用C-R充电过程使得第9脚保持10ms以上的高电位,使机器复位。
复位开关K可使之做到随机复位。
51单片机的第18,19引脚为外接晶振,接一个12M的晶振,同51单片机内部电路配合,上电后产生12兆的晶振频率和1兆的机器周期频率。
因为89S52机片内含8K程序存储器,机器运行程序将下载其中,故89S51的引脚EA接电源VCC。
51单片机第32—39引脚为P0口,分别对应P0.7—P0.0,P0口外接10KΩ的上拉排阻。
P0口的P0.0—P0.7与74HC573的D0—D7一一对应相连,74HC573的Q0—Q7为输出,分别经220Ω电阻后接于发光二极管(跑马灯)的D0—D7上。
74HC573为8位锁存器,其1脚为输出使能端
低电平有效。
本电路将其接地,所以74HC573的8位Q端为直通输出。
74HC573的第11引脚LE为输入使能端,高电平有效。
本电路中或非门的输出与其相连,而或非门的两个输入端分别连接于51机的
和P2.7引脚上。
将P0口的数据写入,74HC573的输入条件是在写入的瞬间必须使P2.7端为低电平,写入有效时,
也同时为低电平。
这就构成,74HC573(跑马灯)的写入地址为0X7FFF,此电路中的或非门在此时从低电平观点视为低与非门。
2MCS-51/MCS-52单片机跑马灯的软件设计
/********************************************/
/*51单片机学习板主程序,12MHz晶振*/
/********************************************/
#include
#include
#include"delay.h"
#include"scan_key.h"
#include"timer0srv.h"
#include"spd.h"
voidInitial()//初始化函数
{
TMOD=0x11;
IT0=1;//键盘中断初始化
EX0=1;
PX0=0;
IT1=1;//直流电机转速计数初始化
EX1=1;
PX1=0;
ET1=1;//直流电机转速定时初始化
PT1=1;
TL1=0x00;
TH1=0x00;
TR1=1;
PT0=0;//步进电机调速和直流电机自动调速初始
ET0=1;
TL0=0x00;
TH0=0x00;
TR0=1;
EA=1;
P1=0xf0;
DAC_ADDR=0x7f;
}
voidmain()
{
unsignedcharLEDval=0x0f,i=0,j=0;
unsignedinttemp,step_delay=0;
Initial();
while
(1)
{
P1=0xf0;//键盘初始化
/*///////跑马灯程序////////////////////////*/
for(i=1;i<10;i++)
{
for(temp=0;temp<256;temp+=i)
{
LED_ADDR=temp;
delay_nms(80);
}
}
for(i=0,j=0x01;i<10;)
{
LED_ADDR=j;
delay_nms(100);
j=j<<1;
if(j==0)
{
i++;
j++;
}
}
for(i=0,j=0x80;i<10;)
{
LED_ADDR=j;
delay_nms(60);
j=j>>1;
if(j==0)
{
i++;
j=0x80;
}
}
}
}
在以上的程序中:
#include
#include
#include"delay.h"为延时函数。
#include"scan_key.h"为键盘控制函数。
initial()函数为预置函数,为后续键盘控制程序,定时器中断程序,直流电机,步进电机驱动程序预置特殊功能寄存器。
在main()函数中先对变量temp进行加i计数,采用双重循环方式,第一遍i=1,temp计数,每次加1,计数范围从0——255,达到256归零。
每计数一次,将结果送LED_ADDER。
LED_ADDR地址定义为0X7FFF,即将temp结果经P0口送锁存器74HC573,然后经发光二极管显示。
第二遍i=i+1=2,temp=temp+i,即temp每次加2,直到temp<256再对temp归零。
这一循环过程直到i=9,在每次送LED_ADDER地址(P0口)显示后,调延时程序延时200ms左右,以便让学生看清楚显示过程。
然后进入跑马灯左移位程序。
先将j=1,LED_ADDR=j,delay_nms(100);j=j<<1,(左移一位)。
再将LED_ADDR=j……直到j=0,再将j=1……这样循环左移10遍。
再进入循环右移过程:
先将j=0x80(即最左位置1),LED_ADDR=j;延时,j=j>>1(右移1位),LED_ADDR=j;直到j=0(右移8位后)再将经=0x80……如此循环10遍,再返回程序初始位置。
由于51机指令系统多数为单机器周期指令,运行速度是μs级,肉眼无法鉴别temp的计数过程,故在每次执行LED_ADDR=temp指令后,要调用延时函数delay_nms(80)使temp的值经P0口送74HC573锁存器后,保存显示在发光二极管400ms左右。
1-2.MCS-51/MCS-52单片机键盘控制及键号显示电路的软硬件设计。
1MCS-51/MCS-52单片机键盘控制及键号显示电路的硬件设计。
图1-2
51单片机键盘控制及键号数码显示硬件电路如图1-2,51单片机的P1口控制键盘,其中P1.0,P1.1,P1.2,P1.3为列线,P1.4,P1.5,P1.6,P1.7为行线。
四根行线各接1只5.1K电阻,再与电源VCC(+5V)相连。
四根行线同时也与74HC21(四输入与门)的输入端口相连,其输出端与51单片机的外中断0输入端P3.2相连。
因为P1口通过指令设置为0xF0,即“11110000”,四列线均为“0”,如果没有键按下,则四个行线均为高电平。
74HC21输出为高电平。
当有任意一个键被按下,则如图1-2所示,则74HC21的四个输入端总有一个输入为低电平。
此时的74HC21的功能为:
只要有一个输入端为低电平,则其输出端为低电平。
此下降沿触发51单片机的外中断0而引发中断服务(搜索中断键号),所以对键盘控制方式采用的是中断搜索方式。
键号的数码显示方式仍采用P0口输出给两片4511译码器,如图1-4。
DC4511为四位BCD码输入,译码后产生7段数码管显示信号驱动数码管进行键号显示。
图1-3
图1-4
4511的6脚,2脚,1脚,7脚为8421BCD码的输入端,引脚
为输入使能端,低电平有效。
B1为工作使能端,高电平有效。
其控制功能见表1-1。
表1-1
输入端
输出端
B1
LT
LE
DCBA
gfedcba
1
1
0
0001
0000110
1
1
0
0010
1011011
1
1
0
0011
1001111
1
1
0
…………………
……………………
0
1
0
××××
0000000
1
0
0
××××
1111111
当控制地址为0xBFFF时,(即P2状态为10111111),与
配合,驱动74HC02至4511的第5脚LE端,打开4511的锁存器,键号的显示由P0口输出。
见图1-2。
P0口的P0.3,P0.2,P0.1,P0.0与4511-1的D、C、B、A相连,再经译码后驱动数码管Ⅰ,显示键号的个位。
而P0的P0.7,P0.6,P0.5,P0.4与4511-2的D、C、B、A相连,经译码后驱动数码管Ⅱ,显示键盘号的十位数。
2MCS-51/MCS/52单片机键盘控制及键号显示电路的软件设计。
键盘控制程序采用外中断的方式进入,即有人按下任意一个键,则外中断0启动,外中断0的中断服务程序主要采用两级循环程序嵌套的方式。
键盘号码变量为一个无符号的8位nkeynumber。
外循环中首先将P1.3设置为0,P1其它端口设置为1,再读入P1口状态,进入内循环程序。
第一步测试P1.4是否为0,(见图1-2及扫描键盘子程序scan_key.h)。
若是,则是0号键被按下,将键号0送nkeynumber,退出。
若不是,则检查P1.5是否为0,若是,是4号键被按下,则将键号4送nkeynumber,退出。
若不是,则检查P1.6是否为0………一直检查到P1.7。
若没查到键号,则退出内循环,进入外循环,再将P1.2置0,P1其它端口置1,再读入P1口状态,又进入内循环,再分别查1,5,9,13号键。
若是其中某键,则将键号送nkeynumber,若没查到键号,则退出内循环,进入外循环,将P1.1置0,P1其它端口置1,读入P1口状态,又进入内循环,再分别查2,6,10,14号键。
若是其中某键,则将键号送nkeynumber,若没查到键号,则退出内循环,进入外循环,最后将P1.0置0,查找最后的四个键号。
当查找到键号后,对nkeynumber进行2-10进制数的处理,过程是:
nkeynumber/10<<4,即取得nkeynumber除以10后取整再左移4位,由P1.7—P1.4输出键盘号码的十位给4511-Ⅱ,将nkeynumber%10取余数,即键盘号码的个位由P1.3—P1.0输出给4511-Ⅰ。
键盘中断及控制,键号显示子程序如下:
/****************扫描矩阵键盘子程序scan_key.h******************/
#include
#include
#include"delay.h"
#ifndef_SCAN_KEY
#define_SCAN_KEY
#defineSEG_ADDRXBYTE[0xbfff]
#defineLED_ADDRXBYTE[0x7fff]
unsignedcharnKeyNumber;
voidint0()interrupt0
{
inti,j;
intPin1;
EX0=0;
delay_nms(20);
//if(P3_2==0)
//{
for(i=0;i<4;i++)//i代表行,j代表列,每列逐行扫描
{
P1=0xff&(~(0x01<<3-i));
Pin1=P1;
for(j=0;j<4;j++)
{
if(((Pin1>>(4+j))&0x01)==0)
{
nKeyNumber=i+j*4;
i=4;
j=4;
P1=0xf0;
SEG_ADDR=(nKeyNumber/10<<4)+nKeyNumber%10;
delay_nms(20);
EX0=1;
return;
}
}
}
//}
P1=0xf0;
EX0=1;
}
#endif
1-3MCS-51/MCS/52单片机控制直流电机转速电路的软硬件设计。
1MCS-51/MCS/52单片机控制直流电机转速电路的硬件设计。
如图1-5所示,将P0口的P0.0-P0.7与A/D转换器0832的D0-D7相连,单片机的待转换数据由P0口输出给8位D/A转换器0832的输入寄存器,写入地址为0xDFFF,即89S51的P2.5=0与
同时为低,经74HC02反向后,则8位输入寄存器的输入使能端ILE为高,将D0—D7的8位转换数据送入0832寄存器,DAC0832内部两级寄存器接成直通状态,即0832的
,
,XFER均接低电平,所以DAC0832的D/A转换器对输入的数据信号实时进行转换输出。
输出端口为IOUT1和IOUT2。
输出的模拟信号由两级运放LM324放大馈送至直流电机。
LM324均由负极端口输入而正极端口接地,构成两极反向放大电路。
故最终给电机的直流电流信号与DAC0832的输出端口的电流电压信号为同相信号,运算放大器的供电电压为±9V。
图1-5
直流电机一端接LM324的输出,另一端接地。
由于LM324用±9V供电,则LM324的输出电压则会以0V为中心点,对DAC0832的输出端的输出信号进行电流电压放大,使LM324的输出在+8V—-8V之间成比例地浮动,从而驱动直流电机以不同速度正转和反转。
2MCS-51/MCS/52单片机控制直流电机转速电路的软件设计。
如下程序所示,用多分支语句SWITCH语句对不同按键下对0832数模转换器赋给不同的转换值。
当键值变量nkeynumber的值为0时,给数模转换器0832赋值7F,其十进制值为127。
经模数转换后,在LM324输出给直流电机的电压为0V,使得直流电机停转。
同时,经步进电机控制端口赋值为SEG_ADDR=0x00,所以步进电机停转。
当键值变量nkeynumber的值为1时,给数模转换器0832的数值量为0x00,经模数转换LM324比例放大后,赋给直流电机电压为-8V,直流电机以反向最快速度转动,转速达到48转/S。
当键值变量nkeynumber的值为2时,给数模转换器0832的数值量为25,经模数转换LM324比例放大后,赋给直流电机电压为-6.8V,直流电机以39转/S左右反向转动。
键值由1逐步增加到6,数模转换值逐次递增至25,LM324输出电压,以每次递增1.3V左右。
当键值为6时,赋给模数转换器的数值为127,此时LM324输出值为0V,直流电机停止转动。
当键值nkeynumber=7时,模数转换赋值为150,经过模数转换器后由LM324比例放大输出电压为+1.2V,直流电机以2转/S左右的速度正向转动。
当键值变量nkeynumber的值为8时,给数模转换器0832的数值量为175,经模数转换LM324比例放大后,赋给直流电机电压为+2.5V,直流电机以10转/S正向转动。
当键值逐次增大,赋给数模转换器的数值以25的速度递增,LM324则以每次1.3V逐次递增。
当键值变量nkeynumber的值为12时,LM324赋给直流电机电压为+8V,直流电机正向运动,速度为48转/S。
/***********************************/
/*键盘中断及直流电机手动变速速控制*/
/**********************************/
#include
#include
#include"delay.h"
#ifndef_SCAN_KEY
#define_SCAN_KEY
#defineSEG_ADDRXBYTE[0xbfff]//数码管地址
#defineLED_ADDRXBYTE[0x7fff]//跑马灯地址
#defineDAC_ADDRXBYTE[0xdfff]//直流电机地址
#defineSTEP_ADDRXBYTE[0xefff]//步进电机地址
unsignedcharnKeyNumber;
voidint0()interrupt0
{
inti,j;
intPin1;
EX0=0;
delay_nms(20);
for(i=0;i<4;i++)//i代表行,j代表列,每列逐行扫描
{
P1=0xff&(~(0x01<<3-i));
Pin1=P1;
for(j=0;j<4;j++)
{
if(((Pin1>>(4+j))&0x01)==0)
{
nKeyNumber=i+j*4;
i=4;
j=4;
P1=0xf0;
SEG_ADDR=nKeyNumber/10+(nKeyNumber%10<<4);//交换键值位置并赋键值
//////////*根据键盘键值,调整直流电机转速*///////////////////////
switch(nKeyNumber)
{
case0:
DAC_ADDR=0x7f;
SEG_ADDR=0x00;
break;
case1:
DAC_ADDR=0x00;
break;
case2:
DAC_ADDR=25;
break;
case3:
DAC_ADDR=50;
break;
case4:
DAC_ADDR=75;
break;
case5:
DAC_ADDR=100;
break;
case6:
DAC_ADDR=127;
break;
case7:
DAC_ADDR=150;
break;
case8:
DAC_ADDR=175;
break;
case9:
DAC_ADDR=200;
break;
case10:
DAC_ADDR=225;
break;
case11:
DAC_ADDR=240;
break;
case12:
DAC_ADDR=255;
break;
default:
break;
}
EX0=1;
return;
}
}
}
P1=0xf0;
EX0=1;
}
#endif
1-4MCS-51/MCS-52单片机转速计数控制电路的软硬件设计
图1-6
1MCS-51/MCS-52单片机转速计数控制电路的硬件电路设计
如图1-6所示,由红外发射管D和红外接收管T组成的转速检测电路中,当D和T之间没有遮挡物时,红外光由D照向T,红外接收管T受光后饱和导通,A点电位为0.3V,经或非门输出高电平。
P3.3端因高电平无中断触发;当转动轴上的叶片经过D-T之间划过瞬间,T管因叶片遮挡不受光而截止,A点呈高电平。
在P3.3端口接收到一个由高电平至低电平的下降沿,导致外中断1被触发而引起中断请求。
转动轴上的叶片每转动一周,划过D-T一次,红外光被遮一次而中断一次。
如果在单位时间(秒)内D-T间被遮挡n次,则被中断n次,直流电机的转速便是n。
2MCS-51/MCS-52单片机转速计数控制电路的软件设计
在头文件中设外中断1为0级中断,定时器1为1级中断,开外中断0,开定时器1中断,开定时器1。
在直流电机测速程序中,ft为转轴转速次数变量,外中断1每中断一次,则对ft进行加1操作。
Pt为定时器1的中断次数,定时器1工作于方式1,即十六位计数。
每中断一次pt+1,若中断15次,总时间为65535μs*15=983ms。
外加每中断一次,所占用的时间,总时间约1秒钟。
计时1秒后,先将转动圈数变量修正(因为用频率计检测后,51单片机所计转速与频率计计数略有误差,所以需要修正。
)51单片机每秒测得转速为大于45转时,ft减4与频率计计数相当,51单片机每秒测得转速大于40转时,ft减3与频率计计数相当;当转速大于35转时,ft减2合适。
修正后将ft的值送数码管显示。
Ft清零后重新计数。
/******************************************/
/*直流电机测速程序*/
/*pt:
T1中断次数,ft:
直流电机旋转圈数变量*/
/******************************************/
#include
#include
#include"delay.h"
#ifndef_SPD_H
#define_SPD_H
unsignedintpt=0;
unsignedcharft=0;
voidint1()interrupt2
{
ft=ft+1;
}
voidtimer1_isr()interrupt3
{
unsignedcharpp;
if(pt>=15)
{
pt=0;
if(ft!
=0)
{
if(ft>45)
ft=ft-4;
elseif(ft>40)
ft=ft-3;
elseif(ft<35)
ft=ft-3;
}
pp=ft/10+(ft%10<<4);
SEG_ADDR=pp;
ft=0;
}
else
pt=pt+1;
}
#endif
1-5MCS-51/MCS-52单片机控制步进电机转速的硬软件设计
如图1-7所示,步进电机的驱动数码信号经P0.3,P0.2,P0.1,P0.0传送至HC573的D3,D2,D1,D0和D7,D6,D5,D4,传送到D7,D6,D5,D4的数码信号由HC573的Q7,Q6,Q5,Q4输出,再驱动四只发光二极管,显示驱动步进电机的数码及转速频率,而另外一路经过Q3,Q2,Q1,Q0传送至LM2003电流放大,LM2003的最大驱动电流可以达到0.5A。
图1-7
1MCS-51/MCS-52单片机控制步进电机转速的硬件电路设计
由LM2003去驱动步进电机正向或者反向转动。
由于步进电机为感性负载,当驱动器LM2003输出端关断时,势必引起电机与LM2003D端口较大的反向电动势,危及LM2003输出端口的安全。
因此电路中在LM2003与步进电机的输入端并接四只二
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 相关 论文 材料