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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4061|回復(fù): 0
收起左側(cè)

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

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

單片機(jī)系統(tǒng)程序:
//說明1:P00---P07:a-----dp   P27---P24:com1-----com4   P34切換顯示   P32---INT0  一個(gè)磁鋼
//說明2:此程序針對車輪周長為207cm,其他型號周長,可改變參數(shù)就行
//說明3:數(shù)碼管從左至右  高------低
  1. #include<reg51.h>
  2. #include"juxun001.h"
  3. //====================================主函數(shù)=========================================================
  4. void main()
  5. {
  6.    time0_int0_init();//定時(shí)器0和外部中斷0的初始化
  7.    while(!TR0)  //上電一直未切割時(shí)就顯示  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. //==================================定時(shí)器0中斷函數(shù)================================
  26. void time0_interrupt()interrupt 1
  27. {
  28.    TL0 = (65536 -5000) % 256;// 12M晶振,5ms定時(shí)
  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中斷函數(shù)=========================
  43. void int0_interrupt()interrupt 0
  44. {  
  45.    
  46.    external_counter++;
  47.    if(external_counter==1 )TR0 = ~TR0;//第一次切割打開定時(shí)器0
  48.    if(external_counter== 65535)external_counter = 0;
  49.    time_counter8= 0; //只要8秒內(nèi)有切割,車子就任在運(yùn)行
  50.    
  51.    if(external_counter% 2 == 0)//切割2次 更新下速度
  52.    {                             //*5是因?yàn)橹袛嘁淮问?MS
  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的目的是不出現(xiàn)浮點(diǎn)數(shù)
  55.       
  56.       if((speed>= 100)&&(speed < 1000)) //100 ---- 1000       3位整數(shù)
  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位整數(shù)
  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位整數(shù)
  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位整數(shù)
  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位整數(shù)
  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位整數(shù)    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位整數(shù) 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位整數(shù)   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位整數(shù)      1234 5678
  105.    }
  106. }
  107. //==================================開電源就顯示的數(shù)據(jù),初始顯示速度========================
  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. //====================================顯示函數(shù)===================================
  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;//最高位小數(shù)點(diǎn)亮
  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;//第二高位小數(shù)點(diǎn)亮
  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;//第三高位小數(shù)點(diǎn)亮
  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;//最高位小數(shù)點(diǎn)亮
  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;//第二高位小數(shù)點(diǎn)亮
  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;//第三高位小數(shù)點(diǎn)亮
  154.           default:break;   
  155.          
  156.       }
  157.       if(num ==0)num = 4;
  158.    }
  159. }
  160. //=================================定時(shí)器0和外部中斷0的初始化函數(shù)=================
  161. void time0_int0_init()
  162. {
  163.    TMOD |= 0x01;
  164.    TMOD &=0xfd;//定時(shí)器0工作于方式1
  165.    TL0 = (65536 -5000) % 256;//12M晶振,5ms定時(shí)
  166.    TH0 = (65536 -5000) / 256;
  167.    IT0 = 1;//外部中斷0,負(fù)跳變觸發(fā)方式
  168.    TR0 = 0;
  169.    ET0 = 1;
  170.    EX0 = 1;
  171.    EA = 1;
  172. }
  173. //====================================ms 級延時(shí)函數(shù)===========================
  174. void delay1m(uchar x)
  175. {
  176.     uchar i,j;
  177.    for(i=0;i<x;i++)      //連數(shù)x次,約 x ms
  178.        for(j=0;j<120;j++);   //數(shù)120 次,約1 ms
  179. }



復(fù)制代碼

評分

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

查看全部評分

回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美a区 | 日韩在线大片 | 日韩成人av在线播放 | 一区二区福利视频 | 国产97碰免费视频 | 日韩av免费在线观看 | 国产精品福利一区二区三区 | 日韩一区二区三区在线观看 | 久久久久国产成人精品亚洲午夜 | 亚洲网站在线观看 | 在线免费观看日本视频 | 久久精品亚洲欧美日韩久久 | 99这里只有精品视频 | 一区二区三区免费观看 | 午夜成人免费视频 | 黑人久久| 天天操夜夜操免费视频 | 国产在线二区 | 国产在线一级片 | 欧美国产激情 | 国产精品国产精品国产专区不卡 | 91精品国产综合久久久亚洲 | 爱爱小视频| 韩日在线观看视频 | 正在播放国产精品 | 日本一区二区视频 | 亚洲+变态+欧美+另类+精品 | 久久久久久国产精品免费免费狐狸 | 久久亚洲一区二区 | 国产中的精品av涩差av | 国产不卡一区 | 婷婷在线网站 | 久久大陆 | 亚洲国产成人精品一区二区 | 91精品国产自产精品男人的天堂 | 九色视频网站 | 99精品免费视频 | 国产在线观看一区二区 | 日本一区二区三区免费观看 | 99热99| 日韩一区二区在线观看 |