绕组通电 B相、C相绕组通电 C相、D相绕组通电 D相、A相绕组通电 3、程序:
#include
while(1) //死循环
{ P1=0x03; Delayms(1000); //A相、B相绕组通电 P1=0x06; Delayms(1000); //B相、C相绕组通电 P1=0x0c; Delayms(1000); //C相、D相绕组通电 P1=0x09; Delayms(1000); //D相、A相绕组通电 } }
void Delayms (uint x) //延时函数 { uint n; for( ;x > 0; x--) { for(n=0;n<123;n++) { ; } } }
10
06H 0 0 0 0 0 1 1 0 0CH 0 0 0 0 1 1 0 0 09H 0 0 0 0 1 0 0 1 4、实验连线
将程序下载到单片机中,可以看到步进电机转动。实现现象如图2-1所示:
步进电机实验
11
实验三 独立按键
一、实验目的
1.熟悉C51包含的头文件。 2.掌握独立按键的工作原理。 3.学习按键去抖动问题。
二、实验要求
通过开发板上的8个独立按键控制8个LED灯,实现按下按键对应的LED灯亮,其他灯灭的效果。
三、实验内容
3.1独立式按键问题
1、独立式按键:其特点是每个按键单独占用一根I/O口线。每个按键工作不会 影响其他I/O口线的状态,多用于所需按键不多的场合。
2、按键去抖问题:
按键的抖动时间约为5~10ms,抖动会引起CPU对一次键操作进行多次处理,从而错误的键响应。
软件去抖动:检测到按键按下/释放后,延时10ms后再确认该键是否确实按下/释放,消除抖动影响。 3、实验程序设计
12
#include
#define GPIO_KEY P1 //独立键盘用P1口 #define GPIO_LED P0 //led使用P0口 //--声明全局函数--//
void Delay10ms(unsigned int c); //延时10ms unsigned char Key_Scan(); void main(void) {
unsigned char ledValue, keyNum; ledValue = 0x01; while (1) {
keyNum = Key_Scan(); //扫描键盘 switch (keyNum) {
case(0xFE) : //返回按键K1的数据
ledValue = 0x01; break;
case(0xFD) : //返回按键K2的数据
ledValue = 0x02; break;
case(0xFB) : //返回按键K3的数据
ledValue = 0x04; break;
case(0xF7) : //返回按键K4的数据
ledValue = 0x08;
13
}
}
}
break;
case(0xEF) : //返回按键K5的数据
ledValue = 0x10; break;
case(0xDF) : //返回按键K6的数据
ledValue = 0x20; break;
case(0xBF) : //返回按键K7的数据
ledValue = 0x40; break;
case(0x7F) : //返回按键K8的数据
ledValue = 0x80; break;
default:
break;
GPIO_LED = ledValue;//点亮LED灯
unsigned char Key_Scan() {
unsigned char keyValue = 0 , i; //保存键值 //--检测按键1--// if (GPIO_KEY != 0xFF) {
Delay10ms(1); //消除抖动
if (GPIO_KEY != 0xFF) //再次检测按键是否按下 {
14
//检测按键K1是否按下