-
2011 - 2012
学年
第
1
学期
学生课程实习报告
环节名称
所属课程
学生姓名
学号
所在班级
成绩
评语
指导教师签名
计算机控制技术课程实习
计算机控制技术
冼燎刚
2
电气
1081
一、设计题目:
控制步进电机
LCD
显示
二、
设计要求:
设计一个单片机三相步进电机控制系统,要求系统具有以下功能。
(
1)用
K0-K2
作为通电方式选择键,
K0
为单三拍,
K1为双三拍,
K2
为三相六拍。
(
2
)
K3-K4
作为启动和方向控制。
(
3
)正转时红色指示灯亮,反转时黄色指示灯亮,不转时绿灯亮。
(
4
)可通过键盘设定步进电机步数给定值。
(
5
)用三位
LED
数码管显示剩余工作步数
三、系统总体框图与原理说明
系统的整体框图
1
四、硬件电路图
2
五、程序流程图
开始
键盘读取步数
液晶显示数字
键盘读取工作方式
液晶显示数字
键盘读取正反转
液晶显示数字
键盘读取是否按下
ENTER
3
相应的灯发光
步进电机转动一拍
总步数减一并显示
N
总步数是
否为
0
Y
显示
OVER
结束
六、仿真说明
输入一个三位数
按下
DIRECTION
选择方向
相应的灯会亮
4
选择不同的工作方式
按下
START
按钮,倒数开始,电机按剩余步数转动。
倒数完毕,显示
OVER
,绿灯亮。
5
七、心得体会
通过自己几天的辛勤努力并查阅诸 多资料,终于完成了本次课程设计。从系统框
图到程序,自己逐一完成。程序虽然很长,但通过分成不同 的
H
文件,有序地把它
们分割成几部分。不仅对于自己,还对查看程序的人有不少的帮 助。设计的思路按
照对于仿真的步骤编程。
从按下第一个按键开始,
就已经进入到设计 者的程序当中。
程序有较强的逻辑性,这些都依赖于平时的练习及老师的教导。
附录:程序清单
//************************** *
程序的总体文件
*************************//
#include
#include
#include
#include
void initial();
un i,motor_step=0,time_control=0;
uc keyscan();
uc loop1[2][4]={{0x01,0x02,0x04,0x08},{0x08,0x 04,0x02,0x01}};
uc
uc
loop3[2][ 8]={{0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x0A},{0x0 A,0x08,0x0C,0x04
,0x06,0x02,0x03,0x01}};
//A AB B BC C CD D DA
void initial_show();
void clr();
void wirte_com(uc com);
void wirte_data(uc date);
void delay(unsigned int z);
void input_keycode()
void output_key();
void count();
void swith();
void test();
//
主函数
6
//A B C D
loop2[2][ 4]={{0x03,0x06,0x0C,0x09},{0x09,0x0C,0x06,0x03}};
//AB BC CD DA
//
函数申明
void main()
{
initial();
clr();
while(1)
{
//
初始化
initial_show();
input_keycode();
output_key();
}
/*************
中断服务函数
***********/
void T0_time() interrupt 1//
{ TL1=0xB0;
TH1=0x3C;
time_control++;
if(a>0)
{
}
TMOD=0x01;
TL1=0xB0;
TH1=0x3C;
ET0=1;
TR0=1;
while(1);
//
fangshi yi
//yun xu TO zhongduan
EA=1;
if(time_control==2)
{
swith();
}
}
else
{ red=1;green=0;yellow=1;
wirte_com(0xc0+10);
}
7
for(i=0;i<4;i++)
{
// over
wirte_data(table6[i]);
}
}
void count()
{
}
void swith()
{
switch(motor1)
t=a/100;
f=a%100/10;
g=a%10;
wirte_com(0xC0+10);
//rewrite step
wirte_data(table[t]);
wirte_data(table[f]);
wirte_data(table[g]);
{
}
motor_step++;
break;
case 0:
{
if(motor_step<4)
{
P3=loop1[fanzhuan][motor_step]
}
else
{
motor_step=0;
P3=loop1[fanzhuan][motor_step]
}
case 1:
{
if(motor_step<4)
{
P3=loop2[fanzhuan][motor_step]
8
-
-
-
-
-
-
-
-
本文更新与2021-01-24 14:05,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/561034.html