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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4061|回復: 0
收起左側

霍爾元件+單片機的測速儀程序和電路原理圖

[復制鏈接]
ID:445575 發表于 2019-5-30 18:58 | 顯示全部樓層 |閱讀模式
360截圖20190530184812202.jpg IMG_20190111_112254.jpg

單片機系統程序:
//說明1:P00---P07:a-----dp   P27---P24:com1-----com4   P34切換顯示   P32---INT0  一個磁鋼
//說明2:此程序針對車輪周長為207cm,其他型號周長,可改變參數就行
//說明3:數碼管從左至右  高------低
  1. #include<reg51.h>
  2. #include"juxun001.h"
  3. //====================================主函數=========================================================
  4. void main()
  5. {
  6.    time0_int0_init();//定時器0和外部中斷0的初始化
  7.    while(!TR0)  //上電一直未切割時就顯示  0.0.0.0
  8.    {
  9.       init_display();
  10.    }
  11.    while(1)
  12.    {
  13.       if(!change)//按下切換按鍵顯示里程
  14.       {
  15.           delay1m(5);
  16.           if(!change)
  17.           {
  18.              flag= ~flag;
  19.           }
  20.           while(!change);     
  21.       }
  22.    
  23.    }
  24. }

  25. //==================================定時器0中斷函數================================
  26. void time0_interrupt()interrupt 1
  27. {
  28.    TL0 = (65536 -5000) % 256;// 12M晶振,5ms定時
  29.    TH0 = (65536 -5000) / 256;
  30.    display_function();
  31.    time_counter++;
  32.    time_counter8++;
  33.    if(time_counter8>= 1600)//大于8s沒切割,車子視為停下了,速度為:0,但里程還記著
  34.    {
  35.       time_counter8= 0;
  36.       speed =0;//速度為 0
  37.       point1 = 0;
  38.       buf1[3] =speed%10;buf1[2] = speed/10%10;
  39.       buf1[1] =speed/100%10;buf1[0] = speed/1000%10;
  40.    }
  41. }
  42. //==================================外部中斷0中斷函數=========================
  43. void int0_interrupt()interrupt 0
  44. {  
  45.    
  46.    external_counter++;
  47.    if(external_counter==1 )TR0 = ~TR0;//第一次切割打開定時器0
  48.    if(external_counter== 65535)external_counter = 0;
  49.    time_counter8= 0; //只要8秒內有切割,車子就任在運行
  50.    
  51.    if(external_counter% 2 == 0)//切割2次 更新下速度
  52.    {                             //*5是因為中斷一次是5MS
  53.       if(flag1==0){speed=((ulong)(36000)*zhouchang)/(time_counter * 5);flag1=1;}
  54.       elseif(flag1==1){speed =((ulong)(36000)*2*zhouchang)/(time_counter * 5);}//速度:單位為 m/h ,*1000的目的是不出現浮點數
  55.       
  56.       if((speed>= 100)&&(speed < 1000)) //100 ---- 1000       3位整數
  57.       {
  58.           point1= 1;buf1[3] = speed%10;buf1[2] = speed/10%10;
  59.           buf1[1]= speed/100%10;buf1[0] = 0;}
  60.       elseif((speed >= 1000)&&(speed < 10000))   //1000 ---- 10000        4位整數
  61.       {
  62.           point1= 1;speed = (uint)speed;
  63.           buf1[3]= speed%10;buf1[2] = speed/10%10;
  64.           buf1[1]= speed/100%10;buf1[0] = speed/1000%10;}
  65.       elseif((speed >= 10000)&&(speed < 100000))    //10000 ----- 100000      5位整數
  66.       {
  67.          point1 = 2;
  68.           buf1[3]= speed/10%10;buf1[2] = speed/100%10;
  69.           buf1[1]= speed/1000%10;buf1[0] = speed/10000%10;}
  70.       elseif((speed >= 100000)&&(speed < 1000000))  //100000 ------ 1000000    6位整數
  71.       {
  72.           point1= 3;
  73.           buf1[3]= speed/100%10;buf1[2] = speed/1000%10;
  74.           buf1[1]= speed/10000%10;buf1[0] = speed/100000%10;}
  75.       time_counter= 0;
  76.    }
  77.    if(external_counter% 8 == 0)//每切割8次 更新下里程
  78.    {
  79.       s =(ulong)external_counter * zhouchang;  //里程:單位為   cm
  80.       if((s >=1000)&&(s < 10000))
  81.       {
  82.           point2= 1;                                        //  0.012    001212
  83.           buf2[3]= s/100%10;buf2[2] = s/1000%10;
  84.           buf2[1]= 0;buf2[0] = 0;}//   4位整數
  85.       else if((s>= 10000)&&(s < 100000))
  86.       {
  87.           point2= 1;
  88.           buf2[3]= s/100%10;buf2[2] = s/1000%10;
  89.           buf2[1]= s/10000%10;buf2[0] = 0;}//     5位整數    0.123  012345
  90.       else if((s>= 100000)&&(s < 1000000))
  91.       {
  92.           point2= 1;
  93.           buf2[3]= s/100%10;buf2[2] = s/1000%10;
  94.           buf2[1]= s/10000%10;buf2[0] = s/100000%10;} //   6位整數 1.234    1234 56
  95.        else if((s >= 1000000)&&(s <10000000))
  96.       {
  97.           point2= 2;
  98.           buf2[3]= s/1000%10;buf2[2] = s/10000%10;
  99.           buf2[1]= s/100000%10;buf2[0] = s/1000000%10;}//    7位整數   1234 567
  100.       else if((s>= 10000000)&&(s < 100000000))
  101.       {
  102.           point2= 3;
  103.           buf2[3]= s/10000%10;buf2[2] = s/100000%10;
  104.           buf2[1]= s/1000000%10;buf2[0] = s/10000000%10;} //    8位整數      1234 5678
  105.    }
  106. }
  107. //==================================開電源就顯示的數據,初始顯示速度========================
  108. void init_display()
  109. {
  110.    uchar i;
  111.    for(i = 0;i< 4;i++)  
  112.    {
  113.       wei =bitcode[num - 1];
  114.       led =display1[buf1[num--]];
  115.       delay1m(4);
  116.       if(num ==0)num = 4;
  117.    }
  118. }
  119. //====================================顯示函數===================================
  120. void display_function()
  121. {
  122.    if(flag ==0)//顯示速度
  123.    {
  124.       switch(point1)
  125.       {
  126.           case0:wei = bitcode[num-1];led = display1[buf1[num-1]];num--;break;//速度顯示 0
  127.           case1:if(num == 1){ wei = bitcode[num-1];led = 0x7f&display1[buf1[num-1]];num--;}
  128.                 else { wei = bitcode[num-1];led =display1[buf1[num-1]];num--;}break;//最高位小數點亮
  129.          
  130.           case2:if(num == 2){ wei = bitcode[num-1];led = 0x7f&display1[buf1[num-1]];num--;}
  131.                 else { wei = bitcode[num-1];led =display1[buf1[num-1]];num--;}break;//第二高位小數點亮
  132.          
  133.           case3:if(num == 3){ wei = bitcode[num-1];led =0x7f&display1[buf1[num-1]];num--;}
  134.                 else { wei = bitcode[num-1];led =display1[buf1[num-1]];num--;}break;//第三高位小數點亮
  135.           default:break;   
  136.          
  137.       }
  138.       if(num ==0)num = 4;
  139.    }
  140.    else if(flag== 1)//顯示里程
  141.    {
  142.       switch(point2)
  143.       {
  144.           case0:wei = bitcode[num-1];led = display1[buf2[num-1]];num--;break;//里程顯示 0
  145.          
  146.           case1:if(num == 1){ wei = bitcode[num-1];led =0x7f&display1[buf2[num-1]];num--;}
  147.                 else { wei = bitcode[num-1];led =display1[buf2[num-1]];num--;}break;//最高位小數點亮
  148.          
  149.           case2:if(num == 2){ wei = bitcode[num-1];led =0x7f&display1[buf2[num-1]];num--;}
  150.                 else { wei = bitcode[num-1];led =display1[buf2[num-1]];num--;}break;//第二高位小數點亮
  151.       
  152.           case3:if(num == 3){ wei = bitcode[num-1];led =0x7f&display1[buf2[num-1]];num--;}
  153.                 else { wei = bitcode[num-1];led =display1[buf2[num-1]];num--;}break;//第三高位小數點亮
  154.           default:break;   
  155.          
  156.       }
  157.       if(num ==0)num = 4;
  158.    }
  159. }
  160. //=================================定時器0和外部中斷0的初始化函數=================
  161. void time0_int0_init()
  162. {
  163.    TMOD |= 0x01;
  164.    TMOD &=0xfd;//定時器0工作于方式1
  165.    TL0 = (65536 -5000) % 256;//12M晶振,5ms定時
  166.    TH0 = (65536 -5000) / 256;
  167.    IT0 = 1;//外部中斷0,負跳變觸發方式
  168.    TR0 = 0;
  169.    ET0 = 1;
  170.    EX0 = 1;
  171.    EA = 1;
  172. }
  173. //====================================ms 級延時函數===========================
  174. void delay1m(uchar x)
  175. {
  176.     uchar i,j;
  177.    for(i=0;i<x;i++)      //連數x次,約 x ms
  178.        for(j=0;j<120;j++);   //數120 次,約1 ms
  179. }



