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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機自行車測速系統的設計 12232液晶顯示

[復制鏈接]
跳轉到指定樓層
樓主
主要測量速度、里程、行駛時間及溫度。利用的是STC89C52、霍爾傳感器、矩陣鍵盤。

電路原理圖如下:

單片機源程序:
  1. #include <REGX52.H>
  2. #include "12232.h"
  3. #include "stc_eep.h"

  4. sbit LCD_bk = P2^4;
  5. sbit KEY1 = P1^3;
  6. sbit KEY2 = P1^4;
  7. sbit KEY3 = P1^5;

  8. volatile unsigned int t_counter=0;
  9. volatile unsigned char int_flag=0,t0_flag=0;

  10. void t0_srv(void) interrupt 1 using 1
  11. {
  12.         TR0 = 0;
  13.         ET0 = 0;

  14.         t_counter++;
  15.         t0_flag = 1;

  16.         if(t_counter<5)
  17.         {
  18.                 IE0 = 0;
  19.         }
  20.         if(t_counter==5)
  21.         {
  22.                 EX0 = 1;         //50ms后開int0中斷, 防抖動.
  23.         }

  24.         TH0 = 216;                 //(65536-10000)/256
  25.         //TL0 = 240;                 //(65536-10000)%256
  26.         TL0 = 255;

  27.         TR0 = 1;
  28.         ET0 = 1;
  29. }

  30. void int0_srv(void) interrupt 0        using 0
  31. {
  32.         EX0 = 0;
  33.         int_flag = 1;
  34. }

  35. void delay_nms(unsigned int count)
  36. {
  37.         unsigned int i,j;
  38.         for(i=0;i<count;i++)
  39.         for(j=0;j<45;j++);        
  40. }

  41. void main(void)
  42. {
  43.         unsigned char buff[]=(" 0.000km");
  44.         unsigned char buff_2[]=(" 000.0km");
  45.         unsigned char buff_1[]=("11");
  46.         unsigned char sec=0,min=0,hour=0,counter=0;
  47.         unsigned char time_buff[]=("00:00:00");
  48.         unsigned int temp=0;
  49.         unsigned int speed=0;
  50.         unsigned int once_counter=0;        //單次騎行計數
  51.         unsigned char all_counter_1,all_counter_2,all_counter_3;
  52.         unsigned long all_counter=0,temp1=0;

  53.         EA  = 0;               
  54.         IT0 = 1;                //int0 下降沿中斷
  55.         EX0 = 1;                //允許外部中斷0
  56.         TMOD = 0x09;        //timer0 工作方式1 10ms溢出
  57.         TH0 = 216;                 //(65536-10000)/256
  58.         TL0 = 240;                 //(65536-10000)%256
  59.         TR0 = 1;
  60.         ET0 = 1;
  61.         EA         = 1;
  62.                         
  63.     LCD_init();

  64.         LCD_bk = 0;
  65.     clrscr(0x00);

  66.     //drawascii(10,0,"speed meater v0.1");
  67. //----------------------------------------------
  68. //--大字符顯示格式------------------------------
  69. //*
  70.         draw_very_big_ascii(0,"12");
  71.         draw_big_ascii(47,2,".3");
  72.         drawascii(73,3," KM/H");
  73.         drawascii(73,0,"00.000km");
  74.         drawascii(73,1,"0000.0km");
  75.         drawascii(73,2,"00:00:00");
  76. //*/
  77. //----------------------------------------------
  78. //--小字符顯示格式------------------------------
  79. /*
  80.         drawascii(0,0,"SPD 12.3KM/H");
  81.         drawascii(48,0," KM/H");
  82.         drawascii(0,2,"max 29.8 | avg 13.2 ");
  83.         drawascii(0,3,"12.345KM | 1234.56KM");
  84. */
  85.         //STC_BYTE_program(0x20,0x20,0x1f);

  86. //        if(STC_BYTE_read(0x20,0x20)==0x1f)
  87. //        P1=0xf0;
  88. /*
  89. STC_SECTOR_erase(0x20,0x00);

  90. STC_BYTE_program(0x20,0x21,00);
  91. STC_BYTE_program(0x20,0x22,00);
  92. STC_BYTE_program(0x20,0x23,00);
  93. */

  94.                 if((KEY1 == 0)&&(KEY2 == 0))
  95.                 {
  96.                         delay_nms(20);
  97.                         if((KEY1 == 0)&&(KEY2 == 0))
  98.                         {
  99.                                 drawascii(73,3,"CLEAR");
  100.                                 while((KEY1 == 0)&&(KEY2 == 0));
  101.                                 STC_SECTOR_erase(0x20,0x00);
  102.                                 STC_BYTE_program(0x20,0x21,0);
  103.                                 STC_BYTE_program(0x20,0x22,0);
  104.                                 STC_BYTE_program(0x20,0x23,0);

  105.                                 delay_nms(4000);
  106.                                 drawascii(73,3," KM/H  ");
  107.                         }
  108.                 }

  109.         all_counter_1 = STC_BYTE_read(0x20,0x21);
  110.         all_counter_2 = STC_BYTE_read(0x20,0x22);
  111.         all_counter_3 = STC_BYTE_read(0x20,0x23);

  112.         all_counter = (unsigned long)all_counter_1<<16 | (unsigned long)all_counter_2<<8 | (unsigned long)all_counter_3 ;


  113.                         temp1 = all_counter *2;               
  114.                         buff_2[0] = temp1/1000000 + '0';
  115.                         buff_2[1] = temp1%1000000/100000 + '0';         
  116.                         buff_2[2] = temp1%100000/10000 + '0';
  117.                         buff_2[3] = temp1%10000/1000 + '0';
  118.                         buff_2[5] = temp1%1000/100 + '0';
  119.                         drawascii(73,1,buff_2);

  120.     while(1)
  121.         {
  122.                 if(t0_flag == 1)
  123.                 {
  124.                         t0_flag = 0;
  125.                         counter++;
  126.                         if(counter == 100)
  127.                         {
  128.                                 counter = 0;
  129.                                 sec ++;
  130.                                 if(sec == 60)
  131.                                 {
  132.                                         sec = 0;
  133.                                         min ++;
  134.                                         if(min == 60)
  135.                                         {
  136.                                                 min = 0;
  137.                                                 hour ++;
  138.                                         }
  139.                                 }
  140.                                 time_buff[0]=hour/10+'0';
  141.                                 time_buff[1]=hour%10+'0';
  142.                                 time_buff[3]=min/10+'0';
  143.                                 time_buff[4]=min%10+'0';
  144.                                 time_buff[6]=sec/10+'0';
  145.                                 time_buff[7]=sec%10+'0';
  146.                                 drawascii(73,2,time_buff);
  147.                         }
  148.                 }

  149.                 if(t_counter>1000)
  150.                 {
  151.                         t_counter = 0;
  152.                         //drawascii(0,1,"time out");
  153.                 }
  154.                 if(KEY3 == 0)
  155.                 {
  156.                         delay_nms(20);
  157.                         if(KEY3 == 0)
  158.                         {
  159.                                 while(KEY3==0);
  160.                                 LCD_bk = !LCD_bk;
  161.                         }
  162.                 }
  163.                 if(KEY1 == 0)
  164.                 {
  165.                         delay_nms(20);
  166.                         if(KEY1 == 0)
  167.                         {
  168.                                 while(KEY1==0);
  169.                                 drawascii(73,3,"WRITED");

  170.                                 STC_SECTOR_erase(0x20,0x00);
  171.                                 STC_BYTE_program(0x20,0x21,(unsigned char)all_counter>>16);
  172.                                 STC_BYTE_program(0x20,0x22,(unsigned char)all_counter>>8);
  173.                                 STC_BYTE_program(0x20,0x23,(unsigned char)all_counter);

  174.                                 delay_nms(2000);
  175.                                 drawascii(73,3," KM/H  ");
  176.                         }
  177.                 }
  178.                         
  179.                 if(int_flag==1)
  180.                 {
  181.                         int_flag = 0;
  182.                         temp = t_counter;
  183.                         t_counter = 0;
  184.                         /*
  185.                         buff[0] = temp/1000 + '0';
  186.                         buff[1] = temp%1000/100 + '0';         
  187.                         buff[2] = temp%100/10 + '0';
  188.                         buff[3] = temp%10 + '0';
  189.                         //drawascii(0,1,buff);
  190.                         */

  191.                         speed = 7351/temp;                                                                           //顯示速度
  192.                         buff_1[0] = speed/100 + '0';
  193.                         buff_1[1] = speed%100/10 + '0';         
  194.                         draw_very_big_ascii(0,buff_1);
  195.                         buff_1[0] = '.';
  196.                         buff_1[1] = speed%10 + '0';         
  197.                         draw_big_ascii(47,2,buff_1);

  198.                         once_counter++;        
  199.                         all_counter++;                                                                                    //顯示距離
  200.                         temp = (unsigned long)once_counter * 2040 /1000;                //輪胎周長2040mm
  201.                         buff[0] = temp/10000 + '0';
  202.                         buff[1] = temp%10000/1000 + '0';         
  203.                         buff[3] = temp%1000/100 + '0';
  204.                         buff[4] = temp%100/10 + '0';
  205.                         buff[5] = temp%10 + '0';
  206.                         drawascii(73,0,buff);

  207.                         temp1 = all_counter *2;               
  208.                         buff_2[0] = temp1/1000000 + '0';
  209.                         buff_2[1] = temp1%1000000/100000 + '0';         
  210.                         buff_2[2] = temp1%100000/10000 + '0';
  211.                         buff_2[3] = temp1%10000/1000 + '0';
  212.                         buff_2[5] = temp1%1000/100 + '0';
  213.                         drawascii(73,1,buff_2);
  214.                 }
  215.         }


  216. }

