Yhzhtk / note

知识代码笔记
https://github.com/Yhzhtk/note/issues
MIT License
108 stars 11 forks source link

智能车代码 C语言(大学) #16

Open Yhzhtk opened 9 years ago

Yhzhtk commented 9 years ago

所用单片机均是 51,参加学校智能车大赛的代码。分两个代码:

代码一

#include "reg52.h"
#define uint unsigned int 
#define uchar unsigned char 

uchar num[] ={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};

sbit p1_0=P1^0; //D2,低有效
sbit p1_1=P1^1; //D3,低有效
sbit p1_2=P1^2; //
sbit p1_3=P1^3; //
sbit p1_4=P1^4; //K1,低有效
sbit p1_5=P1^5; //K2,低有效
sbit p1_6=P1^6; //控制蜂鸣器,低有效
sbit p1_7=P1^7; //控制数码管,低有效

bit duoJiFlag;
bit dianJiFlag;

uint i;
uint maxDij;
uint highDij;
uint maxDoj;
uint highDoj;

void delay_ms(uint i)
{
    uint m,n;
    for(m=0;m<i;m++ )
        for(n=0;n<137;n++)
            ;
}

void uint_inter()
{
    TMOD=0X01; // 定时器0方式1
    EA = 1; // 允许所有中断
    duoJiFlag=1;
    maxDoj=19000;
    highDoj=15000;

    ET0 = 1; // 开定时器0中断
    TR0 = 1; // Timer0开始计数
}

void timer0(void) interrupt 1
{
    ET0=0;
    TR0=0;
    if(duoJiFlag) 
    {   
         p1_0=1;
         p1_6=1;
         TH0=(65535-highDoj)/256;
         TL0=(65535-highDoj)%256;
    }  
    else
    {
         p1_0=0;
         p1_6=0;
         TH0=(65535-maxDoj+highDoj)/256;
         TL0=(65535-maxDoj+highDoj)%256;
    }
    duoJiFlag=~duoJiFlag;
    ET0 = 1; // 开定时器0中断
    TR0 = 1; // Timer0开始计数
}

main()
{
    p1_7=0;
    i=0;
    while(1)
    {
        if(p1_5==0)
        {
            i++;
            p1_0=p1_5;
            delay_ms(200);
        }
        else
            p1_0=1;
        if(i==10)
            i=0;
        P2=num[i];

    }
}

代码二

#include "reg52.h"
#define uint unsigned int 
#define uchar unsigned char 

uchar num[] ={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};

sbit p1_0=P1^0; //D2,低有效
sbit p1_1=P1^1; //D3,低有效
sbit p1_2=P1^2; //
sbit p1_3=P1^3; //
sbit p1_4=P1^4; //K1,低有效
sbit p1_5=P1^5; //K2,低有效
sbit p1_6=P1^6; //控制蜂鸣器,低有效
sbit p1_7=P1^7; //控制数码管,低有效

bit duoJiFlag;
bit dianJiFlag;

uint i;
uint maxDij;
uint highDij;
uint maxDoj;                                          
uint highDoj;

void delay_ms(uint i)
{
    uint m,n;
    for(m=0;m<i;m++ )
        for(n=0;n<137;n++)
            ;
}

void uint_inter()
{
    TMOD=0X01; // 定时器0方式1
    EA = 1; // 允许所有中断
    duoJiFlag=1;
    maxDoj=19000;
    highDoj=15000;

    ET0 = 1; // 开定时器0中断
    TR0 = 1; // Timer0开始计数
}

void timer0(void) interrupt 1
{
    ET0=0;
    TR0=0;
    if(duoJiFlag) 
    {   
         p1_0=1;
         p1_6=1;
         TH0=(65535-highDoj)/256;
         TL0=(65535-highDoj)%256;
    }  
    else
    {
         p1_0=0;
         p1_6=0;
         TH0=(65535-maxDoj+highDoj)/256;
         TL0=(65535-maxDoj+highDoj)%256;
    }
    duoJiFlag=~duoJiFlag;
    ET0 = 1; // 开定时器0中断
    TR0 = 1; // Timer0开始计数
}

main()
{
    p1_7=0;
    i=0;
    while(1)
    {
        if(p1_5==0)
        {
            i++;
            if(i==10)
                i=0;
            p1_0=p1_5;
            delay_ms(200);
        }
        else
            p1_0=1;
        if(p1_4==0)
        {
            i--;
            if(i==-1)
                 i=9;
            p1_1=p1_4;
            delay_ms(200);
        }   
        else
            p1_1=1;
        P2=num[i];

    }
}
jitkio commented 7 months ago

👌🏻,这代码怎么样?有实战过的兄弟吗?

Yhzhtk commented 7 months ago

👌🏻,这代码怎么样?有实战过的兄弟吗?

实战过,没问题的

jitkio commented 7 months ago

@Yhzhtk 多谢