復制代碼

評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天堂国产| 天天天天操| www.夜夜骑.com | 99热都是精品 | 91久久精品国产 | 久久国产精品99久久久久 | 国产亚洲精品精品国产亚洲综合 | 狠狠做深爱婷婷综合一区 | 99在线播放 | 国产精品久久久久久久久久免费看 | 亚洲精品日韩精品 | 久久激情网| 欧美日韩亚洲一区 | 成人午夜在线视频 | 中文字幕视频在线看 | 日韩人体在线 | 国产乱码精品一区二区三区忘忧草 | 国产色婷婷久久99精品91 | 一区二区三区在线看 | 欧美视频一区二区三区 | 日韩电影中文字幕 | 亚洲成人www | 久久久久久久国产精品影院 | 国产人免费人成免费视频 | 久久不射电影网 | 国产精品有限公司 | 蜜月aⅴ免费一区二区三区 99re在线视频 | 国产精品一区二区三区在线 | 蜜桃在线一区二区三区 | 午夜小电影 | 在线看免费| 久久91精品久久久久久9鸭 | 免费美女网站 | 国产成人精品久久久 | 国产精品视频一区二区三区不卡 | 久久久久久国产精品免费免费 | 亚洲精品中文字幕 | 久久亚洲天堂 | 久久久91精品国产一区二区三区 | 天天天操操操 | 久久精品国产久精国产 |