微控制器课程设计报告Word格式文档下载.docx
- 文档编号:20378726
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:62
- 大小:3.12MB
微控制器课程设计报告Word格式文档下载.docx
《微控制器课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微控制器课程设计报告Word格式文档下载.docx(62页珍藏版)》请在冰豆网上搜索。
8255有三种基本工作方式,
三种工作方式由工作方式控制字决定,方式控制字由CPU通过输入/输出指令来提供.三个端口中PC口被分为两个部分,上半部分随PA口称为A组,下半部分随PB
口称为B组.其中PA口可工作与方式0、1和2,而PB口只能工作在方式0和1。
8255共有40个引脚,采用双列直插式封装,各引脚功能如下:
D0--D7:
三态双向数据线,与单片机数据总线连接,用来传送数据信息。
CS:
片选信号线,低电平有效,表示芯片被选中。
RD:
读出信号线,低电平有效,控制数据的读出。
WR:
写入信号线,低电平有效,控制数据的写入。
Vcc:
+5V电源。
PA0--PA7:
A口输入/输出线。
PB0--PB7:
B口输入/输出线。
PC0--PC7:
C口输入/输出线。
RESET:
复位信号线。
A1、A0:
地址线,用来选择8255内部端口。
GND:
地线
1.4软件设计
源程序:
#include<
reg51.h>
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetable[]=//段选代码
{0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
ucharcodeaddress[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//位选代码
voiddelay(uint);
voidmain()
{
ucharm=0;
while
(1)
{
if(m==6)m=0;
//选六位
P2=address[m];
//送位选信号,确定要显示的数码管
P1=table[m++];
//送段选信号,确定要显示的数字
delay(500);
}
}
voiddelay(uintm)//延时函数
{
while(m--);
1.5实验调试结果
在数码管上稳定显示123456
1.6实验心得体会
刚下载这个程序的时候,没有显示成功,是因为所给程序的位选数码管是8位,而实验箱的数码管个数是6位修改后,实验成功。
但是下次还是应该注意段选和位选的问题。
2步进电机控制系统
2.1设计任务
通过单片机的I/O口控制步进电机运转,实现正转和反转。
2.2设计思路
通过编程设置单片机的P1口分别作为四相步进电机的电流输入信号,控制达林顿驱动芯片连接的步进电机的转动。
2.3工作原理及参考连线
使用开环控制方式能对步进电机的方向、速度和角度进行调节。
所谓步进,就是指每给步进电机一个递进脉冲,步进电机各绕组的通电顺序就改变一次,即电机转动一次。
根据步进电机控制绕组的多少可以将电机分为三相、四相和五相。
课程设计中所使用的步进电机为四相八拍电机,电压为DC5V,其励磁线圈及其励磁顺序如图及表所示。
图励磁线圈表励磁顺序
步进电机控制参考线路图
表P0端口引脚的电平在各步中的情况
注意:
步进电机在不使用时请断开连接,以免误操作使电机过分发热。
步进电机的主要特性:
1)步进电机必须加驱动才可以运转,驱动型号必须为脉冲信号,没有脉冲的时候,步进电机静止,如
果加入适当的脉冲信号,就会以一定的角度(称为步角)转动。
转动的速度和脉冲的频率成正比。
2)腾龙版步进电机的步进角度为7.5度,一圈360度,需要48个脉冲完成。
3)步进电机具有瞬间启动和急速停止的优越特性。
4)改变脉冲的顺序,可以方便的改变转动的方向。
2.4软件设计
#include"
sst89x5x4.h"
sbitK1=P3^0;
//控制正转
sbitK2=P3^1;
//控制反转
sbitK3=P3^2;
//控制停止
unsignedcharL_value[8]={0x0E,0x0C,0x0D,0x09,0x0B,0x03,0x07,0x06};
//电机旋转对应的代码
voiddelay()
unsignedinti;
for(i=0;
i<
30000;
i++);
unsignedcharm,n;
P0=0x0;
if(K1==1)
for(n=0;
n<
12;
n++)//正转一周
{
for(m=0;
m<
8;
m++)
{
P0=L_value[m];
delay();
}
}
elseif(K2==1)
n++)//反转一周
for(m=8;
m>
0;
m--)
P0=L_value[m-1];
elseif(K3==1)P1=0;
//停止
2.5实验调试结果
2.6实验心得体会
原来所给程序异步电机的正转和反转都是在一个主程序中,先正转在自动反转,而我们组后来加以改进通过开关控制按键,实现了主动控制异步电机的正转,反转和停止。
3直流电机PWM调速系统
3.1设计任务
利用单片机控制直流电机,掌握脉宽调制直流调速的方法。
通过调节脉冲宽度,改变占空比,从而改变输出,达到改变直流电机转速的目的。
3.2设计思路
通过编程设置单片机的I/O口分别作为直流电机的一极控制端,另一极与+12V直流电源的正极相连,通过单片机的P1.7口来模拟PWM输出,经过驱动电路来驱动直流电机,实现脉宽调速。
3.3工作原理及参考连线
直流电机单元由DC12V、1.1W的直流电机、小磁钢、霍尔元件及输出电路构成。
PWM的示意图如图所示。
通过调节T1的脉冲宽度,可以改变T1的占空比,从而改变输出,达到改变直流电机转速的目的。
PWM脉冲示意图
通过单片机的P1.7口来模拟PWM输出,经过驱动电路来驱动直流电机,实现脉宽调速。
将P1.7直接与驱动电路的A端连接,驱动单元的输出A’连接直流电机单元的2端。
直流电机接线图
3.4软件设计
#include<
#defineT_value(unsignedchar)0x80//T周期值
#defineT1_value(unsignedchar)0x20//T周期中高电平周期T1值
#defineTH0_value(unsignedchar)0xFE//定时器T0计数值(高)
#defineTL0_value(unsignedchar)0x00//定时器T0计数值(低)
sbitDRV=P1^7;
//设端口
unsignedcharT_Count;
//延时次数
voidinit_tim0()//定时器0初始化,定时基数
TMOD=0x01;
TH0=TH0_value;
TL0=TL0_value;
TR0=1;
ET0=1;
EA=1;
voidint_tim0()interrupt1
//越小,计数初值越大
T_Count--;
unsignedcharTx;
DRV=0;
init_tim0();
T_Count=T1_value;
Tx=T1_value;
if(T_Count==0)
DRV=~DRV;
Tx=T_value-Tx;
T_Count=Tx;
}
3.5实验调试结果
3.6实验心得
这个程序利用定时/计数器0来控制P17输出方波的占空比。
通过改变占空比,来实现直流电机的调速。
若P17输出方波的占空比越小,电机的转速越快。
4键盘显示设计
4.1:
设计内容:
利用8255单元与键盘及数码管显示单元连接,扫描键盘输入,并将扫描结果送数码管显示。
当按下其中一个键时,将对应的编号在一个数码管上显示,当再按下时,将这个按键的编号显示在下一个数码管上,数码管可显示最近几次按下的按键编号。
4.2工作原理:
8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:
方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。
8255的内部结构及引脚如图所示,8255工作方式控制字和C口按位置位/复位控制字格式如图所示。
键盘扫描及数码管显示单元原理图
4.3原理图
三种工作方式由工作方式控制字决定,方式控制字由CPU通过输入/输出指令来提供.三个端口中PC口被分为两个部分,上半部分随PA口称为A组,下半部分随PB口称为B组.其中PA口可工作与方式0、1和2,而PB口只能工作在方式0和1。
地线。
键盘扫描及数码显示接线图
4.4实验源程序:
#include"
Absacc.h"
#defineC8255_AXBYTE[0x7F00]//8255端口地址定义
#defineC8255_BXBYTE[0x7F01]
#defineC8255_CXBYTE[0x7F02]
#defineC8255_CONXBYTE[0x7F03]
//数码管显示编码
unsignedchara[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//显示缓冲
unsignedcharb[]={0x00,0x00,0x00,0x00,0x00,0x00};
unsignedcharkey_down;
unsignedcharkey_value;
unsignedcharkey_count;
voiddelay(unsignedinttime)
time;
voidkeyscan()//按键扫描函数
unsignedcharcc;
C8255_A=0x00;
//X1~X4置0
cc=C8255_C;
//得到Y1~Y4的值
key_down=(~cc)&
0x0f;
voiddisplay()//显示函数
unsignedchari,j=0xDF;
//选位
6;
i++)
C8255_A=0xFF;
//11111111
C8255_B=a[b[i]];
//查表输出显示
C8255_A=j;
//X选择
delay(0x100);
j=(j>
>
1)|(j<
<
7);
//右移1位
voidclear()//清屏
C8255_B=0x00;
//屏幕显示0
voidwritebuffer()
b[key_count]=key_value;
//
key_count--;
if(key_count==-1)
key_count=5;
display();
clear();
keyscan();
while(key_down)//键盘消抖
display();
clear();
keyscan();
voidgetkey()//得到按键值
unsignedcharvalue;
unsignedchari,j=0xFE;
4;
value=C8255_C;
if(!
(value&
0x01))//行1
key_value=i+0;
writebuffer();
return;
0x02))//行2
key_value=i+4;
0x04))//行3
key_value=i+8;
0x08))//行4
key_value=i+12;
j<
=1;
C8255_CON=0x81;
//8255初始化
key_count=5;
//显示
//清屏
//按键扫描
if(key_down)//判是否有键按下
display();
delay(0x80);
clear();
keyscan();
if(key_down)
getkey();
//得到按键值
提高部分:
设计内容1:
利采用4*4键盘,将键盘进行标号,记做0~F,当按下其中一个按键时,将该按键对应的编号在一个数码管显示出来。
voiddelay(unsignedinttime)//延时
//10101111
i<
i++)
key_count=3;
设计内容2:
实现功能:
采用4X4键盘,将键盘进行编号,记作0~F,当按下其中一个按键时,将该按键对应的编号在同时在单独1个数码管上显示出来。
unsignedcharb[]={0x00,0x00,0x0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 控制器 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)