AD转换和步进电机
主要功能
1.使用ad转换模块,调节滑动变阻器输出实际电压值显示在数码管上。在步进电机正转时,根据输出的电压值调节步进电机转速。
2.使用按键S1 S2 S3 S4控制步进电机,其中S1控制步进电机正反转;S2长按步进电机暂停;S3按下步进电机反转时高速状态;S4按下步进电机反转时为低速状态。(反转时默认高速状态)
main.c
#include"reg52.h"
#include"XPT2046.h"
#include "intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit beep=P1^5;
sbit S1=P3^1; //正反转
sbit S2=P3^0; //暂停
sbit S3=P3^2; //加速
sbit S4=P3^3; //减速
u8 state=1; //转向1正0反
u16 time=0; //定义延时变量
u16 time1=80; //定义延时变量
unsigned char code tableZ[8]={
0x1,0x3,0x2,0x6,0x4,0xc,0x8,0x9}; //四相八拍正
unsigned char code tableF[8]={
0x9,0x8,0xc,0x4,0x6,0x2,0x3,0x1};
u8 SMG_dat[8]= {
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
u8 code SMG_duanma[10]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*******延时函数********/
void delay(u16 i)
{
while(i--);
}
/*******处理电压数据函数*************/
void display_V()
{
int temp=0; //ad值
int ad_value;
unsigned int voltage_display = 0;
float index = 1.222;
float voltage = 0;
static u8 i;
if(i==50) //隔一段时间读取
{
i=0;
EA=0; //关中断
ad_value = Read_AD_Data(