锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

航模大赛小车程序(不容易啊)

时间:2024-05-27 02:07:11

#include#include #define c(x)(x*110592/120000)unsigned char Ir_Buf[4];sbit IRIN = P3^2;  unsigned char  IRCOM[7];char k,z;void IRdelay(unsigned char x);unsigned char keys=0xff;sbit m1zheng=P1^0;  sbit m1fu=P1^1 ;  sbit m2zheng=P1^2;  sbit m2fu=P1^3;  sbit SPK = P3^7;unsigned char frq;unsigned int flag;                     //    ///////////// wendu#define uint unsigned int#define uchar unsigned charuint Temp_buff;        uchar g;      #define nop() _nop_()#define _Nop() _nop_()sbit DQ =P3^6;  //定义DS18B20通信端口#define sled_dm_port  P0      /*定义数码管段码的控制脚*/#define sled_wm_port P2    /*定义数码管位码的控制脚*//*定义数码管显示字符跟数字的对应数组关系*/uchar code sled_mun_to_char[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};/*                         0    1    2    3    4    5    6    7    8    9    a    b    c    d    e    f *//*定义需要点亮的数码管*/uchar code sled_bit_table[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};uchar data sled_data[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; /*0-7号SLED缓冲值*/uchar data led_lighten_bit=0 ;  /*LED灯点亮标志位0-7*/ //延时函数void delay(unsigned int i){ while(i--);}//初始化函数Init_DS18B20(void){ unsigned char x=0; DQ = 1; //DQ复位 delay(8); //稍做延时 DQ = 0; //单片机将DQ拉低 delay(80); //精确延时 大于 480us DQ = 1; //拉高总线 delay(14); x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(20);}//读一个字节ReadOneChar(void){ unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--){  DQ = 0; // 给脉冲信号  dat>>=1;  DQ = 1; // 给脉冲信号  if(DQ)  dat|=0x80;  delay(4);  } return(dat);}//写一个字节WriteOneChar(unsigned char dat){ unsigned char i=0; for (i=8; i>0; i--){  DQ = 0;  DQ = dat&0x01;  delay(5);  DQ = 1;  dat>>=1;  }}//读取温度ReadTemperature(void){ unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 a=ReadOneChar(); b=ReadOneChar(); t=b; t<<=8; t=t|a; tt=t*0.0625; //将温度的高位与低位合并 t= tt*10+0.5; //对结果进行4舍5入 return(t);}/*1MS为单位的延时程序*/void delay_1ms(uchar x){    uchar j;    while(x--){        for(j=0;j<125;j++)            {;}        }  }                    ////////////////wendu//==中断读取红外键值程序=========================void int0(void) interrupt 0{ unsigned char j,k,N=0;   IRdelay(15);    if (IRIN==1)        {         return;      }                           //确认IR信号出现   while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。     {IRdelay(1);}  for (j=0;j<4;j++)         //收集四组数据  {    for (k=0;k<8;k++)        //每组数据有8位    {     while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。       {IRdelay(1);}while (!IRIN)          //等 IR 变为高电平        {IRdelay(1);}       while (IRIN)           //计算IR高电平时长         {       IRdelay(1);       N++;                 if (N>=30)      { return;}                  //0.14ms计数过长自动离开。         }                        //高电平计数完毕                      IRCOM[j]=IRCOM[j] >> 1;                  //数据最高位补“0”       if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  //数据最高位补“1”       N=0;     }//end for k   }//end for j keys=IRCOM[2];}//==0.14ms延时===============================void IRdelay(unsigned char x)    //x*0.14MS{ unsigned char i;  while(x--) {  for (i = 0; i<13; i++) {} }}void delayms(unsigned char ms) // 延时子程序{       unsigned char i; while(ms--) {  for(i = 0; i < 120; i++); }}//==延迟程序==================================void delay1ms(int x){ int i,j; for(i=0;i 
 
-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章