1616点阵显示实训.docx
《1616点阵显示实训.docx》由会员分享,可在线阅读,更多相关《1616点阵显示实训.docx(22页珍藏版)》请在冰豆网上搜索。
1616点阵显示实训
信息工程学院实训报告
题目:
16×16点阵显示实训
步进电机控制实训
学生姓名:
范怀福
学号:
1067106225
专业:
自动化
班级:
10-2
指导教师:
贾玉瑛、李爱莲、梁丽、陈波、李琦
实训任务书
课程名称
微计算机应用及计控技术实训
实训地点
实训名称
16×16点阵显示实训步进电机控制实训
B307、B308
指导教师
贾玉瑛、李爱莲、梁丽、陈波、李琦
时间
第十九周
一、实训的基本要求
1、预习要求:
学生要根据实训题目要求查阅参考资料,提前进行认真的预习,初步弄懂实训内容、原理,并写出预习报告;预习报告应包括基本的实训内容和实训方案,基本实训步骤、过程以及数据记录,对于有设计内容的项目要提前做好设计方案。
2、操作要求:
学生要搞清本次实训需使用的仪器,每种仪器在实训中所起的作用,合理选择使用仪器,正确使用测量方法。
根据已设计的实训步骤并经老师同意后开始实训。
学生要认真观察分析实训现象,记录实训数据。
运用所学知识解决实训中发生的问题;每项实训结果,需经教师认可后,方可结束实训;实训后认真填写实训记录。
3、实训报告要求:
学生在做完实训后,科学地、真实地、完整地完成实训报告。
实
训报告应包括实训原理、实训方法的概述;实训步骤的描述;实训现象和实训数据的记载;最后应对实训结果进行分析,并回答相应实训项目后的思考题。
二、实训内容
1、利用实验系统16×16点阵实验单元,以两种方式控制点阵显示。
要求编制程序实现汉字点阵循环显示:
“专业班级姓名学号”(也可自行设计显示内容)
2、从键盘上输入正、反转命令,转速参数和转动步数显示在显示器上,CPU再读取显示器上显示的正、反转命令,转速级数(16级)和转动步数后执行。
转动步数减为零时停止转动。
三、评分标准
实训成绩评定依据包括以下几点:
1、实训态度及出勤情况(10%)――态度是否认真,有无迟到早退等;
2、设计方案的合理性、可行性(20%)
3、操作的规范性或正确性(10%)――是否认真阅读操作说明书,是否严格按照规
程进行操作,是否具有严格的科学态度,有无明显的操作失误;
4、实训结果(20%)――实训内容的完整性,有无抄袭他人的现象;
5、实训报告提交时效性(10%)――是否及时提交实训报告;
6、实训报告内容(30%)——撰写是否认真,格式是否规范,内容是否完整,数据结论是否合理等。
分为优、良、中、及格、不及格五个等级或给分数。
考核方式:
实训期间教师现场检查;评阅实训报告。
四、建议参考资料
1、实训教材
2、参考书目:
《新编单片机原理与应用》潘永雄,西安电子科技大学出版社,2003.2第1版
《单片微型计算机大学读本》李勋,北京航空航天大学出版社,1998.11第1版
《基于proteus的单片机系统设计与仿真实例》蒋辉平,机械工业出版社,2009.7
摘要
1、LED点阵显示是是我们常用的的显示器件,它不仅可以实现数字、汉字的显示,同时也可以实现简单图像的显示,在我们日常生活中得到了广泛的应用,例如:
广告牌,跑马灯等.
2、关键词:
16x16点阵显示
正文
一16×16点阵显示
1、实训目的
(1)利用单片机I/O口或以扩展锁存器的方式控制点阵显示。
(2)掌握单片机与16×16点阵块之间接口电路设计及编程。
2、实验内容
利用单片机实验仿真系统,用试验箱上的的16x16点阵显示器实现所要求的的字形显示。
I/O口地址分配
扩展名称
口地址
用处
控制方式
273(4)
0FFE3H
列代码1
扩展锁存器
273
(1)
0FFE0H
列代码2
扩展锁存器
273(3)
0FFE2H
行扫描1
扩展锁存器
273
(2)
0FFE1H
行扫描2
扩展锁存器
I/O口分别提供字形代码(列码)、扫描信号(行码),凡字形代码位为“1”、行扫描信号为“1”点亮该点,否则熄灭;通过逐行扫描循环点亮字形或曲线。
3、74LS273、74LS138芯片简介
3、174LS273芯片
74LS273是一种带清除功能的8D触发器,1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作数据锁存器,地址锁存器。
D0~D7:
出入;Q0~Q7:
输出第一脚WR:
主清除端,低电平触发,即当为低电平时,芯片被清除,输出全为0(低电平);CP(CLK):
触发端,上升沿触发,即当CP从低到高电平时,D0~D7的数据通过芯片,为0时将数据锁存,D0~D7的数据不变。
3、274LS138芯片
74LS138为3线-8线译码器,其工作原理如下:
①当一个选通端(E1)为高电平,另两个选通端((/E2))和/(E3))为低电平时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。
比如:
A2A1A0=110时,则Y6输出端输出低电平信号。
②利用E1、E2和E3可级联扩展成24线译码器;若外接一个反相器还可级联扩展成32线译码器。
③若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。
4、实验电路
5、实验连线
⑴连接138译码输入端A.B.C,其中A连A2,B连A3,C连A4,138使能控制输入端G与总线单元上方的GS相连。
⑵点阵显示单元的16×16CS与译码单元Y0相连。
⑶用8芯扁平电缆将点阵显示单元的数据总线插座与数据总线单元任一插座相连。
6、实验方法
利用51单片机实验系统,在计算机上编写程序,使用行列扫描的方法,先对横行进行扫描,然后在对竖列进行扫描,或者先对竖列进行扫描,在对横行进行扫描。
编程下载,验证是否正确。
7、实验程序
#include
#include
#defineLIE_HXBYTE[0XFFE3]
#defineLIE_LXBYTE[0XFFE0]
#defineHANG_HXBYTE[0XFFE2]
#defineHANG_LXBYTE[0XFFE1]
#defineuintunsignedint
#defineucharunsignedchar
voidinit_t0_1()
{TH0=0X3C;
TL0=0XB0;
TMOD=1;
TR0=1;
IE=0x82;
}
uinttime,m,zi,s;
uintwarm=0;
ucharcodetable_LIE[]={
/*--文字:
--*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/****自****/
0x80,0x80,0x80,0xC0,0xC0,0x00,0xF8,0xFC,0x18,0x0C,0x18,0x0C,0xF8,0xFC,0x18,0x0C,
0x18,0x0C,0x18,0x0C,0xF8,0xFC,0x18,0x0C,0x18,0x0C,0x18,0x0C,0xF8,0xFC,0x18,0x0C,
/****动****/
0x00,0x30,0x00,0x30,0xFE,0x30,0x00,0x30,0x00,0xFF,0xFF,0xB3,0x18,0x33,0x18,0x33,
0x6C,0x33,0xCC,0x33,0xF6,0xE3,0xFF,0x63,0x00,0xC3,0x80,0x9F,0xC0,0x07,0x00,0x00,
/****化****/
0x00,0xC0,0x70,0xC0,0x30,0xCC,0x18,0xCE,0x18,0xDC,0x1C,0xF8,0x1E,0xF0,0x1B,0xE0,
0x98,0xC0,0xD8,0xC0,0x78,0xC0,0x18,0xC6,0x18,0xC6,0x18,0xC6,0x18,0xFE,0x00,0x00,
/****2****/
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x60,
0x00,0x60,0x00,0xC0,0x80,0x80,0xC0,0x00,0x30,0x30,0xF0,0xF0,0x00,0x00,0x00,0x00,
/****班****/
0x80,0x80,0xBF,0xFF,0x8C,0x98,0x8C,0x98,0x8C,0x98,0xEC,0x98,0xFF,0xFF,0xEC,0x98,
0xBC,0x98,0x8C,0x98,0x8C,0x98,0xFC,0x98,0xC7,0x18,0x60,0xFF,0x30,0x00,0x18,0x00,
/****范****/
0x20,0x20,0x20,0x20,0xFF,0xFE,0x20,0x60,0x02,0x00,0x8C,0xF8,0x89,0x08,0x86,0x08,
0x92,0x08,0x90,0x38,0x88,0x10,0x87,0x00,0x84,0x04,0x84,0x04,0x04,0xFC,0x04,0x00,
/****怀****/
0x08,0x00,0xC8,0xFE,0x08,0x20,0x08,0x20,0x1A,0x40,0x2A,0x60,0x29,0xD0,0x08,0xC8,
0x88,0x4C,0x48,0x46,0x28,0x44,0x08,0x40,0x08,0x40,0x08,0x40,0x08,0x40,0x00,0x00,
/****福****/
0x04,0x00,0xC8,0xFE,0x08,0x00,0xBF,0xFC,0xA0,0x04,0x90,0x04,0x88,0xFC,0x0C,0x00,
0xDA,0xFE,0x69,0x22,0x48,0x22,0xC8,0xFE,0x48,0x22,0x48,0x22,0xC8,0xFE,0x48,0x02,
/***1****/
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xE0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xE0,0xE0,0x00,0x00,0x00,0x00,
/***0****/
0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x60,0x60,0x30,0x30,0x30,0x30,0x30,0x30,
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x60,0x60,0xC0,0xC0,0x00,0x00,0x00,0x00,
/***6****/
0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0x60,0x60,0x30,0x00,0x30,0x00,0xF0,0xC0,
0x70,0x60,0x30,0x30,0x30,0x30,0x30,0x30,0x60,0x60,0xC0,0xC0,0x00,0x00,0x00,0x00,
/****7****/
0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0x30,0x60,0x30,0x60,0x00,0xC0,0x00,0xC0,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,
/***1****/
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xE0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xE0,0xE0,0x00,0x00,0x00,0x00,
/***0****/
0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x60,0x60,0x30,0x30,0x30,0x30,0x30,0x30,
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x60,0x60,0xC0,0xC0,0x00,0x00,0x00,0x00,
/***6****/
0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0x60,0x60,0x30,0x00,0x30,0x00,0xF0,0xC0,
0x70,0x60,0x30,0x30,0x30,0x30,0x30,0x30,0x60,0x60,0xC0,0xC0,0x00,0x00,0x00,0x00,
/***2****/
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x60,
0x00,0x60,0x00,0xC0,0x80,0x80,0xC0,0x00,0x30,0x30,0xF0,0xF0,0x00,0x00,0x00,0x00,
/****2****/
0x00,0x00,0x00,0x00,0xE0,0xE0,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x60,0x00,0x60,
0x00,0xC0,0x80,0x80,0xC0,0x00,0x30,0x30,0xF0,0xF0,0xe0,0xe0,0x00,0x00,0x00,0x00,
/****5****/
0x00,0x00,0x00,0x00,0xC0,0xF8,0x40,0x00,0x40,0x00,0x40,0xC0,0xC0,0x20,0x00,0x20,
0x00,0x10,0x00,0x10,0x00,0x10,0x20,0x20,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
};
ucharcodetable_HANG[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
voiddelay(uintn)
{
uinti,j;
for(i=0;ifor(j=0;j<20;j++);
}
main()
{
init_t0_1();
for(;;);
}
voidtime0()interrupt1
{
TH0=0X3C;
TL0=0XB0;
warm++;
for(time=0;time<40;time++)
{
m=zi*32;
HANG_L=0x00;
for(s=0;s<8;s++)
{
LIE_H=table_LIE[m];
LIE_L=table_LIE[m+1];
HANG_H=table_HANG[s];
m=m+2;
delay
(2);
}
m=16+zi*32;
HANG_H=0x00;
for(s=0;s<8;s++)
{
LIE_H=table_LIE[m];
LIE_L=table_LIE[m+1];
HANG_L=table_HANG[s];
m=m+2;
delay
(2);
}
}
zi++;
if(zi==19)
{
zi=0;
}
}
附:
汉字字模的提取
汉字字模的提取可借助专用的软件来完成。
这里介绍的是“字模提取V2.2”的基本使用方法,软件的最新版本可从下载。
首先运行“字模提取”,在右下角的“文字输入区”输入欲提取字模的汉字,输入完毕后请按Ctrl+Enter结束。
如我们要提取“达爱思”这几个汉字的字模(输入文字后请按Ctrl+Enter):
点击左侧的“取模方式”,以本实验指导书的实验程序清单为例,在这里我们选择“A51格式”,此时程序即把汉字“达爱思”的代码送入右下角的“点阵生成区”:
此时汉字的点阵代码已生成,将其复制到您的源程序中即可使用。
本实验指导书中的“LED16×16点阵显示实验”使用的是“字模提取V2.2”横向取模方式,具体设置请点击左侧的“参数设置”,再选择“其它选项”打开设置对话框。
2.步进电机控制
摘要
很多工业控制设备对位移和角度的控制精度要求较高,一般电机很难实现,而步进电机可精确实现所设定的角度和转数。
本设计主要是运用51单片机控制六线4相步进电机系统,由单片机产生驱动脉冲信号,控制步进电机以一定的转速向某一方向产生一定的转动角度。
同时能够利用单片机实现电机的正、反转及速度控制,并能在数码管上显示出相应的速度。
本文中给出了该系统设计的硬件电路,软件设计,人机交互等。
并对各个功能模块进行了详细的说明。
主要内容包括以下几个方面:
单片机控制步进电机的一般原理;
电机驱动及控制的实现;
控制系统整体设计以及模块划分说明;
原理图;
代码。
关键词:
单片机;步进电机;系统;驱动。
1设计目的及要求
1.1实训目的
1.1.1了解步进电机控制的基本原理。
1.1.2掌握步进电机转动编程方法
1.2实训说明
1.2.1实验原理流程图
1.2.2.原理说明
以反应式步进电机为例,其典型结构图如图1所示。
这是一个四相步进电机,当相控制绕组接通脉冲电流时,在磁拉力作用下使相的定、转子对齐,相邻的B相和D相的定、转子小齿错开。
若换成B相通电,则磁拉力使B相定、转子小齿对齐(转过),而与B相相邻的C相和A相的定、转子小齿又错开,即步进电机转过一个步距角。
若按A→B→C→D→A?
规律循环顺序通电,则步进电机按一定方向转动。
若改变通电顺序为A→D→C→B→A,则电机反向转动。
这种控制方式称为四相单四拍。
若按AB→BC→CD→DA→AB或A→AB→B→BC→C→CD→D→DA→A顺序通电则称为四相双拍或四相单、双八拍。
无论采用哪种控制方式,在一个通电循环内,步进电机的转角恒为一个齿距角。
所以,可以通过改步进电机通电循环次序来改变转动方向,可以通过改变通电频率来改变其角频率。
运用单片机的输出功能,通过编程实现输出四个信号分别给步进电机的四相A、B、C、D,并通过输出时信号的循环次序,来设定步进电机的转动方向及输出信号的频率以便设定步进电机的转动频率。
采用单片机产生A、B、C、D的四相信号,当采用单片机进行控制时,需要在单片机和步进电机中间设隔离电路以使强弱电分离。
由于步进电机的驱动电流相对较大,可增设放大电路来提供步进电机的工作电流。
系统电路由五部分组成,即单片机、隔离、放大、电源及步进电机。
2实验内容
2.1系统软件程序设计
2.21程序设计提示
步进电机作为自动控制领域中的主要控制元件之一,其应用特点主要有:
能直接接受数字量的控制信号不需要进行模/数电转换;可方便的实现机械位移;控制灵敏度高,控制方便可靠、精确定位等。
步进电机驱动原理是通过对它每相线圈中的电流的顺序切换来使电机作步进式旋转,驱动电路由单片机产生的脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速。
改变每相线圈脉冲信号的先后顺序还可以控制转向。
步进电机序列脉冲的波形图:
脉冲顺序示意图:
若按以上顺序电机正转,则箭头方向相反(即通电顺序改变时)电机反转。
2.2.2实训电路
2.2.3程序代码
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitp3_5=P3^5;
ucharcount;
ucharmask;
ucharspeed;
uchara;
ucharstep;
intsum;
inty;
#defineled_zxXBYTE[0xffdc]
#defineled_zwXBYTE[0xffdd]
ucharcodetable1[]={
0xc0,0xf9,0xa4,
0xb0,0x99,0x92,
0x82,0xf8,0x80,
0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
ucharcodezz[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x09};
ucharcodefz[]={0x10,0x09,0x80,0xc0,0x40,0x60,0x20,0x30};
voiddelay(uintdcnt)
{y=dcnt;
for(;y>0;y--)
for(;y>0;y--)
;
}
voidkey()
{count=P3;
mask=count&0x0f;
switch(mask)
{
case1:
{
delay(50);
sum=1;
return;
}
case2:
{
delay(100);
sum=2;
return;
}
case3:
{
delay(150);
sum=3;
return;
}
case4:
{
delay(200);
sum=4;
return;
}
case5:
{
delay(250);
sum=5;
return;
}
case6:
{
delay(300);
sum=6;
return;
}
case7:
{
delay(350);
sum=7;
return;
}
case8:
{
delay(500);
sum=8;
return;
}
case9:
{
delay(550);
sum=9;
return;
}
case0x0a:
{
delay(600);
sum=10;
return;
}
case0x0b:
{
delay(650);
sum=11;
return;
}
case0x0c:
{
delay(750);
sum=12;
return;
}
case0x0d:
{
delay(800);
sum=13;