久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

航模大賽小車程序(不容易啊)

作者:佚名   來源:本站原創   點擊數:  更新時間:2012年11月15日   【字體:
#include<reg52.h>
#include <intrins.h>
#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 char
uint 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<x;i++)
 for(j=0;j<120;j++) ;
}
//==方向向前==================================
void go()
{
 //z=1;
 m1zheng=1;
 m1fu=0;
 m2zheng=1;
 m2fu=0;
 keys=0;
 
}
//==方向向后==================================
void back()
{
 // z=0; 
  m1zheng=0;
  m1fu=1;
  m2zheng=0;
  m2fu=1;
  keys=0;
}
//==左轉======================================
void turn_lef()
{
 // z=0;
  m1zheng=0;
  m1fu=0;
  m2zheng=1;
  m2fu=0;
  keys=0;
}
//==右轉======================================
void turn_rig()
{ 
 // z=0;
  m1zheng=1;
  m1fu=0;
  m2zheng=0;
  m2fu=0;
  keys=0;
}
//==停止程序==================================
void stop()
{
  z=0;
  m1zheng=0;
  m1fu=0;
  m2zheng=0;
  m2fu=0;
  keys=0;
}
 //
void timer0() interrupt 1 using 1
{
 TH0 = 0xfe;
 TL0 = frq;
 if(z==1)
 {
 SPK=~SPK;
 }
 else
 {
  SPK=1;
 }  
}
 //

//==主程序===================================
void main()
{
 EA=1;
 EX0=1;          //IE=0x81;
 TMOD=0x01;
 TR0=1;
 IT0=1;//TCON=0x11;
 ET0=1;// m1zheng=0;
 //
 frq = 0x00;
 TH0 = 0x00;
 TL0 = 0xff;  
 // 
                  //wendu
// uint Temp_buff;
// uchar g;
                 //wendu
 while(1)
 {
  //
  frq++;
  delayms(1);
  //
   switch(keys)
    {
     case ~0xBD: z=1; break;
     
     case ~0xB9: go();break;
     case ~0xEA: back();break;
     case ~0xBB: turn_lef();break;
     case ~0xBC: turn_rig();break;
     case ~0xE7: inc();break;
     case ~0xAD: dec();break;
     case ~0xBF: stop();break;
     
     case ~0xB5: z=0;break;
     default:break;  
    }                ///////wendu
  Temp_buff=ReadTemperature(); /*讀取當前溫度*/
  sled_data[5] = sled_mun_to_char[Temp_buff/100];
  sled_data[6] = sled_mun_to_char[Temp_buff%100/10];
  sled_data[7] = sled_mun_to_char[Temp_buff%10];
  for(g=0;g<8;g++)
  {
     sled_wm_port = 0xff; /*關閉顯示*/
     _Nop();
     _Nop();
     _Nop();
     sled_dm_port = sled_data[g]; /*輸出段碼數據到數碼管*/
     if(g==6) sled_dm_port = sled_dm_port&0x7f; /*顯示小數點*/
     sled_wm_port = sled_bit_table[g]; /*輸出位碼數據到數碼管*/
     delay_1ms(1);
     }
                    ///////wendu
     
 }
} 
關閉窗口

相關文章

主站蜘蛛池模板: 中文字幕一区二区三区在线观看 | 日本在线观看网址 | 福利片在线 | 精品国产精品国产偷麻豆 | 日韩免费视频一区二区 | 秋霞电影一区二区三区 | 国产精品国产三级国产aⅴ入口 | 日韩二区 | 波多野结衣先锋影音 | 在线看91 | 国产欧美一区二区三区久久人妖 | 超碰在线播 | 亚洲一区视频 | 欧美精品乱码99久久影院 | 日日操夜夜操天天操 | 一区二区视频在线 | 丁香五月缴情综合网 | 国产一级片免费视频 | 国产精品激情 | 麻豆国产一区二区三区四区 | 国产精品久久av | 美女啪啪国产 | 狠狠综合久久av一区二区小说 | 超碰成人免费 | 羞羞视频网站免费看 | 国产精品久久精品 | 黄色中文字幕 | 在线播放中文字幕 | 在线免费观看黄网 | 黑人巨大精品欧美黑白配亚洲 | 一区二区免费看 | 91免费电影| 成人精品视频在线观看 | 91免费在线视频 | 成人小视频在线观看 | 国产精品视频在线播放 | 一区二区三区高清在线观看 | 国产精品久久久久久福利一牛影视 | 亚洲精品免费视频 | 亚洲欧美综合精品久久成人 | 99精品一区 |