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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機出租車計程計費器仿真及程序設計(12864顯示)

[復制鏈接]
跳轉到指定樓層
樓主
這是我做的一個51單片機設計,使用18b20實現溫度采集,使用HMC5883實現磁場的檢測,可以判斷準確的方位,使用ds1302制作了萬年歷,并可以測速并累計里程,所有數據使用12864顯示,附件里包含源碼及仿真。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載):




單片機源程序如下:
  1. #include<reg52.h>
  2. #include"lcd12864.h"
  3. #include"ds18b20b.h"
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. typedef unsigned char UINT8;
  7. typedef unsigned int  UINT16;
  8. #define GPIO_DIG P0
  9. sbit LSA=P2^2;
  10. sbit LSB=P2^3;
  11. sbit LSC=P2^4;

  12. //unsigned char code DIG_CODE[]={
  13. //0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  14. ////0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼
  15. unsigned char code licheng_CharCode[]="里程:";
  16. unsigned char code jine_CharCode[]="金額:";
  17. unsigned char code qibujia_CharCode[]="起步價:";
  18. unsigned char code shijian_CharCode[]="時間:";
  19. unsigned char code shizi_CharCode[]="0123456789";
  20. unsigned char code wuyuan_CharCode[]="元";
  21. unsigned char code fen_CharCode[]="分";
  22. unsigned char code mi_CharCode[]="米";
  23. unsigned char code qianmi_CharCode[]="千米";
  24. unsigned char code dian_CharCode[]=".";
  25. unsigned char code error_CharCode[]="無法顯示";
  26. unsigned char code erdianwu_CharCode[]="二點六千";
  27. unsigned char code liuyuan_CharCode[]="六";
  28. unsigned char code wu_CharCode[]="五";
  29. unsigned char code shi_CharCode[]="十一";
  30. unsigned char code shiwu_CharCode[]="十五";
  31. uint num,num2,_10ms,_1s,_1m,_1h,flag,quan,quan2,distancex,distancex2,distancex3;

  32. void    delayms(unsigned int n)            //延時10×n毫秒程序
  33.                    {
  34.                       unsigned int i,j;
  35.                       for(i=0;i<n;i++)
  36.                          for(j=0;j<10;j++);
  37.                    }

  38. /*******************************************************************************
  39. * 函 數 名         : TimerConfiguration
  40. * 函數功能                   : 定時器初始化
  41. * 輸    入         : 無
  42. * 輸    出         : 無
  43. *******************************************************************************/
  44. void TimerConfiguration()
  45. {
  46.         TMOD=0x51;//選擇為定時器0模式,工作方式2,僅用TRX打開啟動。

  47.                 TH0=0XD8;        //給定時器賦初值,定時100us
  48.         TL0=0XF0;       
  49.         ET0=1;//打開定時器0中斷允許
  50.         EA=1;//打開總中斷
  51.         TR0=1;//打開定時器                       
  52. }

  53. /*******************************************************************************
  54. * 函 數 名         : DigDisplay
  55. * 函數功能                   : 使用數碼管顯示
  56. * 輸    入         : 無
  57. * 輸    出         : 無
  58. *******************************************************************************/
  59. //void DigDisplay(uchar wei,uchar duan)
  60. //{
  61. //        unsigned char i,j;
  62. ////        for(i=0;i<8;i++)
  63. ////        {
  64. ////                GPIO_DIG=0x00;//消隱
  65. //                switch(wei)         //位選,選擇點亮的數碼管,
  66. //                {
  67. //                        case(0):
  68. //                                LSA=0;LSB=0;LSC=0; break;
  69. //                        case(1):
  70. //                                LSA=1;LSB=0;LSC=0; break;
  71. //                        case(2):
  72. //                                LSA=0;LSB=1;LSC=0; break;
  73. //                        case(3):
  74. //                                LSA=1;LSB=1;LSC=0; break;
  75. //                        case(4):
  76. //                                LSA=0;LSB=0;LSC=1; break;
  77. //                        case(5):
  78. //                                LSA=1;LSB=0;LSC=1; break;
  79. //                        case(6):
  80. //                                LSA=0;LSB=1;LSC=1; break;
  81. //                        case(7):
  82. //                                LSA=1;LSB=1;LSC=1; break;       
  83. //                }
  84. //                GPIO_DIG=DIG_CODE[duan];
  85. ////                duan++;
  86. //                if(duan>7)
  87. //                        duan=0;
  88. ////                j=10;                                                 //掃描間隔時間設定
  89. ////                while(j--)
  90. ////                        Delay50us();       
  91. ////                GPIO_DIG=0x00;//消隱
  92. ////        }
  93. //}

  94. void exit_init()
  95. {
  96.         TMOD=0x50;
  97.         TH1=0;
  98.         TL1=0;
  99.         TR1=1;
  100. }

  101. uint read()
  102. {
  103.         uchar t1,th1,th2;
  104.         uint val;
  105.         while(1)
  106.         {
  107.         th1=TH1;
  108.         t1=TL1;
  109.         th2=TH1;
  110.         if(th1==th2)  break;
  111.         }
  112.         val=th1*256+t1;
  113.         return val;
  114. }

  115. void time_display()
  116. {
  117.         uint a=0,b,c,price,find_price;          
  118.           LCD12864_SetWindow(3, 6);
  119.         LCD12864_WriteData(shizi_CharCode[_1s/10]);
  120.         LCD12864_SetWindow(3, 7);
  121.         LCD12864_WriteData(shizi_CharCode[_1s%10]);
  122.         LCD12864_SetWindow(3, 3);
  123.         LCD12864_WriteData(shizi_CharCode[_1m/10]);
  124.         LCD12864_SetWindow(3, 4);
  125.         LCD12864_WriteData(shizi_CharCode[_1m%10]);
  126.                 LCD12864_SetWindow(3, 5);
  127.                 while(fen_CharCode[a]!='\0')
  128.                 {
  129.                         LCD12864_WriteData(fen_CharCode[a]);
  130.                         a++;
  131.                 }
  132.                          if(distancex<10000)
  133.                          {
  134.                                 LCD12864_SetWindow(0, 3);
  135.                                 LCD12864_WriteData(shizi_CharCode[distancex/1000]);
  136.                                 LCD12864_SetWindow(0, 4);
  137.                                 LCD12864_WriteData(shizi_CharCode[distancex%1000/100]);
  138.                                 LCD12864_SetWindow(0, 5);
  139.                                 LCD12864_WriteData(shizi_CharCode[distancex%1000%100/10]);
  140.                                 LCD12864_SetWindow(0, 6);
  141.                                 LCD12864_WriteData(shizi_CharCode[distancex%1000%100%10]);
  142.                                 LCD12864_SetWindow(0, 7);
  143.                                 while(mi_CharCode[b]!='\0')
  144.                                 {
  145.                                         LCD12864_WriteData(mi_CharCode[b]);
  146.                                         b++;
  147.                                 }
  148.                          }
  149.                          else
  150.                         {
  151.                                 LCD12864_SetWindow(0, 3);
  152.                                 while(error_CharCode[c]!='\0')
  153.                                 {
  154.                                         LCD12864_WriteData(error_CharCode[c]);
  155.                                         c++;
  156.                                 }
  157.                         }
  158.                
  159.                 if(distancex<=5)
  160.                 {
  161.                         LCD12864_SetWindow(1, 3);
  162.                         LCD12864_WriteData(shizi_CharCode[0]);       
  163.                         LCD12864_SetWindow(1, 4);
  164.                         LCD12864_WriteData(shizi_CharCode[0]);       
  165.                         LCD12864_SetWindow(1, 5);
  166.                         LCD12864_WriteData(shizi_CharCode[2]);       
  167.                 }
  168.                 else
  169.                         {
  170.                                 price=distancex-5;
  171.                                 price=price/10;
  172.                                 find_price=1*price+2;
  173.                                 LCD12864_SetWindow(1, 5);
  174.                                 LCD12864_WriteData(shizi_CharCode[find_price%100%10]);       
  175.                                 LCD12864_SetWindow(1, 4);
  176.                                 LCD12864_WriteData(shizi_CharCode[find_price%100/10]);       
  177.                                 LCD12864_SetWindow(1, 3);
  178.                                 LCD12864_WriteData(shizi_CharCode[find_price/100]);       
  179.                         }
  180.                         if(        distancex>9999)
  181.                         {
  182.                                 LCD12864_SetWindow(0, 3);
  183.                                 while(error_CharCode[c]!='\0')
  184.                                 {
  185.                                         LCD12864_WriteData(error_CharCode[c]);
  186.                                         c++;
  187.                                 }
  188.                         }

  189.                
  190.        



  191. //        LCD12864_SetWindow(3, 5);
  192. //        LCD12864_WriteData(shizi_CharCode[_1s%10]);
  193. //        LCD12864_SetWindow(3, 5);
  194. //        LCD12864_WriteData(shizi_CharCode[_1s%10]);

  195. }

  196. void distance()
  197. {
  198.         distancex=quan*0.222+quan2*65535*0.222;
  199.        
  200. }

  201. void main()
  202. {
  203.         unsigned char i,j,k,l,m,p,q,r,s,t,u;
  204.        
  205.          exit_init();
  206.          TimerConfiguration();
  207.         LCD12864_Init();
  208.                 LCD12864_SetWindow(0, 0);
  209. //                LCD12864_WriteData(licheng_CharCode[i]);
  210.                 while(licheng_CharCode[i]!='\0')
  211.                 {
  212.                         LCD12864_WriteData(licheng_CharCode[i]);
  213.                         i++;
  214.                 }
  215.                 LCD12864_SetWindow(1, 0);
  216.                 while(jine_CharCode[j]!='\0')
  217.                 {
  218.                         LCD12864_WriteData(jine_CharCode[j]);
  219.                         j++;
  220.                 }
  221.                 LCD12864_SetWindow(2, 0);
  222.                 while(qibujia_CharCode[k]!='\0')
  223.                 {
  224.                         LCD12864_WriteData(qibujia_CharCode[k]);
  225.                         k++;
  226.                 }
  227.                 LCD12864_SetWindow(2, 5);
  228.                 LCD12864_WriteData(shizi_CharCode[5]);
  229.                 LCD12864_SetWindow(2, 4);
  230.                 LCD12864_WriteData(shizi_CharCode[0]);
  231.                 LCD12864_SetWindow(2, 6);
  232.                 while(wuyuan_CharCode[m]!='\0')
  233.                 {
  234.                         LCD12864_WriteData(wuyuan_CharCode[m]);
  235.                         m++;
  236.                 }
  237.                         LCD12864_SetWindow(1, 6);
  238.                 while(wuyuan_CharCode[p]!='\0')
  239.                 {
  240.                         LCD12864_WriteData(wuyuan_CharCode[p]);
  241.                         p++;
  242.                 }
  243.        

  244.                 LCD12864_SetWindow(3, 0);
  245.                 while(shijian_CharCode[l]!='\0')
  246.                 {
  247.                         LCD12864_WriteData(shijian_CharCode[l]);
  248.                         l++;
  249.                 }

  250.                         LCD12864_SetWindow(0, 3);
  251.                 while(erdianwu_CharCode[q]!='\0')
  252.                 {
  253.                         LCD12864_WriteData(erdianwu_CharCode[q]);
  254.                         q++;
  255.                 }
  256. ……………………

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

所有資料51hei提供下載:
12864計程計費.zip (1.02 MB, 下載次數: 81)


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

使用道具 舉報

沙發
ID:143986 發表于 2017-10-7 17:54 | 只看該作者
哪個引腳接電機計數原件
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级日批片| 亚洲三级av | 欧美一级二级三级 | 激情91 | 欧美一区二区免费在线 | 中文字幕乱码一区二区三区 | 国产精品九九九 | 国产视频1区| 国产亚洲一区二区三区 | 国产欧美精品区一区二区三区 | 日本不卡免费新一二三区 | 2019天天操| 精品综合久久久 | 岛国av一区二区 | 就操在线 | 一级毛片视频 | 国产精品视频免费观看 | 青青草网 | 一级大片| 亚洲国产一区视频 | 欧美性生交大片免费 | 一区二区免费在线观看 | 婷婷在线免费 | 国产精品精品 | 国产成人精品综合 | 国产一区二区电影 | 欧美一区二区在线 | 色性av | 国产精品爱久久久久久久 | av网站在线免费观看 | 国产一级电影在线观看 | 国产日韩视频 | 天天搞夜夜操 | 中文字幕第一页在线 | 五月婷婷亚洲 | 性视频网 | 国产在线精品一区二区三区 | 在线不卡 | 日本精品视频 | 97精品国产97久久久久久免费 | 欧美国产91|