《电子工程训练》报告.docx

上传人:b****5 文档编号:30184741 上传时间:2023-08-05 格式:DOCX 页数:13 大小:305.20KB
下载 相关 举报
《电子工程训练》报告.docx_第1页
第1页 / 共13页
《电子工程训练》报告.docx_第2页
第2页 / 共13页
《电子工程训练》报告.docx_第3页
第3页 / 共13页
《电子工程训练》报告.docx_第4页
第4页 / 共13页
《电子工程训练》报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

《电子工程训练》报告.docx

《《电子工程训练》报告.docx》由会员分享,可在线阅读,更多相关《《电子工程训练》报告.docx(13页珍藏版)》请在冰豆网上搜索。

《电子工程训练》报告.docx

《电子工程训练》报告

大连理工大学本科实验报告

 

题目:

基于51单片机的点阵显示及直流电机控制

 

课程名称:

《电子工程训练》

学院(系):

电子科学与技术学院

专业:

集成电路设计与集成系统

班级:

电集1001

学号:

201081086

学生姓名:

陈朝吉

成绩:

 

2012年9月28日

题目:

基于51单片机的点阵显示及直流电机控制

1设计要求

以51单片机为核心,设计、焊接并调试一个实际单片机控制系统,实现点阵显示姓名及学号,并利用系统实现驱动直流电机控制玩具挖掘机。

系统设计具体要求:

(1)电源电路(交、直流供电)。

(2)51单片机最小系统。

(3)单个LED灯闪烁。

(4)点阵显示(三极管驱动),分流动态和闪动态两种显示方式。

(5)三路直流电机驱动电路。

(6)按键控制电机转动并在点阵同步显示。

2设计分析及系统方案设计

基于51单片机最小系统实现,这里分为硬件和软件俩部分进行设计。

(1)硬件部分:

a.设计绘制电路原理图

b.焊接实物电路

c.电路测试

硬件系统框图如下:

(2)软件部分:

a.编写系统源程序

b.系统程序调试(结合硬件电路)

3各功能模块硬件电路设计

(1)电源电路

a.直流供电

b.交流供电

(2)51单片机最小系统

(3)点阵驱动电路

(4)直流电机驱动电路(H桥电路)

4系统软件设计

(1)流程图为:

(2)程序源代码为:

#include"reg52.h"

#defineucharunsignedchar

#defineuintunsignedint

sbitmetor1_a=P1^0;

sbitmetor1_b=P1^1;

sbitmetor2_a=P1^2;

sbitmetor2_b=P1^3;

sbitmetor3_a=P1^4;

sbitmetor3_b=P1^5;//3个电机控制

sbitkey_metor1=P3^0;//3个按键控制3个电机

sbitkey_metor3=P3^1;

sbitkey_metor2=P3^2;

sbitled=P3^7;//led位声明

ucharcnta;//列选

ucharcntb;//行选

ucharcntc;

ucharcntd;

uchara,b,c,d;

ucharflag0,flag1;//流动标志,自加1为向左移一位

uinttimecount0,timecount1,timecount,t;//计数控制流动速度

ucharcodetab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//列扫描数组

ucharcodedigittab[10][8]={//行显数组

{0x40,0x57,0x55,0xf5,0x55,0x57,0x40,0x00},//吉

{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00},//2

{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00},//0

{0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00},//1

{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00},//0

{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00},//8

{0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00},//1

{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00},//0

{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00},//8

{0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00},//6

};

ucharcodemetor_printf[8][8]={//行显数组(三路电机,初始默认为+++)

{0x20,0x70,0x24,0x0e,0x24,0x70,0x20,0x00},//+++

{0x20,0x70,0x24,0x0e,0x24,0x20,0x20,0x00},//++-

{0x20,0x70,0x24,0x04,0x24,0x70,0x20,0x00},//+-+

{0x20,0x70,0x24,0x04,0x24,0x20,0x20,0x00},//+--

{0x20,0x20,0x24,0x0e,0x24,0x70,0x20,0x00},//-++

{0x20,0x20,0x24,0x0e,0x24,0x20,0x20,0x00},//-+-

{0x20,0x20,0x24,0x04,0x24,0x70,0x20,0x00},//--+

{0x20,0x20,0x24,0x04,0x24,0x20,0x20,0x00},//---

};

voidinit();

voiddelay_ms(ucharm);

voidkey_scan();//函数声明

voidmain()

{P1=0xd5;//初始化,默认010101为三个电机正向

init();

while

(1)

{

key_scan();//调用键盘检测函数

}

}

voidinit()//初始化化函数

{cnta=0;

cntb=0;

cntb=0;

a=0;

b=0;

c=0;

flag0=0;//显示切换标志

flag1=0;

timecount0=0;//计数

timecount1=0;//计数

t=80;//流动显示移位计数

TMOD=0x11;//中断工作方式设置

TH0=(65536-3000)/256;//定时器0赋初值

TL0=(65536-3000)%256;//定时器0赋初值,约为3ms扫描时间

TH1=(65536-50000)/256;//定时器1赋初值

TL1=(65536-50000)%256;//定时器1赋初值,约为50ms扫描时间

EA=1;//开启总中断

ET0=1;//开启定时器/计数器0中断

ET1=1;//开启定时器/计数器1中断

TR0=1;//定时0启动

TR1=1;

}

voiddelay_ms(ucharm)//延迟函数(精确到毫秒)

