欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
最近寫了個單片機小車的程序分享一下
[打印本頁]
作者:
wupengf
時間:
2019-6-17 10:13
標題:
最近寫了個單片機小車的程序分享一下
喜歡32的朋友可以看一下 ,遙控的32小車程序
單片機源程序如下:
#include "reg52.h"
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar count; //0.5ms次數標識
uchar jd; //角度標識
sbit DJ0 = P1^0;
sbit DJ1 = P1^1;
sbit DJ2 = P1^2;
sbit DJ3 = P1^3;
sbit Trig = P2^2; //超聲波引腳
sbit Echo = P2^3;
unsigned int time=0;
unsigned long S=0;
bit flag =0;
unsigned char disbuff[4] ={ 0,0,0};
sbit pwm = P2^4; //PWM信號輸出
sbit led = P1^4 ; //led信號輸出
uchar code table[]="I LOVE MCU!";
sbit lcden=P2^6; //液晶 使能
sbit lcdrs=P2^7; //液晶 數據命令
void delay(uint z) //延時函數
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void Stop() //小車停止
{
DJ0 = 0;
DJ1 = 0;
DJ2 = 0;
DJ3 = 0;
}
void XiaoChe_GO() //小車前進
{
DJ0 = 0;
DJ1 = 1;
DJ2 = 0;
DJ3 = 1;
}
void XiaoChe_Back() //小車后退
{
DJ0 = 1;
DJ1 = 0;
DJ2 = 1;
DJ3 = 0;
}
void XiaoChe_Zuo() //小車左轉
{
DJ0 = 1;
DJ1 = 0;
DJ2 = 0;
DJ3 = 1;
}
void XiaoChe_You() //小車右轉
{
DJ0 = 0;
DJ1 = 1;
DJ2 = 1;
DJ3 = 0;
}
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void Time0_Init() //定時器初始化
{
TMOD = 0x11; //定時器0工作在方式1 定時器1工作在方式1
TH0 = 0xfe;
TL0 = 0x33; //11.0592MZ晶振,0.5ms
TH1 = 0;
TL1 = 0;
EA=1;
ET0=1;
ET1=1;
TR0=1; //定時器開始 用于舵機轉向
}
/*
void Time0_Int() interrupt 1 //中斷程序
{
TH0 = 0xfe; //重新賦值
TL0 = 0x33;
if(count<jd) //判斷0.5ms次數是否小于角度標識
pwm=1; //確實小于,PWM輸出高電平
else
pwm=0; //大于則輸出低電平
count=(count+1); //0.5ms次數加1
count=count%40; //次數始終保持為40 即保持周期為20ms
}
*/
void zd0() interrupt 3 //T0中斷用來計數器溢出,超過測距范圍
{
flag=1; //中斷溢出標志
}
void StartModule() //啟動模塊
{
Trig=1; //啟動一次模塊
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
Trig=0;
}
void Conut(void) //計算結果
{
time=TH1*256+TL1;
TH1=0;
TL1=0;
S=(time*1.7)/10; //算出來是MM
if((S>=700)||flag==1) //超出測量范圍顯示“-”
{
flag=0;
XiaoChe_GO();
disbuff[0]=45;
disbuff[1]=45;
disbuff[2]=45;
}
else if(S < 100)
{
XiaoChe_Zuo();
delay(300);
Stop();
disbuff[0]=S%1000/100 + 0x30;
disbuff[1]=S%1000%100/10 + 0x30;
disbuff[2]=S%1000%10 %10 + 0x30;
}
else
{
disbuff[0]=S%1000/100 + 0x30;
disbuff[1]=S%1000%100/10 + 0x30;
disbuff[2]=S%1000%10 %10 + 0x30;
}
}
void main()
{
int x=0;
uchar num;
Time0_Init();
init();
write_com(0x80);
for(num=0;num<11;num++)
{
write_data(table[num]);
delay(5);
}
while(1)
{
x++;
StartModule();
while(!Echo); //當RX為零時等待
TR1=1; //開啟計數
while(Echo); //當RX為1計數并等待
TR1=0; //關閉計數
Conut(); //計算
write_com(0x80+0x40);
for(num=0;num<3;num++)
{
write_data(disbuff[num]);
delay(5);
}
delay(50);
jd = 1;
count = 0;
delay(100);
jd = 2;
count = 0;
delay(100);
jd = 3;
count = 0;
delay(100);
jd = 4;
count = 0;
delay(100);
jd = 5;
count = 0;
delay(100);
if(x%2 == 0)
led = !led;
}
}
復制代碼
作者:
admin
時間:
2019-6-17 14:49
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1