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

標題: 簡易自行車里程計仿真圖及單片機源程序 [打印本頁]

作者: 橘子沒有樹    時間: 2017-5-7 09:43
標題: 簡易自行車里程計仿真圖及單片機源程序
簡易自行車里程計仿真圖


由于仿真中沒有霍爾傳感器,實際呢霍爾就是感應磁信號,輸出高低電平的脈沖信號,這樣用脈沖就可以了,不同的頻率代表電機轉速的快慢

單片機源程序:
  1. #include<reg52.h>

  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit COUNT_IN=P3^2;

  5. //定義1602相關管腳
  6. sbit rs=P2^7;
  7. sbit en=P2^6;

  8. uint count;
  9. unsigned long Velocity,Mileage;
  10. bit flag;
  11. uchar code tab1[]={"  Speed:      km/h"};        
  12. uchar code tab2[]={"Mileage:  .   km"};       

  13. void delay(uint x)
  14. {
  15.         uint i,j;
  16.         for(i=0;i<x;i++)
  17.         for(j=0;j<110;j++);
  18. }
  19. void init()
  20. {
  21.         IT0=1;        //INT0負跳變觸發       
  22.     TMOD=0x01;//定時器工作于方式1
  23.         TH0=0x3c;          //50ms
  24.         TL0=0xb0;
  25.         EA=1; //CPU開中斷總允許
  26.         ET0=1;//開定時中斷
  27.         EX0=1;//開外部INTO中斷
  28.     TR0=1;//啟動定時
  29. }
  30. /********液晶寫入指令函數與寫入數據函數,以后可調用**************/

  31. void write_1602com(uchar com)//****液晶寫入指令函數****
  32. {
  33.         rs=0;//數據/指令選擇置為指令
  34.         P0=com;//送入數據
  35.         delay(1);
  36.         en=1;//拉高使能端,為制造有效的下降沿做準備
  37.         delay(1);
  38.         en=0;//en由高變低,產生下降沿,液晶執行命令

  39. }


  40. void write_1602dat(uchar dat)//***液晶寫入數據函數****
  41. {
  42.         rs=1;//數據/指令選擇置為數據
  43.         P0=dat;//送入數據
  44.         delay(1);
  45.         en=1; //en置高電平,為制造下降沿做準備
  46.         delay(1);
  47.         en=0; //en由高變低,產生下降沿,液晶執行命令
  48. }


  49. void lcd_init()//***液晶初始化函數****
  50. {
  51.         uchar a;
  52.         write_1602com(0x38);//設置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數據
  53.         write_1602com(0x0c);//開顯示不顯示光標
  54.         write_1602com(0x06);//整屏不移動,光標自動右移
  55.         write_1602com(0x01);//清顯示

  56.         write_1602com(0x80);//顯示固定符號從第一行第1個位置之后開始顯示
  57.         for(a=0;a<16;a++)
  58.         {
  59.                 write_1602dat(tab1[a]);//向液晶屏寫固定符號部分
  60.         }
  61.         write_1602com(0x80+0x40);//顯示固定符號寫入位置,從第2個位置后開始顯示
  62.         for(a=0;a<16;a++)
  63.         {
  64.                 write_1602dat(tab2[a]);//寫顯示固定符號
  65.         }
  66. }

  67. void display()
  68. {
  69.                 //                        1km/h=100m/0.1h                   360s
  70.                 //                        10km/h=100m/0.01h          36s
  71.                 //                        100km/h=100m/0.001h  3.6s

  72.                 write_1602com(0x80+9);
  73.                 if(Velocity/100==0)
  74.                 write_1602dat(' ');
  75.                 else
  76.                 write_1602dat(0x30+Velocity/100);
  77.                 if((Velocity/100+Velocity%100/10)==0)
  78.                 write_1602dat(' ');
  79.                 else
  80.                 write_1602dat(0x30+Velocity%100/10);
  81.                 write_1602dat(0x30+Velocity%10);//數字+30得到該數字的LCD1602顯示碼

  82.                 write_1602com(0x80+0x40+8);
  83.                 write_1602dat(0x30+Mileage/1000000);//數字+30得到該數字的LCD1602顯示碼
  84.                 write_1602dat(0x30+Mileage%1000000/100000);//數字+30得到該數字的LCD1602顯示碼
  85.                 write_1602com(0x80+0x40+11);
  86.                 write_1602dat(0x30+Mileage%100000/10000);//數字+30得到該數字的LCD1602顯示碼
  87.                 write_1602dat(0x30+Mileage%10000/1000);//數字+30得到該數字的LCD1602顯示碼
  88.                
  89.                 write_1602dat(0x30+Mileage%1000/100);//數字+30得到該數字的LCD1602顯示碼
  90. }

  91. void main()
  92. {
  93.         init();
  94.         lcd_init();
  95.         while(1)
  96.         {
  97.                 display();
  98.         }
  99. }

  100. void EXINT0() interrupt 0
  101. {
  102.         count++;
  103. }

  104. void time0() interrupt 1
  105. {
  106.         uchar m;
  107.         TH0=0x3c;
  108.         TL0=0xb0;         //50ms
  109.         m++;
  110.         if(m>=10)
  111.         {
  112.                 m=0;
  113.                 Mileage=Mileage+Velocity*500/36;                 //里程m=速度km/h*1000*5/3.6
  114.                 Velocity=count/5;//將100ms內的脈沖數
  115.                 count=0;               


  116. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

下載:
仿真圖.zip (3.65 MB, 下載次數: 118)




作者: ATKL    時間: 2018-5-9 17:02
請問測速程序怎么理解
作者: 838245178    時間: 2018-5-14 11:56
為什么我在proteus上運行出錯,就是down下來直接運行的
作者: 你大哥哥哥    時間: 2018-6-28 17:21
很好的程序。!
作者: 八一八一    時間: 2018-7-18 10:19
ATKL 發表于 2018-5-9 17:02
請問測速程序怎么理解

思路:定時器定時1S ,外部中斷檢測脈沖,定時器中斷,計算脈沖量。
作者: netyou    時間: 2019-7-26 16:12
有沒有原理圖、
作者: 2844304776    時間: 2020-4-18 22:43
學姐太棒了!




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 成人二区| 日韩一区二区三区四区五区 | 欧美日韩在线观看视频 | 国产精品一区一区三区 | 亚洲一区二区在线视频 | 国产激情在线 | 免费色网址 | 亚州精品天堂中文字幕 | 国产高清在线精品一区二区三区 | 日韩欧美在线观看 | 九九久久精品 | 国产在视频一区二区三区吞精 | 韩日精品在线观看 | 精品av| 日韩欧美在线观看一区 | 午夜在线免费观看 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 一级黄色日本片 | 国产999精品久久久久久绿帽 | 欧美精品乱码久久久久久按摩 | 国产一级一级毛片 | 亚洲高清一区二区三区 | 91一区二区三区 | 一区二区三区四区免费在线观看 | www.97zyz.com | 日韩影音| 精品无码久久久久国产 | 夜夜久久| 天天噜天天干 | 欧美日韩免费在线 | 99色视频| 亚洲精品久久久久久宅男 | 国色天香综合网 | 欧美日韩不卡合集视频 | 成人欧美一区二区三区黑人孕妇 | 久久久久91 | 国产精彩视频在线观看 | 一级片免费在线观看 | 亚洲国产一区二区三区 | 欧美1页 | 国产香蕉视频在线播放 |