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

当前位置:首页 > 蓝侨杯单片机编程笔记-胡昶威

蓝侨杯单片机编程笔记-胡昶威

  • 62 次阅读
  • 3 次下载
  • 2025/6/6 19:35:17

while(1){

/** 200毫秒更新一次数据 */ if(s_flag) {

s_flag = 0;

/** 关闭定时器0中断:计算超声波发送到返回的时间 send_wave(); //发送方波信号 TR1 = 1; //启动计时 while((RX == 1) && (TF1 == 0)); //等待收到脉冲 TR1 = 0; //关闭计时 //发生溢出 if(TF1 == 1) { TF1 = 0; distance = 9999; //无返回 } else { /** 计算时间 */ t = TH1; t <<= 8; t |= TL1; distance = (unsigned int)(t*0.017); //计算距离 } TH1 = 0; TL1 = 0; } /** 数据处理 */ dspbuf[5] = distance/100; dspbuf[6] = distance0/10; dspbuf[7] = distance; } }

//定时器0中断服务函数

void isr_timer_0(void) interrupt 1 //默认中断优先级 1 {

TH0 = (65536-2000)/256;

TL0 = (65536-2000)%6; //定时器重载

display(); //2ms执行一次

if(++intr == 200){ s_flag = 1; intr = 0; } }

//显示函数

void display(void){

XBYTE[0xE000] = 0xff; //去除鬼影

XBYTE[0xC000] = (1<

XBYTE[0xE000] = tab[dspbuf[dspcom]];

if(++dspcom == 8){ dspcom = 0; } }

//TX引脚发送40KHz方波信号驱动超声波发送探头 void send_wave(void) {

unsigned char i = 8; //发送8个脉冲 do { TX = 1; somenop; TX = 0; somenop; }

while(i--);

}

必要时还可以加个看门狗: WDT_CONTR=0x34;

十、 步进电机与直流电机的使用(不一定考,预防万一而已)

参考代码如下:

#include

sbit A1=P1^4; //定义步进电机连接端口 sbit B1=P1^3; sbit C1=P1^2; sbit D1=P1^1; void qudong1();

#define Dy_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电 #define Dy_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电 #define Dy_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电 #define Dy_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电 //采用1相励磁

#define Dy_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电 unsigned char Speed,Speed1;

/*------------------------------------------------

uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是

0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS

------------------------------------------------*/ void DelayUs2x(unsigned char t) {

while(--t); }

/*------------------------------------------------

mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255

------------------------------------------------*/ void DelayMs(unsigned char t) {

while(t--) {

//大致延时1mS DelayUs2x(245); DelayUs2x(245); } }

/*------------------------------------------------ 主函数

------------------------------------------------*/ main() {

Dy_OFF; for(;;) {

qudong1(); } }

void qudong1() {

unsigned int i=470;//旋转一周时间 Speed=5;

while(i--) //正向

{

Dy_A1

//遇到Coil_A1 用{A1=1;B1=0;C1=0;D1=0;}代替 DelayMs(Speed); //改变这个参数可以调整电机转速 ,

//数字越小,转速越大,力矩越小 Dy_B1 //顺序从A1--D1相通电如果为正转,那么顺序从D1--A1相通电则为反转

DelayMs(Speed); Dy_C1

DelayMs(Speed); Dy_D1

DelayMs(Speed); }

Dy_OFF i=512;

while(i--)//反向 {

Dy_D1 //遇到Coil_A1 用{A1=1;B1=0;C1=0;D1=0;}代替

DelayMs(Speed); //改变这个参数可以调整电机转速 ,

//数字越小,转速越大,力矩越小 Dy_C1

DelayMs(Speed); Dy_B1

DelayMs(Speed); Dy_A1

DelayMs(Speed); } }

直流电机:

#include

#define uint unsigned int void drive(); void delay(uint);

sbit dj1=P1^0; //电机,1引脚 uint set; //set为电机转角标志位

unsigned char angle,angle1; //angle为电机PWM变化打角 void Time0_Init() //中断初始化 {

TMOD=0X01; IE=0X82;

搜索更多关于: 蓝侨杯单片机编程笔记-胡昶威 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

while(1){ /** 200毫秒更新一次数据 */ if(s_flag) { s_flag = 0; /** 关闭定时器0中断:计算超声波发送到返回的时间 send_wave(); //发送方波信号 TR1 = 1; //启动计时 while((RX == 1) && (TF1 == 0)); //等待收到脉冲 TR1 = 0; //关闭计时 //发生溢出 if(TF1 == 1) { TF1 = 0; distance = 9999; //无返回 } else { /** 计算时间

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价: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