云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 基于AT89C51单片机的电机控制综合课程设计 - 图文

基于AT89C51单片机的电机控制综合课程设计 - 图文

  • 62 次阅读
  • 3 次下载
  • 2025/6/22 15:27:43

3.5 按键电路

图3.5 按键电路 按键电路如上图3.5所示。当任意一个按键KEY被按下时,P2.0~P2.2引脚会对应的的产生一个低电平。

4 软件设计

4.1程序要求

我们使用C语言对AT89C51进开始 行控制程序的编写。程序中使用到的资源有两个定时器资源,T0工作在16位外部计数模式,用于速度的LCD初始化 反馈和计算等数据处理。T1工作在8位定时器自动重载模式,引脚P3.4接计数信息输入端口。在T1的定显示预处理 时溢出中断程序中进行速度的产生及对电机的控制操作。系统使用到5

开启中断 个普通I/O口资源。P1.6和P1.7初值设定 为控制电机转动的两路控制信号。P2.0作为加速按键信息输入端口,P2.1作为减速按键信息输入端口,P按键处理 2.2作为方向控制键信息输入端口。

程序运行时,先进行LCD控制程序的初始化并对显示进行预处速度计算 理。然后读预设速度初值,由T1中断服务程序产生PWM速度控制信号,T0反馈速度信息并进行速度的计算数据处理 处理。KEY1和KEY2可对速度进行加减操作。KEY3可对电机进行正反转的控制操作。 返回 程序的编写要遵循性保证系统稳定性的前提下消耗尽量少消耗资图4.1 程序流程图 源的原则,并要考虑实际的可操作

性和满足系统在各种工作环境下能稳定正常运行的要求。

中断服务 电机控制 11

4.2 程序流程图 4.3 程序清单

4.3.1 LCD驱动程序

/*

LCD.C

128×64 LCD驱动程序头文件 */

#ifndef LCD_H_ #define LCD_H_

#include

sbit LCD_BL=P1^4; //定义背光控制信号 void LcdLightOn(); //点亮背光灯 void LcdLightOff(); //熄灭背光灯 void LcdClear(); //清屏 void LcdInit(); //初始化

void LcdPutChar(unsigned char c); //显示ASCⅡ码 void LcdPuts(unsigned char*s); //显示字符串

#endif //LCD_H_ /*

LCD.C

128×64 LCD驱动程序 */

#include #include

unsigned char LcdCursor; //定义屏幕光标(取值0~63,光标本身不可见)int i,j;

void LcdLightOn() //功能:点亮背光灯 {

LCD_BL = 1; }

void LcdLightOff() //功能:熄灭背光灯 {

LCD_BL = 0; }

12

/*

函数:LcdGetBF() 返回:

BF=1,表示忙,不可进行任何操作 BF=0,表示不忙,可以进行正常操作 */

bit LcdGetBF()//功能:读出状态位BF {

unsigned char dat;

dat = XBYTE[0xD002]; //XBYTE的定义见 return (bit)(dat & 0x80); }

void LcdWriteCmd(unsigned char cmd) //功能:向LCD发送命令 {

while ( LcdGetBF() ); XBYTE[0xD000] = cmd; }

void LcdWriteDat(unsigned char dat) // 功能:向LCD写入数据 {

while ( LcdGetBF() ); XBYTE[0xD001] = dat; }

unsigned char LcdReadDat() //功能:从LCD读出数据 {

volatile unsigned char dat; while ( LcdGetBF() ); dat = XBYTE[0xD003];

dat = XBYTE[0xD003]; //需要连续执行两次才能够读出真正的数据 return dat; } /*

函数:LcdSetAC()

功能:设置DDRAM(显示数据RAM)的AC(地址计数器)值 */

13

void LcdSetAC(unsigned char ac) {

ac &= 0x3F; ac |= 0x80;

LcdWriteCmd(ac); }

void LcdClear() //功能:LCD清屏,并使光标回到0 {

LcdWriteCmd(0x01); //清屏命令 LcdCursor = 0; }

void LcdDelay(unsigned char t) //功能:延时(t*100)个机器周期 {

unsigned char n; do {

n = 49;

while ( --n != 0 ); } while ( --t != 0 ); }

void LcdInit() //功能:LCD初始化 {

LcdWriteCmd(0x30); //设置基本指令集 LcdDelay(3);

LcdWriteCmd(0x30); //设置基本指令集(需要再执行一次) LcdDelay(1);

LcdWriteCmd(0x0C); //开启显示 LcdDelay(3);

LcdClear(); //清屏 LcdDelay(250);

LcdWriteCmd(0x06); //设置进入点 LcdDelay(10); }

void LcdCheckAC() //功能:根据光标位置调整AC {

switch ( LcdCursor )

14

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

3.5 按键电路 图3.5 按键电路 按键电路如上图3.5所示。当任意一个按键KEY被按下时,P2.0~P2.2引脚会对应的的产生一个低电平。 4 软件设计 4.1程序要求 我们使用C语言对AT89C51进开始 行控制程序的编写。程序中使用到的资源有两个定时器资源,T0工作在16位外部计数模式,用于速度的LCD初始化 反馈和计算等数据处理。T1工作在8位定时器自动重载模式,引脚P3.4接计数信息输入端口。在T1的定显示预处理 时溢出中断程序中进行速度的产生及对电机的控制操作。系统使用到5开启中断 个普通I/O口资源。P1.6和P1.7初值设定 为控制电机转动的两路控制信号。P2.0作为加速按键信息输入端口,P2.1作为减速按键信息输入端口,P按键处理 2.2作为方向控制键信息

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com