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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5160|回復: 0
打印 上一主題 下一主題
收起左側

藍橋杯單片機知識匯總

[復制鏈接]
跳轉到指定樓層
樓主
ID:643131 發(fā)表于 2019-12-29 11:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 1475963 于 2019-12-29 12:37 編輯

原帖:https://www.cnblogs.com/garden6zg/p/8469705.html
1.數(shù)碼管
  • 段碼顯示
            uchar code display[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xbf, 0xff};
  • 打開或關閉數(shù)碼管
            P2 = (P2 & 0x1f) | 0xc0;
            P0 = order[cnt];  
            P2 &= 0x1f;
            P2 = (P2 & 0x1f) | 0xe0;
            P0 = display[disbuf[cnt]];  
            P2 &= 0x1f;
2.LED顯示            P2 = (P2 & 0x1f) | 0x80;
            P0 = 0xfe;
            P2 &= 0x1f;
3.系統(tǒng)初始化
  • 關閉外設
            P2 = ((P2 & 0x1f) | 0xa0);      //關閉全部外設  
            P0 = 0x00;  
            P2 &= 0x1f;
            P2 = (P2 & 0x1f) | 0xe0;        //數(shù)碼管都不顯示
            P0 = 0xff;  
            P2 &= 0x1f;
  • 定時器設置
            TMOD = 0x01;                   //計時器0,采用方式1  
            TH0 = (65536 - 2000) / 256;    //定時2ms  
            TL0 = (65536 - 2000) % 256;
            EA = 1;                        //打開總中斷
            ET0 = 1;                       //定時器中斷0打開
            TR0 = 1;                       //開始計數(shù)
  • 串口通信設置
            SCON = 0x50;    //工作方式1
            AUXR = 0x40;    //模式為1T模式
            TMOD = 0x20;    //定時器模式為2,自動重裝
            TH1 = 256 - (11059200 / 2400 / 32);    //波特率為2400
            TL1 = 256 - (11059200 / 2400 / 32);
            EA = 1;         //打開總中斷
            ES = 1;         //打開串口中斷
            TR1 = 1;        //打開計時器1
4.IIC
            #define SlaveAddrW 0x90
            #define SlaveAddrR 0x91
            #define EEPROMW    0xa0
            #define EEPROMR    0xa1
5.DS1302
  • 命令字
            #define AM(X)        X  
            #define PM(X)           (X + 12)
            #define DS1302_SECOND    0x80
            #define DS1302_MINUTE    0x82
            #define DS1302_HOUR      0x84
            #define DS1302_DAY       0x86
            #define DS1302_MONTH     0x88
            #define DS1302_WEEK      0x8A
            #define DS1302_YEAR      0x8C  
            #define DS1302_RAM(X)   (0xC0 + (X) * 2)
  • 函數(shù)操作
            void InitDS1302(void)
            {         
                  Write_Ds1302(0x8E, 0x00);//關掉寫保護  
                  Write_Ds1302(0x80, 0x50);//秒   
                  Write_Ds1302(0x82, 0x59);//分     
                  Write_Ds1302(0x84, 0x23);//時     
                  Write_Ds1302(0x8E, 0x80);//打開寫保護
            }  
            //轉化時間格式  
            void DS1302_GetTime(SYSTEMTIME *Time)
            {      
                  unsigned char ReadValue;      /* 將BCD碼轉換成十進制數(shù) */  
                  ReadValue = Read_Ds1302(DS1302_MINUTE | 0x01);     
                  Time->minute = ((ReadValue & 0x70)>>4) * 10 + (ReadValue & 0x0f);  
                  ReadValue = Read_Ds1302(DS1302_HOUR | 0x01);   
                  Time->hour = ((ReadValue & 0x70)>>4) * 10 + (ReadValue & 0x0f);
            }
6.A/D
            unsigned char Rb2_Read()
            {   
                  unsigned char dat;   
                  IIC_Start();
                  IIC_SendByte(0x90);   //寫入地址   
                  IIC_WaitAck();     
                  IIC_SendByte(0x43);  //0x43是Rb2, 0x41是光敏  
                  IIC_WaitAck();         
                  IIC_Start();  
                  IIC_SendByte(0x91);   //讀命令   
                  IIC_WaitAck();         
                  dat = IIC_RecByte();  //讀取一個字節(jié)  
                  IIC_Ack(0);   
                  IIC_Stop();   
                  return dat;   
            }
7.EEPROM(讀取和寫入數(shù)據(jù)都不可中斷)
            unsigned char Read_EEPROM(unsigned char con)
            {   
                  unsigned char dat;   
                  IIC_Start();  
                  IIC_SendByte(0xa0);   //寫入地址
                  IIC_WaitAck();   

                  IIC_SendByte(con);       //從起始位置開始讀取  
                  IIC_WaitAck();     

                  IIC_Start();   
                  IIC_SendByte(0xa1);   //讀命令   
                  IIC_WaitAck();      
                  dat = IIC_RecByte();     //讀取一個字節(jié)  
                  IIC_Ack(0);  
                  IIC_Stop();   
                  return dat;
           }

           void Write_EEPROM(unsigned char date, unsigned char con)
           {  
                  IIC_Start();   
                  IIC_SendByte(0xa0);  
                  IIC_WaitAck();  
                  IIC_SendByte(con);   
                  IIC_WaitAck();   
                  IIC_SendByte(date);  
                  IIC_WaitAck();   
                  IIC_Stop();  
                  Delay(3);         //寫入后要注意延時一段時間
           }
