//实例76:独立式键盘控制步进电机实验
#include<reg51.h> //包含51单片机寄存器定义的头文件
sbit S1=P1^4; //将S1位定义为P1.4引脚
sbit S2=P1^5; //将S2位定义为P1.5引脚
sbit S3=P1^6; //将S3位定义为P1.6引脚
unsigned char keyval; //储存按键值
unsigned char ID; //储存功能标号
/*************************************************
函数功能:软件消抖延时(约50ms)
**************************************************/
void delay(void)
{
unsigned char i,j;
for(i=0;i<150;i++)
for(j=0;j<100;j++)
;
}
/************************************************
函数功能:步进电机转动延时,延时越长,转速越慢
*************************************************/
void motor_delay(void)
{
unsigned int i;
for(i=0;i<2000;i++)
;
}
/************************************************
函数功能:步进电机正转
*************************************************/
void forward( )
{
P0=0xfc; //P0口低四位脉冲1100
motor_delay();
P0=0xf6; //P0口低四位脉冲0110
motor_delay();
P0=0xf3; //P0口低四位脉冲0011
motor_delay();
P0=0xf9; //P0口低四位脉冲1001
motor_delay();
}
/************************************************
函数功能:步进电机反转
*************************************************/
void backward()
{
P0=0xfc; //P0口低四位脉冲1100
motor_delay();
P0=0xf9; //P0口低四位脉冲1001
motor_delay();
P0=0xf3; //P0口低四位脉冲0011
motor_delay();
P0=0xf6; //P0口低四位脉冲0110
motor_delay();
}
/************************************************
函数功能:步进电机停转
*************************************************/
void stop(void)
{
P0=0xff ; //停止输出脉冲
}
/*************************************************
函数功能:主函数
**************************************************/
void main(void)
{
TMOD=0x01; //使用定时器T0的模式1
EA=1; //开总中断
ET0=1; //定时器T0中断允许
TR0=1; //启动定时器T0
TH0=(65536-500)/256; //定时器T0赋初值,每计数200次(217微秒)发送一次中断请求
TL0=(65536-500)%256; //定时器T0赋初值
keyval=0; //按键值初始化为0,什么也不做
ID=0;
while(1)
{
switch(keyval) //根据按键值keyval选择待执行的功能
{
case 1:forward(); //按键S1按下,正转
break;
case 2:backward(); //按键S2按下 ,反转
break;
case 3:stop(); //按键S3按下,停转
break;
}
}
}
/*************************************************
函数功能:定时器T0的中断服务子程序
**************************************************/
void Time0_serve(void) interrupt 1 using 1
{
TR0=0; //关闭定时器T0
if((P1&0xf0)!=0xf0) //第一次检测到有键按下
{
delay(); //延时一段时间再去检测
if((P1&0xf0)!=0xf0) //确实有键按下
{
if(S1==0) //按键S1被按下
keyval=1;
if(S2==0) //按键S2被按下
keyval=2;
if(S3==0) //按键S3被按下
keyval=3;
}
}
TH0=(65536-200)/256; //定时器T0的高8位赋初值
TL0=(65536-200)%256; //定时器T0的低8位赋初值
TR0=1; //启动定时器T0
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
资源推荐
资源详情
资源评论
收起资源包目录
基于C语言实现独立式键盘控制步进电机实验(含源代码+使用说明).zip (4个子文件)
342-独立式键盘控制步进电机实验
ex76.hex 671B
ex76.DSN 82KB
ex76.c 3KB
Last Loaded ex76.DBK 82KB
共 4 条
- 1
资源评论
心梓知识
- 粉丝: 6519
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功