普中科技开发板AD转换和步进电机
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(0x94); //AIN0EA=1; //开中断}voltage = index * ad_value;temp = (int)voltage;time = temp/10;i++;SMG_dat[7]=0x3e;SMG_dat[6]=0x00;SMG_dat[5]=0x00;SMG_dat[4]=0x00;// SMG_dat[3]=0x00;
// SMG_dat[2]=SMG_duanma[temp/1000]|0x80;
// SMG_dat[1]=SMG_duanma[temp%1000/100];
// SMG_dat[0]=SMG_duanma[temp%100/10];SMG_dat[3]=SMG_duanma[temp/1000]|0x80;SMG_dat[2]=SMG_duanma[temp%1000/100];SMG_dat[1]=SMG_duanma[temp%100/10];SMG_dat[0]=SMG_duanma[temp%10];
}/*******电机工作函数********/void motowork()
{ unsigned char i;P1 = 0x00;if(state==1){for(i=0; i<8; i++) { P1 = tableZ[i]&0x1f; delay(time);}}else {for(i=0; i<8; i++) {P1 = tableF[i]&0x1f; delay(time1);} }}/********按键功能函数*******/void keyS1(){if(state==1){state=0;}else if(state==0){state=1;}}void keyS2(){if(S2==0){P1 = 0x00;}}
void keyS3()
{if(time1==580) //{ time1=80;}
}
void keyS4()
{if(time1==80){ time1=580;}
}/*************按键扫描函数************/
void scankey1()
{if(S1==0) //检测按键K1是否按下{ delay(1000); //消除抖动 一般大约10msif(S1==0) //再次判断按键是否按下{keyS1(); //}while(!S1); //检测按键是否松开} if(S2==0) { delay(1000); if(S2==0) {keyS2(); }while(!S2); } if(S3==0) { delay(1000); if(S3==0) {keyS3(); }while(!S3); } if(S4==0) { delay(1000); if(S4==0) {keyS4(); }while(!S4); } }
/********定时器*********/
void Timer0Init(void) //1ms
{TMOD=0X01; //定时器0 方式1TH0=(65535-1000)/256;TL0=(65535-1000)%256; //装载初值ET0=1; //开启定时器中断使能EA=1; //开启总中断TR0=1;
}void ServiceTimer0() interrupt 1
{ static unsigned char i = 0;TH0=(65535-1000)/256;TL0=(65535-1000)%256; //重新P0 = 0x00; //消隐switch(i) //根据i的值进行位选,依次点亮八个数码管{case 0 :LSA = 0; LSB = 0; LSC = 0;i++; P0 = SMG_dat[0];break;case 1 :LSA = 1; LSB = 0; LSC = 0;i++; P0 = SMG_dat[1];break;case 2 :LSA = 0; LSB = 1; LSC = 0;i++; P0 = SMG_dat[2];break;case 3 :LSA = 1; LSB = 1; LSC = 0;i++; P0 = SMG_dat[3];break;case 4 :LSA = 0; LSB = 0; LSC = 1;i++; P0 = SMG_dat[4];break;case 5 :LSA = 1; LSB = 0; LSC = 1;i++; P0 = SMG_dat[5];break;case 6 :LSA = 0; LSB = 1; LSC = 1;i++; P0 = SMG_dat[6];break;case 7 :LSA = 1; LSB = 1; LSC = 1;i=0; P0 = SMG_dat[7];break;default:break;}}
/********主函数*********/
void main()
{beep = 0x00;Timer0Init();while(1){scankey1(); motowork();display_V(); //处理电压值}}
2.XPT2046.c
#include"XPT2046.h"/****************************************************************************
*函数名:SPI_Write
*输 入:dat:写入数据
*输 出:无
*功 能:使用SPI写入数据
****************************************************************************/void SPI_Write(uchar dat)
{uchar i;CLK = 0;for(i=0; i<8; i++){DIN = dat >> 7; //放置最高位dat <<= 1;CLK = 0; //上升沿放置数据CLK = 1;}
}
/****************************************************************************
*函数名:SPI_Read
*输 入:无
*输 出:dat:读取 到的数据
*功 能:使用SPI读取数据
****************************************************************************/uint SPI_Read(void)
{uint i, dat=0;CLK = 0;for(i=0; i<12; i++) //接收12位数据{dat <<= 1;CLK = 1;CLK = 0;dat |= DOUT;}return dat;
}/****************************************************************************
*函数名:Read_AD_Data
*输 入:cmd:读取的X或者Y
*输 出:endValue:最终信号处理后返回的值
*功 能:读取触摸数据
****************************************************************************/
uint Read_AD_Data(uchar cmd)
{uchar i;uint AD_Value;CLK = 0;CS = 0;SPI_Write(cmd);for(i=6; i>0; i--); //延时等待转换结果CLK = 1; //发送一个时钟周期,清除BUSY_nop_();_nop_();CLK = 0;_nop_();_nop_();AD_Value=SPI_Read();CS = 1;return AD_Value;
}
3.XPT2046.h
#ifndef __XPT2046_H_
#define __XPT2046_H_//---包含头文件---//
#include<reg52.h>
#include<intrins.h>//---重定义关键词---//
#ifndef uchar
#define uchar unsigned char
#endif#ifndef uint
#define uint unsigned int
#endif#ifndef ulong
#define ulong unsigned long
#endif//---定义使用的IO口---//
sbit DOUT = P3^7; //输出
sbit CLK = P3^6; //时钟
sbit DIN = P3^4; //输入
sbit CS = P3^5; //片选uint Read_AD_Data(uchar cmd);
uint SPI_Read(void);
void SPI_Write(uchar dat);#endif
问题总结
在使用软件延时方式控制步进电机时,数码管如果用软件延时那么数码管显示值会有轻微闪烁。
解决方法:数码管的显示延时利用定时器中断,这样可以避免步进电机延时对数码管显示的影响
普中科技开发板AD转换和步进电机相关推荐
- 普中科技开发板使用说明书_普中科技单片机实验板使用操作说明.pdf
普中科技单片机实验板使用操作说明 单片机学习的良师益友 好帮手单片机学习套件 -PRECHIN 用手册 普中科技有限公司 P R E C H I N - V 2 . 0 开发板 Version 1.2 ...
- 普中科技开发板使用说明书_百度大脑加持,米尔科技FZ3深度学习计算卡评测
如果你要问我现在电子产业什么最热,那无疑是AI,而基于大数据训练的深度学习技术可以说是目前AI应用的最广,最成功的产品形态了,覆盖我们生活的方方面面,诸如购物.看病.新闻编辑等,在这高深技术的背后少不 ...
- 【51单片机】:关于51单片机仿真器(普中科技开发板STC89C51)的疑惑(做个记录)
学习目标: 由于一些特殊原因,重学51单片机,真是无力吐槽,学把,认真学. 仿真器,最主要的作用是仿真调试,每次检查代码找不到任何问题比如说debug.先全速运行几秒后点击停止,看程序 ...
- python控制51单片机的红绿灯_基于51单片机的红绿灯实现(使用普中科技开发板)...
C语言基础比较薄弱,红绿灯的倒计时和切换上,用了三个if()嵌套,总感觉应该有更好的方案,如果你恰巧知道,请教教我,在此谢过.以下是程序部分: //红绿灯设计:利用定时器实现LED灯亮灭,数码管倒计时 ...
- 8路抢答器(普中科技开发板)
#include <reg51.h> //#include <keyscan.h> //#include <display.h>#define uchar unsi ...
- 基于普中科技开发板制作的数码管显示可调时钟
目录 前言: 模块化代码: 定时器扫描按键代码: 定时器扫描数码管: 主函数main代码: 前言: 功能说明:通过按键1控制模式选择:模式0------时钟显示模式,模式1:------时钟设置模式 ...
- 【74HC595】51单片机(普中A2开发板)LED点阵屏点亮以及74HC595芯片的使用笔记
使用74HC595芯片驱动LED点阵屏的使用笔记 1.控制显示LED点阵屏的思路 2.74HC595芯片的学习 2.1.74HC595芯片是什么? 2.2.74HC595芯片各引脚解释以及分析 2.3 ...
- 普中PZ6808L-F4开发板TFTLCD显示屏使用笔记
0x00 开发板介绍 这学期学的STM32开发,实验室里的开发板型号为PZ6808L-F4 整个板子是这样的 这块板子是F103和F407双核的,但我学的一直就是F407,所以本文所有问题只针对F40 ...
- 普中单片机开发板HC6800-EM3 v2.2 3.0无法烧录下载程序解决
普中科技单片机在淘宝上买了很久了,一直没用,现在要做设计,就拿来看看.这一看不要紧,刚开始就坑死人了写不进程序.研究了一晚上.其实很简单就是短路帽没接对. l 开发板:普中Prechin HC6800 ...
最新文章
- Unity脚本生成插件:Script Create Dialog
- online_judge_1046
- no scp yes 不提示_linux脚本实现scp命令自动输入密码和yes/no等确认信息
- Android 代码优化工具FindBugs
- R+python︱XGBoost极端梯度上升以及forecastxgb(预测)+xgboost(回归)双案例解读
- 吴恩达机器学习作业代码(python)
- 沉筛得招牢蛹得客频冉酶厍笨频涸
- 51NOD - 1381 1381 硬币游戏【思维+数学期望】
- 推荐一款2.5v 基准 电压源 芯片
- bootstrap导航栏.nav和.navbar区别
- 开源中国众包第三波阿里云悬赏项目,总金额 6 万
- 轻松解决mscorsvw.exe进程CPU占用高的问题
- php curl 客户端,php通过curl设置客户端cookie
- 彻底解决win10时间同步失败
- Windows下字符串替换操作java.lang.IllegalArgumentException: character to be escaped is missing
- JAVA 中配置IKAnalyzer扩展词库和停止词库
- Linux中suid提权
- C++ std::mutex 用法详解
- java基础巩固-宇宙第一AiYWM:为了维持生计,Spring全家桶_Part1-1(Spring左膀右臂中的左膀IOC第一篇~全是概念,Spring为啥辣么6)~整起
- Steam教育在新时代中综合学习论
热门文章
- 《Exceptional C++ Style》开放样章译稿
- ieee计算机论文格式,[计算机]小论文撰写格式.doc
- mac和window电脑 解决github打不开问题
- 2017年第27届中国国际钓鱼用品贸易展览会会刊(参展商名录)
- Error: EPERM: operation not permitted(权限问题 errro permit)
- 黑苹果2k显示器开启hidpi_黑苹果MAC系统1080P显示模糊问题处理
- 共赴数智金融未来,2023数智金融峰会即将召开
- 数据推荐 | 手势识别训练数据集
- IMS应用领域|IMS连接器系统使自动驾驶成为可能
- iphonex桌面的计算机不见了,iPhone 桌面上找不到应用图标了怎么办?