復制代碼
全部資料51hei下載地址:
自行車測速(霍爾).rar (90.44 KB, 下載次數: 84)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:489118 發表于 2019-3-12 12:03 | 只看該作者
感謝分享
回復

使用道具 舉報

板凳
ID:98992 發表于 2019-12-6 16:19 | 只看該作者
我也想玩玩看 怎么弄的
回復

使用道具 舉報

地板
ID:65237 發表于 2020-6-17 20:06 | 只看該作者
謝謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美日韩成人在线 | 国产精品美女一区二区 | 国产黄色精品在线观看 | 精品亚洲一区二区三区 | 欧美电影免费观看高清 | 欧美一级久久 | 久久久久久久久淑女av国产精品 | 亚洲成人播放器 | 午夜国产一级 | 国产精品视频一 | 国产精品成av人在线视午夜片 | 精品国产鲁一鲁一区二区张丽 | 国产精品久久久久aaaa樱花 | www.夜夜骑.com | 伊人网在线播放 | 91丨九色丨国产在线 | 日本久久久影视 | 亚洲夜夜爽 | 久久综合伊人一区二区三 | 日韩国产在线 | 久久88 | 伊人伊成久久人综合网站 | 国产欧美一级二级三级在线视频 | 日韩在线91 | 亚洲一区二区三区免费 | 久久久久久久久久久久亚洲 | 日本三级日产三级国产三级 | 久久久久国产 | 亚洲网站免费看 | 羞羞视频免费观看 | 久久中文字幕在线 | 日本黄色免费大片 | 久久久久se | 免费国产一区二区 | 久久亚洲国产精品 | 精品免费在线 | 97在线观视频免费观看 | 欧美日韩精品久久久免费观看 | 欧美黑人体内she精在线观看 | 黄色亚洲网站 | 天天操天天插天天干 |