{uchari,j;

for(i=m;i

for(j=122;j>0;j--);

}

voidkey_scan()//按键检测函数

{

if(key_metor1==0)

{delay_ms(10);//消抖

if(key_metor1==0)//确实有按键按下

{while(!

key_metor1);//等待按键释放

metor1_a=!

metor1_a;

metor1_b=!

metor1_b;//取反,电机反向

a=!

a;

ET0=0;//关闭开启定时器0

P0=0xff;//点阵消影

flag0=2;//进入电机状态显示

ET0=1;//重现开启定时器0

}

}

if(key_metor2==0)

{delay_ms(10);

if(key_metor2==0)

{while(!

key_metor2);

metor2_a=!

metor2_a;

metor2_b=!

metor2_b;

b=!

b;

ET0=0;

P0=0xff;

flag0=2;

ET0=1;

}

}

if(key_metor3==0)

{delay_ms(10);

if(key_metor3==0)

{

while(!

key_metor3);

metor3_a=!

metor3_a;

metor3_b=!

metor3_b;

c=!

c;

ET0=0;

P0=0xff;

flag0=2;

ET0=1;

}

}

d=(a*4+b*2+c*1);//通过a、b、c三位算出点阵行显数组(电机)

}

voidt0(void)interrupt1//定时器0中断服务程序

{TH0=(65536-3000)/256;//定时器高位装载数据

TL0=(65536-3000)%256;//定时器低位装载数据

if(flag0==0)//流动动显示,flag0为标志

{

P0=tab[cnta];//列选

P2=~digittab[cntc][cntb];//行选

if(++cnta>=8-flag1)cnta=0;

if(++cntb>=8)cntb=flag1;

if(++timecount0>=t)//流动延迟时间约为

{timecount0=0;

flag1++;

t=t-10;

cntb=flag1;

P0=0xff;

if(flag1>=8)

{flag1=0;t=80;

if(++cntc>=10)

{cntc=0;

flag0=1;

}

}

}

}

if(flag0==1)/闪动显示,flag0为标示

{P0=tab[cnta];//列选

P2=~digittab[cntd][cnta];//行选,显示单个数字

if(++cnta>=8)cnta=0;

if(++timecount>=333)//单个数字显示延迟计数,延迟时间约333*3ms=1s

{

timecount=0;

if(++cntd>=10)//单个数字显示延迟后,cntb自加1,进入下个数

//字扫描显示

{cntd=0;flag0=2;

}

}

}

if(flag0==2)//进入直流电机显示

{P0=tab[cnta];//列选

P2=~metor_printf[d][cnta];

if(++cnta>=8)cnta=0;

}

}

voidt1(void)interrupt3//定时器1中断服务程序

{TH1=(65536-50000)/256;//定时器1赋初值

TL1=(65536-50000)%256;//定时器1赋初值

if(++timecount1>=20)

{led=!

led;//led每隔50ms*20=1s闪烁

timecount1=0;

}

}

5系统调试运行结果说明计分析

(1)系统运行的硬件环境:

winXP电脑一台

(2)系统运行的软件环境:

MedWin(集成开发环境),SuperPro/Z(编程器),软件仿真KeilC51(C51编译器)。

(3)系统运行结果:

a.单个LED灯在系统控制下以约1s的时间间隔实现闪烁。

b.点阵闪动显示中,以约1s的时间间隔闪动显示“吉201081086”。

c.点阵流动显示中,点阵实现流动速度可控从右往左流动显示出“吉201081086”。

d.直流电机控制部分,三个按键分别控制三个电机转动方向,每按下一次按键,相对应的电机实现反转,实现控制挖掘机工作。

e.综合以上模块功能后,系统成功实现LED以一秒时间闪烁(独立于其他模块),而点阵在系统上电后先流动后闪动显示出“吉201081086”,然后显示三个电机初始的默认状态“+++”,若有按键按下,则相应的电机反转,同时点阵上对应的“+”变成“-”。

若先初始阶段(还没完成流动或者闪动显示)即有按键按下,则点阵立即切换显示相应的三个电机的状态。

若按下系统复位键,则系统重复上述程序运行过程。

注:

上述所付源程序为综合各个模块功能后的控制程序,这里略去各个独立模块的单独源程序。

6结论

本次实践电子电路系统基本成功实现题目设计要求功能。

硬件电路焊接部分,总体布线整体性相对较好,不足之处是在焊接过程中不注意板子的磨损导致氧化,使得电机驱动电路扩展到另一块板上,在安装原理电路图焊接实物电路的过程中,深有体会一点便是先对布线进行规划再具体焊接,可节省后续布线的检查和电路调试验证大量时间,且易发现错误,同时布线也达到美观。

软件部分,基于51单片机采用C语言编程,更加简易明了。

系统中采用单片机P0和P2作为点阵的列选和行选控制端口。

LED灯采用P3.7口控制,控制电机的三个按键分别接到P3.0、P3.1、P3.2口。

点阵显示电路和LED闪烁分别应用51单片机自带的两个定时器中断进行控制,这样可以实现精确地控制点阵显示和led闪烁的时间控制。

三个按键为独立按键,满足任意控制三个电机的转动,达到驱动小挖掘机工作。

参考文献

《新概念51单片机C语言教程——入门、提高、开发、扩展全攻略》电子工业出版社,郭天祥著。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1