单片机原理与接口技术课程设计
完成后点击File—>New新建一个程序编辑文件,然后保存即可在其中编辑所需要的程序了,然后点击软件上方的调试按钮没有错误。
进行纠错调试直至
4.2软件设计要求
本设计要求实现用STC89C52单片机实现对步进电机的控制,并能实现步进电机的旋转,及四档不同的速度调节,同时能及时的用液晶显示屏显示步进电机的当前状态
4.3系统软件设计流程
4.3.1软件总体设计框图
图4.1主程序流程图
15
单片机原理与接口技术课程设计
4.4主程序
本设计为使程序可读性好将分模块进行说明。
4.4.1头文件
#ifndef _KYE_H_ #define _KYE_H_
/*常用数据类型简化定义****/ typedef unsigned char uint8; typedef unsigned int uint16; /*****矩阵键盘位定义****/ sbit KeyIn1 = P1^0; sbit KeyIn2 = P1^1; sbit KeyIn3 = P1^2; sbit KeyIn4 = P1^3; sbit KeyOut1 = P1^4; sbit KeyOut2 = P1^5; sbit KeyOut3 = P1^6; sbit KeyOut4 = P1^7; /****液晶控制位定义*****/ sbit RS = P2^5 ; sbit RW = P2^6 ; sbit EN = P2^7 ; sbit BUSY = P0^7;
/****电机转速档位定义***/ #define One 50 #define Two 30 #define Three 16 #define Four 8
/****子程序声明*********/
16
单片机原理与接口技术课程设计
void Dis(void); void wait(void); void w_cmd(uint8 cmd); void w_dat(uint8 dat);
void w_string(uint8 addr_start, uint8 *p); void Init_LCD1602(void); void delay(uint8 t); void keyscan(void); void MoFor(void); #endif
4.4.2主程序
#include
uint8 Gra = One;//档位变量 ,默认一档
StartEnd = 0;//启动停止标志位, 默认停止
uint8 code FFW[]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};//旋转码表
void main(void) { while(1) {
keyscan();//键盘扫描 Dis();//液晶显示初始化 if(StartEnd ==1) { MoFor(); }
17
单片机原理与接口技术课程设计
else
{ P3 = 0; } } }
4.4.3液晶模块
/*** 等待繁忙标志*/ void wait(void) {
P0 = 0xFF; Do { RS = 0; RW = 1; EN = 0;
EN = 1;}while (BUSY == 1); EN = 0; }
/*** 写数据*/ void w_dat(uint8 dat) { wait(); EN = 0; P0 = dat; RS = 1; RW = 0; EN = 1; EN = 0;}
18
单片机原理与接口技术课程设计
/*** 写命令*/ void w_cmd(uint8 cmd) { wait(); EN = 0; P0 = cmd; RS = 0; RW = 0; EN = 1; EN = 0; }
/*** 发送字符串到LCD*/
void w_string(uint8 addr_start, uint8 *p) {
w_cmd(addr_start); while (*p != '\\0') {
w_dat(*p++); } }
/*** 初始化1602*/ void Init_LCD1602(void) {
w_cmd(0x38); // 16*2显示,5*7点阵,8位数据接口w_cmd(0x0C); // 显示器开,不显示光标 w_cmd(0x06); // 写一个字符后,地址指针加1 w_cmd(0x01); // 现实清零,数据指针清零 }
/***液晶显示子程序*/ void Dis(void)
19