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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

簡易自行車里程計仿真圖及單片機源程序

  [復制鏈接]
跳轉到指定樓層
樓主
簡易自行車里程計仿真圖


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

單片機源程序:
  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)



評分

參與人數 1黑幣 +5 收起 理由
我的天1 + 5 很給力!

查看全部評分

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

使用道具 舉報

沙發
ID:311504 發表于 2018-5-9 17:02 | 只看該作者
請問測速程序怎么理解
回復

使用道具 舉報

板凳
ID:324958 發表于 2018-5-14 11:56 | 只看該作者
為什么我在proteus上運行出錯,就是down下來直接運行的
回復

使用道具 舉報

地板
ID:360292 發表于 2018-6-28 17:21 | 只看該作者
很好的程序!!!
回復

使用道具 舉報

5#
ID:197418 發表于 2018-7-18 10:19 | 只看該作者
ATKL 發表于 2018-5-9 17:02
請問測速程序怎么理解

思路:定時器定時1S ,外部中斷檢測脈沖,定時器中斷,計算脈沖量。
回復

使用道具 舉報

6#
ID:578499 發表于 2019-7-26 16:12 | 只看該作者
有沒有原理圖、
回復

使用道具 舉報

7#
ID:731979 發表于 2020-4-18 22:43 | 只看該作者
學姐太棒了!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费精品视频在线观看 | 日日干日日操 | 国产欧美日韩精品在线观看 | 天天色综网 | 久久久久久网站 | 久久福利电影 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 91麻豆精品国产91久久久更新资源速度超快 | 亚洲一二三区免费 | 久久99视频这里只有精品 | 精品久久久久久18免费网站 | 成人精品在线视频 | av福利网站| 午夜免费电影院 | 日本免费一区二区三区四区 | 欧美一区二区三区 | 久久精品—区二区三区 | 香蕉久久网| 97超碰免费| 国产在线一区二区三区 | 日韩在线精品强乱中文字幕 | 精品国产乱码久久久久久闺蜜 | 丁香五月网久久综合 | 久久久久久久电影 | 欧美一级久久 | 天天操网 | av黄色在线 | 午夜欧美 | 色婷婷精品久久二区二区蜜臂av | av中文字幕在线 | 99精品视频一区二区三区 | 黄色网址在线免费观看 | 午夜精品久久久久久不卡欧美一级 | 欧美久久精品一级黑人c片 91免费在线视频 | 国产精品女人久久久 | 欧美日韩一区二区三区四区 | 亚洲综合视频 | av网站免费在线观看 | 天天人人精品 | 亚洲一区二区在线电影 | 日本一区二区不卡视频 |