8.DS18B20(讀取溫度不可中斷)
  • 延時函數(shù)
           //單總線延時函數(shù)  
           void Delay_OneWire(uint t)  
           {      
                  char  z;      
                  while(t--)      
                  for(z = 0; z < 12; z++);  
           }
  • 讀取溫度  /* 讀取數(shù)據(jù)不可中斷,可以采用關閉終端來實現(xiàn) */
           unsigned int Read_Temperature()
           {      
                  unsigned char low,high;      
                  unsigned int temp;   
                  float t;   

                  init_ds18b20();        //器件初始化   
                  Write_DS18B20(0xcc);     //跳過讀序列    
                  Write_DS18B20(0x44);     //啟動溫度轉換   
                  Delay_OneWire(200);      //延遲一會


                  init_ds18b20();   
                  Write_DS18B20(0xcc);     //同上   
                  Write_DS18B20(0xbe);     //讀取溫度  

                  low = Read_DS18B20();    //讀取低位   
                  high = Read_DS18B20();   //讀取高位   
                  temp = (high << 8) | low;   
                  t = temp * 0.0625;   
                  temp = t + 0.5;   
                  return temp;  
           }
9.矩陣鍵盤
           sbit r1=P3^0;    //4行
           sbit r2=P3^1;
           sbit r3=P3^2;
           sbit r4=P3^3;            
           sbit c1=P4^4;    //4列
           sbit c2=P4^2;
           sbit c3=P3^5;
           sbit c4=P3^4;

           unsigned char key_scan()   //讀取矩陣鍵盤鍵值
           {   
                  unsigned char key_value;

                  r1=0;
                  r2=r3=r4=1;   
                  c1=c2=c3=c4=1;
                  else if(!c1) key_value=0;
                  else if(!c2) key_value=1;   
                  else if(!c3) key_value=2;
                  else if(!c4) key_value=3;  

                  r2=0;   
                  r1=r3=r4=1;
                  c1=c2=c3=c4=1;   
                  if(!c1) key_value=4;   
                  else if(!c2) key_value=5;  
                  else if(!c3) key_value=6;   
                  else if(!c4) key_value=7;

                  r3=0;
                  r2=r1=r4=1;
                  c1=c2=c3=c4=1;  
                  if(!c1) key_value=8;  
                  else if(!c2) key_value=9;  
                  else if(!c3) key_value=10;   
                  else if(!c4) key_value=11;   

                  r4=0;   
                  r2=r3=r1=1;   
                  c1=c2=c3=c4=1;   
                  if(!c1) key_value=12;  
                  else if(!c2) key_value=13;  
                  else if(!c3) key_value=14;  
                  else if(!c4) key_value=15;
                  return key_value;
           }
10.超聲波測距
          #define somenops {_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();}
          sbit TX = P1^0; //發(fā)射引腳
          sbit RX = P1^1; //接收引腳


          //TX 引腳發(fā)送 40KHz 方波信號驅動超聲波發(fā)送探頭
          void send_wave(void)
          {   
                 unsigned char i = 8; //發(fā)送 8 個脈沖   
                  do
                  {     
                        TX = 1;   
                        somenops;somenops;somenops;somenops;somenops;     
                        somenops;somenops;somenops;somenops;somenops;  
                        TX = 0;   
                        somenops;somenops;somenops;somenops;somenops;      
                        somenops;somenops;somenops;somenops;somenops;  
                  }
                  while(i--);
           }
           void Check_Distance()
           {   
                  uint t;   
                  /* 關閉定時器 0 中斷:計算超聲波發(fā)送到返回的時間 */  
                  ET0 = 0;   
                  send_wave();    //發(fā)送方波信號
                  ET0 = 1;   
                  TR1 = 1;         //啟動計時  
                  while((RX == 1) && (TF1 == 0));   //等待收到脈沖  
                  TR1 = 0;        //關閉計時   
                  //發(fā)生溢出   
                  if(TF1 == 1)
                  {        
                        TF1 = 0;     
                        distance = 99; //無返回   
                  }
                  else
                  {      
                        /** 計算時間 */   
                        t = TH1;      
                        t <<= 8;     
                        t |= TL1;     
                        distance = (unsigned int)(t * 12 * 0.017 / 12); //計算距離  
                  }   
                       TH1 = 0;   
                       TL1 = 0;
           }

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产综合久久久久 | 欧美a区| 污书屋| 欧美激情久久久 | 欧美日韩在线一区二区 | aaaaa毛片 | 日韩成人免费在线视频 | 日韩精品中文字幕一区二区三区 | 国产一级片91 | 性色av网站 | 亚洲综合电影 | 亚洲欧美在线观看 | 欧美中文一区 | 日韩精品免费在线观看 | 国产三区视频在线观看 | 国产精品v | 亚洲 成人 在线 | 69av在线视频 | 国产在线观看不卡一区二区三区 | 欧美三区在线观看 | 免费观看一级特黄欧美大片 | 国产精品视频不卡 | 亚洲精品中文字幕在线 | 久久久精| 欧美男人天堂 | 亚洲欧美日本国产 | 中文字幕欧美一区 | 欧美一区二区三区在线免费观看 | 精产国产伦理一二三区 | 91久久精品一区二区二区 | 一级黄色片网站 | 国产亚洲精品综合一区 | 亚洲天堂精品一区 | 欧美日韩亚洲国产综合 | 精品国产一区二区国模嫣然 | 婷婷毛片 | 超碰成人免费观看 | www国产亚洲精品久久网站 | 精品熟人一区二区三区四区 | 一级做a爰片性色毛片16美国 | 久久精品|