自学单片机3个月,我的第一个单片机作品无线串口控制小车......

2020-02-04 09:03发布


(原文件名:IMG0364A.jpg)


(原文件名:IMG0365A.jpg)


(原文件名:1111.jpg)
原理很简单,就是VC写的串口程序,向单片机发数据,单片机接到数据再用红外发射出去,小车接收到红外数据后拖动电机。大二的时候学校开过课,但是一学期下来流水灯都不会。我是自学的,没有任何老师指导,有问题都是自己想或是网上解决的,所以想告诉大家自学单片机是完全可以学出来的。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
60条回答
freestylehll
2020-02-05 12:48
小车程序
#include <reg52.h>
#define uchar unsigned char
uchar tablewe[]={0xf1,0xf2,0xf4,0xf8};                   //P2
uchar tabledu[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x00,0xC6,0x40,0x86,0x8E};                   //P1
sbit ina=P0^0;
sbit inb=P0^1;
sbit inc=P0^2;
sbit ind=P0^3;
void time1init();
void int1init();
void irpros();
void irwork();
void jieshou();
void delay();
void display();
void work();
uchar ircode;
uchar irdata[9];
uchar disp[2];
uchar irrecvok;
uchar irprosok;
uchar start_flag;
uchar bitnum;
uchar irtime;
void main()
{
time1init();
int1init();
while(1)
{
jieshou();
display();
work();
}
}
void time1init()
{
TMOD=0x20;
TH1=0;
TL1=0;
TR1=1;
ET1=1;
EA=1;
}
void int1init()
{
IT1=1;
EX1=1;
EA=1;
}
void time1() interrupt 3
{
        irtime++;       
}
void int1() interrupt 2
{
        if(start_flag)
        {
                 if(irtime>18)
                 {
                         irdata[0]=irtime;
                        bitnum=1;
                        irtime=0;
                 }
                 else
                 {
                         irdata[bitnum]=irtime;
                        irtime=0;
                         bitnum++;
                        if(bitnum==9)
                        {
                                bitnum=0;
                                start_flag=0;
                                irrecvok=1;
                        }
                 
                 }
        }
        else
        {
                start_flag=1;
                irtime=0;
        }
}
void irpros()
{
uchar i,k;
uchar value;
k=1;

for(i=0;i<8;i++)
{
        value>>=1;
        if(irdata[k]>14)
        {
                value|=0x80;
        }
        k++;
}
ircode=value;
irprosok=1;
}
void irwork()
{
disp[0]=ircode/16;
disp[1]=ircode%16;
}
void delay()
{
uchar a=50;
while(a--);
}
void display()
{
P2=tablewe[0];
P1=tabledu[disp[0]];
delay();
P1=0xff;
P2=tablewe[1];
P1=tabledu[disp[1]];
delay();
P1=0xff;
P2=tablewe[2];
P1=tabledu[0];
delay();
P1=0xff;
P2=tablewe[3];
P1=tabledu[0];
delay();
P1=0xff;
}
void jieshou()
{
        if(irrecvok)
        {
        irrecvok=0;
        irpros();
        }
        if(irprosok)
        {
        irprosok=0;
        irwork();
        }
}
void work()
{
if(disp[0]==7&&disp[1]==15)                                 //左
{
        ina=0;
        inb=1;
        inc=1;
        ind=0;
}
if(disp[0]==11&&disp[1]==15)                          //右
{
                ina=1;
        inb=0;
        inc=0;
        ind=1;
}
if(disp[0]==13&&disp[1]==15)                         //前进
{
                 ina=1;
        inb=0;
        inc=1;
        ind=0;
}
if(disp[0]==14&&disp[1]==15)                         //后退
{
                 ina=0;
        inb=1;
        inc=0;
        ind=1;
}
if(disp[0]==15&&disp[1]==7)                                 //停止
{
                  ina=1;
        inb=1;
        inc=1;
        ind=1;
}
}

一周热门 更多>