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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 16439|回復(fù): 17
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)出租車計(jì)價(jià)器電路原理圖與源程序分享

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這是我做的一個(gè)車租車計(jì)費(fèi)作品,用了兩個(gè)星期,附件里包含作品源代碼和芯片資料,清大家多多指教

電路原理圖如下:




單片機(jī)源程序如下:
  1. /*************************************************************
  2.                       多功能出租車計(jì)價(jià)系統(tǒng)

  3. 補(bǔ)充說(shuō)明:
  4. ***************************************************************/
  5. #include<reg52.h>                 //頭文件
  6. #include<LCD1602.h>
  7. #include<AT24C02.h>
  8. #include<INTERRUPT.h>
  9. #include<SC8065.h>
  10. #include<DS1302.h>

  11. /*****************燈、蜂鳴器、按鍵引腳定義*******************/
  12. sbit led       =P3^0;         //紅色LED燈
  13. sbit led2      =P3^1;         //綠色LED燈

  14. sbit key_start =P1^0;         //開(kāi)始/結(jié)束計(jì)價(jià)
  15. sbit key_Wait  =P1^1;         //電機(jī)開(kāi)始/結(jié)束
  16. sbit key_set   =P1^2;         //設(shè)置
  17. sbit key_jia   =P1^3;         //加值
  18. sbit key_jian  =P1^4;         //減值

  19. /************************變量定義***********************/
  20. uint start_price;             //起步價(jià)
  21. uint white_price;        //白天單價(jià)
  22. uint white_Wait;             //白天等待超10分鐘后每分鐘價(jià)錢。

  23. bit start;                                                 //開(kāi)始計(jì)價(jià)標(biāo)志,=0非計(jì)價(jià)模式,=1計(jì)價(jià)模式
  24. double price1;                                         //應(yīng)收總價(jià)錢(帶小數(shù))
  25. uint mil,Wait,price2;                 //里程數(shù)、等待時(shí)間、總價(jià)
  26. uchar set_f;                                         //設(shè)置選擇標(biāo)記,=0未設(shè)置,=1設(shè)置起步價(jià),=2設(shè)置白天公里價(jià),=3設(shè)置時(shí),=4設(shè)置分,=5設(shè)置秒

  27. bit strat_f;                                         //初始界面顯示標(biāo)志,=0顯示初始界面,=1可能計(jì)價(jià)、設(shè)置、總價(jià)顯示
  28. uchar num;                                                 //循環(huán)計(jì)數(shù)變量
  29. bit moto_f=0;                    //電機(jī)控制標(biāo)志,=0關(guān)閉電機(jī),1打開(kāi)電機(jī)

  30. /********************************************************
  31. 函數(shù)名稱:void baojia()
  32. 函數(shù)作用:乘坐結(jié)束進(jìn)行報(bào)價(jià)
  33. 參數(shù)說(shuō)明:
  34. ********************************************************/
  35. void baojia()
  36. {
  37.         uint temp;
  38.         SC_Speech(1);                           //先播放一次空的內(nèi)容,防止語(yǔ)音混亂

  39.         //以下里程播報(bào)
  40.         SC_Speech(55);                           //播放【本次】
  41.         SC_Speech(56);                           //播放【行程】

  42.         if(mil>=1000)                           //里程【大于100KM】
  43.         {
  44.                 SC_Speech(10+mil/1000);        //播放  里程的百位
  45.                 SC_Speech(21);                       //播放【百】
  46.         }
  47.         if(mil>=100)                           //里程【大于10KM】
  48.         {
  49.                 if(mil%1000/100!=0)                   //如果  里程十位  不為0
  50.                 {
  51.                         if(mil<1000&&mil%1000/100==1);//只有十幾的時(shí)候不用報(bào)【一】
  52.                         else
  53.                                 SC_Speech(10+mil%1000/100);//播放  里程的十位
  54.                         SC_Speech(20);                   //播放【十】
  55.                 }
  56.                 else                                                   //否則  里程十位  為0
  57.                 {
  58.                         if(mil%100/10!=0)                   //如果  里程個(gè)位  不為0
  59.                                 SC_Speech(10);               //播放【零】
  60.                 }
  61.         }
  62.         if(mil>=10)                                                   //里程【大于1KM】
  63.         {
  64.                 if(mil%100/10!=0)                           //如果  里程個(gè)位  不為0
  65.                         SC_Speech(10+mil%100/10);  //播放  里程的個(gè)位
  66.         }
  67.         else
  68.                 SC_Speech(10);                       //播放【零】

  69.         if(mil%10!=0)                                           //如果  里程小數(shù)  不為0
  70.         {
  71.                 SC_Speech(24);                       //播放【點(diǎn)】
  72.                 SC_Speech(10+mil%10);          //播放  里程的小數(shù)位
  73.         }
  74.         SC_Speech(4);                           //播放【千米】

  75.         
  76.         //以下價(jià)格播報(bào)                                                           
  77.         temp=price2/10;                                          
  78.         SC_Speech(58);                           //播放【共計(jì)】

  79.         if(temp>=1000)                                           //總價(jià)【大于100元】
  80.         {
  81.                 SC_Speech(10+temp/1000);       //播放  總價(jià)的百位
  82.                 SC_Speech(21);                       //播放【百】
  83.         }
  84.         if(temp>=100)                                           //總價(jià)【大于10元】
  85.         {
  86.                 if(temp%1000/100!=0)                   //如果  總價(jià)十位  不為0
  87.                 {
  88.                         if(temp<1000&&temp%1000/100==1);//只有十幾的時(shí)候不用報(bào)【一】
  89.                         else
  90.                                 SC_Speech(10+temp%1000/100);//播放  總價(jià)的十位
  91.                         SC_Speech(20);                   //播放【十】
  92.                 }
  93.                 else                                                   //否則  總價(jià)十位  為0
  94.                 {
  95.                         if(temp%100/10!=0)                   //如果  總價(jià)個(gè)位  不為0
  96.                                 SC_Speech(10);               //播放【零】
  97.                 }
  98.         }
  99.         if(temp>=10)                                           //總價(jià)【大于1元】
  100.         {
  101.                 if(temp%100/10!=0)                           //如果  總價(jià)個(gè)位  不為0
  102.                         SC_Speech(10+temp%100/10); //播放  總價(jià)的個(gè)位
  103.         }
  104.         else
  105.                 SC_Speech(10);                       //播放【零】

  106.         if(temp%10==0)                                           //如果  總價(jià)小數(shù)位  為0
  107.         {
  108.                 SC_Speech(6);                       //播放【元】
  109.                 SC_Speech(38);                       //播放【整】
  110.         }
  111.         else                                                           //否則  總價(jià)小數(shù)位  不為0
  112.         {
  113.                 SC_Speech(24);                       //播放【點(diǎn)】
  114.                 SC_Speech(10+temp%10);               //播放  總價(jià)的小數(shù)位
  115.                 SC_Speech(6);                       //播放【元】
  116.         }

  117.         SC_Speech(64);                           //播放【謝謝】
  118. }
  119. /********************************************************
  120. 函數(shù)名稱:void display()
  121. 函數(shù)作用:計(jì)價(jià)時(shí)顯示里程、等待時(shí)間函數(shù)
  122. 參數(shù)說(shuō)明:
  123. ********************************************************/
  124. void display()
  125. {
  126.         if(mil_f==1)                 //檢測(cè)到一次信號(hào)
  127.         {
  128.                 mil_f=0;
  129.                 //顯示里程數(shù)
  130.                 //LCD_disp_char(9,1,ASCII[mil/1000]);  最大里程為99.9公里
  131.                 LCD_disp_char(10,1,ASCII[mil%1000/100]);
  132.                 LCD_disp_char(11,1,ASCII[mil%100/10]);
  133.                 LCD_disp_char(12,1,'.');
  134.                 LCD_disp_char(13,1,ASCII[mil%10]);
  135.                 lcd1602_write_character(14,1,"KM");        
  136.                 if(mil>30)                 //里程超3公里
  137.                 {
  138.                         if(time[2]>=7&&time[2]<22)                        //在白天時(shí)間段
  139.                                 price1=price1+white_price;                //計(jì)算白天總價(jià)【white_price/10=公里價(jià)】
  140.                         else                                                                //在晚上時(shí)間段
  141.                                 price1=price1+white_price*1.5;        //計(jì)算晚上總價(jià)        
  142.                 }
  143.                 else                     //小于三公里只收起步價(jià)
  144.                         price1=start_price;                        //計(jì)算總價(jià)【price1/100=總價(jià)】                                                                 
  145.         }
  146.         if(wait_f==1)                 //計(jì)時(shí)一秒到
  147.         {
  148.                 wait_f=0;
  149.                 //顯示等待時(shí)間
  150.                 LCD_disp_char(11,2,ASCII[Wait%3600/60/10]);
  151.                 LCD_disp_char(12,2,ASCII[Wait%3600/60%10]);
  152.                 LCD_disp_char(13,2,':');
  153.                 LCD_disp_char(14,2,ASCII[Wait%60/10]);
  154.                 LCD_disp_char(15,2,ASCII[Wait%60%10]);
  155.                 if(Wait>600&&Wait%60==0)         //等待時(shí)間超過(guò)10分鐘后每1分鐘計(jì)費(fèi)
  156.                         price1=price1+10;        //每分鐘+0.1元                                
  157.         }
  158.         price2=price1;
  159.         //顯示應(yīng)付金額
  160.         LCD_disp_char(0,1,ASCII[price2/10000]);                   //顯示應(yīng)付金額百位
  161.         LCD_disp_char(1,1,ASCII[price2%10000/1000]);   //顯示應(yīng)付金額十位
  162.         LCD_disp_char(2,1,ASCII[price2%1000/100]);           //顯示應(yīng)付金額個(gè)位【price2/100=應(yīng)付金額】
  163.         LCD_disp_char(3,1,'.');
  164.         LCD_disp_char(4,1,ASCII[price2%100/10]);
  165.         LCD_disp_char(5,1,0X01);         //顯示字符¥
  166.         //顯示當(dāng)前時(shí)間
  167.         LCD_disp_char(0,2,ASCII[time[2]/10]);         
  168.         LCD_disp_char(1,2,ASCII[time[2]%10]);
  169.         LCD_disp_char(2,2,':');
  170.         LCD_disp_char(3,2,ASCII[time[1]/10]);
  171.         LCD_disp_char(4,2,ASCII[time[1]%10]);
  172.         LCD_disp_char(5,2,':');
  173.         LCD_disp_char(6,2,ASCII[time[0]/10]);
  174.         LCD_disp_char(7,2,ASCII[time[0]%10]);
  175. }
  176. /********************************************************
  177. 函數(shù)名稱:void display2()
  178. 函數(shù)作用:計(jì)價(jià)結(jié)束時(shí)顯示總價(jià)函數(shù)
  179. 參數(shù)說(shuō)明:
  180. ********************************************************/
  181. void display2()
  182. {
  183.         lcd1602_write_character(3,1,"A total of"); //顯示字符串
  184.         
  185.         LCD_disp_char(5,2,ASCII[price2/10000]);
  186.         LCD_disp_char(6,2,ASCII[price2%10000/1000]);
  187.         LCD_disp_char(7,2,ASCII[price2%1000/100]);
  188.         LCD_disp_char(8,2,'.');
  189.         LCD_disp_char(9,2,ASCII[price2%100/10]);
  190.         LCD_disp_char(10,2,0X01);          //顯示字符¥
  191. }
  192. /********************************************************
  193. 函數(shù)名稱:void display3()
  194. 函數(shù)作用:設(shè)置收費(fèi)參數(shù)時(shí)顯示函數(shù)
  195. 參數(shù)說(shuō)明:
  196. ********************************************************/
  197. void display3()
  198. {
  199.         if(set_f==1) //顯示起步價(jià)的設(shè)置
  200.         {
  201.                  lcd1602_write_character(0,1,"Starting price:");   //顯示字符串
  202.                  LCD_disp_char(6,2,ASCII[start_price%1000000/100000]); //起步價(jià)百位
  203.                  LCD_disp_char(7,2,ASCII[start_price%10000/1000]);        //起步價(jià)十位
  204.                  LCD_disp_char(8,2,ASCII[start_price%1000/100]);   //起步價(jià)個(gè)位
  205.                  LCD_disp_char(9,2,0x01);         //顯示字符¥
  206.         }
  207.         if(set_f==2) //顯示設(shè)置每加一公里價(jià)格
  208.         {
  209.                  lcd1602_write_character(0,1,"Set unit price:");
  210.                  LCD_disp_char(4,2,ASCII[white_price/100]);                  //顯示公里價(jià)十位【white_price/10=公里價(jià)】
  211.                  LCD_disp_char(5,2,ASCII[white_price%100/10]);          //顯示公里價(jià)個(gè)位
  212.                  LCD_disp_char(6,2,'.');
  213.                  LCD_disp_char(7,2,ASCII[white_price%10]);                  //顯示公里價(jià)十分位
  214.                  lcd1602_write_character(9,2,"/KM");
  215.                  lcd1602_write_character(8,2,0x01);          //顯示字符¥
  216.         }
  217. }
  218. /********************************************************
  219. 函數(shù)名稱:void display4(void)
  220. 函數(shù)作用:顯示校準(zhǔn)時(shí)間函數(shù)
  221. 參數(shù)說(shuō)明:
  222. ********************************************************/
  223. void display4()
  224. {
  225.         num++;

  226.         lcd1602_write_character(4,1,"Set Time:");        
  227.         if(num%2==0)        //偶數(shù)次顯示,奇數(shù)次不顯示。這樣就會(huì)有閃爍效果,可以清楚看到當(dāng)前設(shè)置的是哪個(gè)值
  228.         {
  229.                 LCD_disp_char(4,2,ASCII[time[2]/10]); //顯示設(shè)置時(shí)
  230.                 LCD_disp_char(5,2,ASCII[time[2]%10]);
  231.                 LCD_disp_char(6,2,':');  
  232.                 LCD_disp_char(7,2,ASCII[time[1]/10]); //顯示設(shè)置分
  233.                 LCD_disp_char(8,2,ASCII[time[1]%10]);           
  234.                 LCD_disp_char(9,2,':');
  235.                 LCD_disp_char(10,2,ASCII[time[0]/10]);//顯示設(shè)置秒
  236.                 LCD_disp_char(11,2,ASCII[time[0]%10]);
  237.         }        
  238.         else                        //奇數(shù)次不顯示
  239.         {
  240.                 switch(set_f)//根據(jù)當(dāng)前設(shè)置的內(nèi)容,對(duì)應(yīng)位置閃爍
  241.                 {
  242.                         case 3:lcd1602_write_character(4,2,"  "); break;                //按三下設(shè)置時(shí)
  243.                         case 4:lcd1602_write_character(7,2,"  "); break;                //按四下設(shè)置分
  244.                         case 5:lcd1602_write_character(10,2,"  "); break;                //按五下設(shè)置秒
  245.                         default: break;
  246.                 }
  247.         }        
  248. }
  249. /********************************************************
  250. 函數(shù)名稱:void scan(void)
  251. 函數(shù)作用:按鍵檢測(cè)函數(shù)
  252. 參數(shù)說(shuō)明:
  253. ********************************************************/
  254. void scan(void)
  255. {        
  256.         //開(kāi)始/結(jié)束計(jì)價(jià)鍵
  257.         if(key_start==0&&set_f==0)            //在設(shè)置模式下無(wú)效
  258.         {
  259.                 delayms(7);                                        //延時(shí)消抖
  260.                 if(key_start==0)                //再次確認(rèn)開(kāi)始計(jì)價(jià)按鍵按下
  261.                 {
  262.                         LCD_write_command(0x01);//清除屏幕顯示
  263.                         delay_n40us(100);                //延時(shí)等待清除完成
  264.                         start=~start;                        //切換開(kāi)始/結(jié)束計(jì)價(jià)
  265.                         strat_f=1;              //顯示計(jì)價(jià)界面
  266.                         if(start==0)                        //非計(jì)價(jià)模式下,計(jì)價(jià)結(jié)束。計(jì)算價(jià)格
  267.                         {
  268.                                 led=1;                                //關(guān)閉紅色指示燈
  269.                                 led2=0;                                //開(kāi)啟綠色指示燈
  270.                                 EX0=0;                                //關(guān)閉外部中斷
  271.                                 TR1=1;                                //開(kāi)啟定時(shí)20S左右自動(dòng)回到初始界面
  272.                                 moto=1;                                //關(guān)閉電機(jī)轉(zhuǎn)動(dòng)
  273.                                 moto_f=0;                        //關(guān)閉電機(jī)控制標(biāo)志
  274.                                 display2();                //顯示總價(jià)
  275.                                 baojia();                        //播報(bào)行駛里程和總價(jià)
  276.                                 mil=0;                        //清除里程數(shù)
  277.                                 Wait=0;                        //清除等待時(shí)間
  278.                                 TR0=0;                        //關(guān)閉等待計(jì)時(shí)的定時(shí)器
  279.                         }
  280.                         else                                 //計(jì)價(jià)開(kāi)始
  281.                         {
  282.                                 led=0;                         //開(kāi)啟紅色指示燈
  283.                                 led2=1;                                 //關(guān)閉綠色指示燈
  284.                                 TR1=0;                                 //關(guān)閉定時(shí)1
  285.                                 T1_num=0;                         //重置定時(shí)計(jì)數(shù)變量
  286.                                 mil_f=1;                         //計(jì)價(jià)時(shí)顯示里程
  287.                                 wait_f=1;                         //計(jì)價(jià)時(shí)顯示等待時(shí)間

  288.                                 TR0=1;                                 //開(kāi)啟計(jì)等待時(shí)間的定時(shí)器
  289.                                 EX0=0;                                 //此時(shí)電機(jī)未開(kāi)啟,關(guān)閉外部中斷0,不進(jìn)行里程檢測(cè)
  290.                                 moto_f=0;                         //標(biāo)記電機(jī)關(guān)閉
  291.                         }                                
  292.                 }
  293.                 while(!key_start);           //檢測(cè)按鍵松開(kāi)
  294.         }        
  295.         if(start==0)          //非計(jì)價(jià)模式下
  296.         {
  297.                 //設(shè)置鍵
  298.                 if(key_set==0)               //只有在結(jié)束計(jì)價(jià)才有效
  299.                 {
  300.                         delayms(7);                                 //延時(shí)消抖
  301.                         if(key_set==0)                         //再次確認(rèn)按鍵按下
  302.                         {
  303.                                 Writeds1302 (WRITE_PROTECT,0X00);//DS1302禁止寫(xiě)保護(hù)
  304.                                 if(set_f<3)                        
  305.                                 {
  306.                                         TR1=1;                         //開(kāi)啟定時(shí)1
  307.                                         T1_num=0;                 //重置定時(shí)計(jì)數(shù)變量
  308.                                         LCD_write_command(0x01);//清除屏幕顯示
  309.                                         delay_n40us(100);                //延時(shí)等待清除完成
  310.                                 }
  311.                                 set_f++;                                        //設(shè)置選擇變量+1
  312.                                 strat_f=1;                  //進(jìn)入設(shè)置界面
  313.                                 if(set_f==6)                            //全部參數(shù)設(shè)置完成,退出設(shè)置
  314.                                 {
  315.                                         TR1=0;                                        //關(guān)閉定時(shí)器1
  316.                                         T1_num=0;                                //重置定時(shí)計(jì)數(shù)變量
  317.                                         f=1;                                        //標(biāo)記設(shè)置操作完成
  318.                                         strat_f=0;                                //退出設(shè)置顯示初始界面
  319.                                 }               
  320.                         }
  321.                         while(!key_set);                //檢測(cè)按鍵松開(kāi)
  322.                 }
  323.         
  324.                 //加值鍵
  325.                 if(key_jia==0)
  326.                 {
  327.                         delayms(7);                                                //延時(shí)消抖
  328.                         T1_num=0;                                                //重置定時(shí)計(jì)數(shù)變量,防止定時(shí)恢復(fù)初始界面
  329.                         if(key_jia==0)                  //再次確認(rèn)按鍵按下
  330.                         {
  331.                                 if(set_f==1)                //設(shè)置起步價(jià)
  332.                                 {
  333.                                          
  334.                                          if(start_price<3000) //最大值可設(shè)置3000/100=30元【start_price/100=起步價(jià)】
  335.                                                  start_price+=100; //起步價(jià)+1元
  336.                                 }
  337.                                 if(set_f==2)              //設(shè)置白天每加一公里價(jià)格
  338.                                 {
  339.                                          if(white_price<100)  //最大值可設(shè)置100/10=10元【white_price/10=公里價(jià)】
  340.                                                  white_price++;          //白天公里價(jià)+0.1元
  341.                                 }                                
  342.                                 if(set_f==3)              //設(shè)置小時(shí)
  343.                                 {                        
  344.                                         time[2]++;                          //小時(shí)+1
  345.                                         time[2]=(time[2]/10)*16+time[2]%10;//將小時(shí)轉(zhuǎn)換成16進(jìn)制
  346.                                         if(time[2]>0x23)                       //判斷是否達(dá)到最大小時(shí)23時(shí)
  347.                                                 time[2]=0x00;                       //重新回到00時(shí)
  348.                                         Writeds1302 (WRITE_HOUR,time[2]);  //將設(shè)置好的小時(shí)寫(xiě)入到DS1302存儲(chǔ)起來(lái)
  349.                                         time[2]=Read1302(0x85);            //讀取當(dāng)前小時(shí)               
  350.                                 }
  351.                                 if(set_f==4)              //設(shè)置分
  352.                                 {
  353.                                         time[1]++;
  354.                                         time[1]=(time[1]/10)*16+time[1]%10;
  355.                                         if(time[1]>0x59)
  356.                                                 time[1]=0x00;
  357.                                         Writeds1302 (WRITE_MINUTE,time[1]);        
  358.                                         time[1]=Read1302(0x83);        
  359.                                 }                                
  360.                                 if(set_f==5)              //設(shè)置秒
  361.                                 {
  362.                                         time[0]++;
  363.                                         time[0]=(time[0]/10)*16+time[0]%10;
  364.                                         if(time[0]>0x59)
  365.                                                 time[0]=0x00;
  366.                                         Writeds1302 (WRITE_SECOND,time[0]);        
  367.                                         time[0]=Read1302(0x81);        
  368.                                 }
  369.                         }
  370.                 }        
  371.                 //減值鍵
  372.                 if(key_jian==0)
  373.                 {
  374.                         delayms(7);                                          //延時(shí)消抖
  375.                         T1_num=0;                                          //重置定時(shí)計(jì)數(shù)變量
  376.                         if(key_jian==0)                                  //再次確認(rèn)按鍵按下
  377.                         {
  378.                                 if(set_f==1)              //設(shè)置起步價(jià)
  379.                                 {
  380.                                          if(start_price>=100) //最小值可設(shè)置0元
  381.                                                  start_price-=100; //起步價(jià)-1元
  382.                                 }
  383.                                 if(set_f==2)              //設(shè)置白天每加一公里價(jià)格
  384.                                 {
  385.                                          if(white_price!=0)          //最小值可設(shè)置0元
  386.                                                  white_price--;          //白天公里價(jià)-0.1元
  387.                                 }
  388.                                 if(set_f==3)              //設(shè)置小時(shí)
  389.                                 {                        
  390.                                         if(time[2]==0)                  //判斷小時(shí)是否到達(dá)最小小時(shí)0時(shí)
  391.                                                 time[2]=23;                  //重新回到23時(shí)
  392.                                         else
  393.                                                 time[2]--;                  //否則小時(shí)-1
  394.                                         time[2]=(time[2]/10)*16+time[2]%10;//將小時(shí)轉(zhuǎn)換成16進(jìn)制
  395.                                         Writeds1302 (WRITE_HOUR,time[2]);  //將設(shè)置好的小時(shí)寫(xiě)入到DS1302存儲(chǔ)起來(lái)
  396.                                         time[2]=Read1302(0x85);                           //重新讀取小時(shí)
  397.                               }               
  398.                                 if(set_f==4)              //設(shè)置分
  399.                                 {
  400.                                         if(time[1]==0)
  401.                                                 time[1]=59;
  402.                                         else
  403.                                                 time[1]--;
  404.                                         time[1]=(time[1]/10)*16+time[1]%10;
  405.                                         Writeds1302 (WRITE_MINUTE,time[1]);
  406.                                         time[1]=Read1302(0x83);                        
  407.                                 }               
  408.                                 if(set_f==5)              //設(shè)置秒
  409.                                 {
  410.                                         if(time[0]==0)
  411.                                                 time[0]=59;
  412.                                         else
  413.                                                 time[0]--;
  414.                                         time[0]=(time[0]/10)*16+time[0]%10;
  415.                                         Writeds1302 (WRITE_SECOND,time[0]);
  416.                                         time[0]=Read1302(0x81);                        
  417.                                 }
  418.                         }
  419.                 }
  420.         }
  421.         else           //計(jì)價(jià)模式下
  422.         {
  423.                 if(key_Wait==0)         //開(kāi)啟/關(guān)閉電機(jī)
  424.                 {
  425.                         delayms(7);                   //延時(shí)消抖
  426.                         if(key_Wait==0)           //再次確認(rèn)按鍵按下
  427.                         {
  428.                                 if(TR0==0)                 //當(dāng)TR0=0時(shí)moto_f=1,此時(shí)電機(jī)為開(kāi)啟狀態(tài)
  429.                                 {
  430.                                         TR0=1;                 //打開(kāi)定時(shí)器0,開(kāi)始計(jì)等待時(shí)間
  431.                                         EX0=0;                 //禁止外部中斷0,不進(jìn)行里程檢測(cè)
  432.                                         moto_f=0;         //標(biāo)記電機(jī)關(guān)閉
  433.                                 }
  434.                                 else                         //當(dāng)TR0=1時(shí)moto_f=0,此時(shí)電機(jī)為關(guān)閉狀態(tài)
  435.                                 {
  436.                                         TR0=0;                 //關(guān)閉定時(shí)器0,停止計(jì)等待時(shí)間
  437.                                         EX0=1;                 //INT0中斷允許,檢測(cè)霍爾信號(hào)
  438.                                         moto_f=1;         //標(biāo)記電機(jī)打開(kāi)
  439.                                 }               
  440.                         }
  441.                         while(!key_Wait);   //檢測(cè)按鍵松開(kāi)
  442.                 }
  443.                 if(key_jia==0)                   //電機(jī)加速
  444.                 {
  445.                         delayms(7);                   //延時(shí)消抖
  446.                         if(key_jia==0&&vs<9)//再次確認(rèn)按鍵按下,并且速度還沒(méi)最大9擋
  447.                         {
  448.                                 vs++;                   //速度等級(jí)+1
  449.                         }
  450.                         while(!key_jia);   //檢測(cè)按鍵松開(kāi)
  451.                 }        
  452.                 if(key_jian==0)                   //電機(jī)減速
  453.                 {
  454.                         delayms(7);                   //延時(shí)消抖
  455.                         if(key_jian==0&&vs>4)//再次確認(rèn)按鍵按下,并且速度還沒(méi)最小4擋
  456.                         {
  457.                                 vs--;                   //速度等級(jí)-1
  458.                         }
  459.                         while(!key_jian);  //檢測(cè)按鍵松開(kāi)
  460.                 }
  461.         }
  462. }
  463. /********************************************************
  464. 函數(shù)名稱:void main()
  465. 函數(shù)作用:主函數(shù)
  466. 參數(shù)說(shuō)明:
  467. ********************************************************/
  468. void main()
  469. {
  470.         led=1;                  //紅燈關(guān)閉
  471.         led2=0;                  //綠燈點(diǎn)亮
  472.         LCD_init();   //LCD1602初始化
  473.         T0_init();    //定時(shí)器0初始化
  474.         Int0_init();  //外部中斷初始化

  475.         if(key_jian==0)                  //手動(dòng)復(fù)位初始默認(rèn)價(jià)格
  476.         {
  477.                 delayms(100);
  478.                 if(key_jian==0)
  479.                 {
  480.                         AT24C02_write_date(1,18);    //寫(xiě)入【公里價(jià)】數(shù)據(jù)保存,地址0~255均可
  481.                         AT24C02_write_date(5,10);    //寫(xiě)入【起步價(jià)】數(shù)據(jù)保存
  482.                 }
  483.         }        
  484.         
  485.         white_price=AT24C02_read_date(1);    //讀取存儲(chǔ)的【公里價(jià)】數(shù)據(jù)
  486.         start_price=AT24C02_read_date(5)*100;//讀取存儲(chǔ)的【起步價(jià)】數(shù)據(jù)

  487.         lcd1602_write_pic(0x01,pic2);        //將自定義字符“¥”寫(xiě)入LCD1602
  488.         while(1)                                                         //死循環(huán)
  489. ……………………

  490. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
程序+原理圖.7z (3.35 MB, 下載次數(shù): 302)




評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:350994 發(fā)表于 2018-6-21 15:30 來(lái)自手機(jī) | 只看該作者
問(wèn)下那個(gè)為什么電機(jī)驅(qū)動(dòng)信號(hào)為什么從p3.7輸出,而不是p1.1輸出?還有單脈沖產(chǎn)生部分可以用555單脈沖代替嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:358879 發(fā)表于 2018-6-26 21:15 | 只看該作者
有DSN文件嗎?
回復(fù)

使用道具 舉報(bào)

地板
ID:487766 發(fā)表于 2019-3-10 10:40 | 只看該作者
好厲害呀
回復(fù)

使用道具 舉報(bào)

5#
ID:532271 發(fā)表于 2019-5-10 10:26 | 只看該作者
太厲害了吧
回復(fù)

使用道具 舉報(bào)

6#
ID:456064 發(fā)表于 2019-5-17 17:45 | 只看該作者
能給講講工作原理嗎
回復(fù)

使用道具 舉報(bào)

7#
ID:554397 發(fā)表于 2019-6-10 10:57 | 只看該作者
那個(gè)DS1302兩個(gè)電源口可以一個(gè)接地嗎
回復(fù)

使用道具 舉報(bào)

8#
ID:568804 發(fā)表于 2019-6-21 13:30 | 只看該作者
好復(fù)雜啊,功能有簡(jiǎn)單點(diǎn)的嗎
回復(fù)

使用道具 舉報(bào)

9#
ID:420363 發(fā)表于 2019-7-1 11:28 | 只看該作者
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

10#
ID:581627 發(fā)表于 2019-7-13 11:48 來(lái)自手機(jī) | 只看該作者
樓主能給個(gè)聯(lián)系方式嗎?
回復(fù)

使用道具 舉報(bào)

11#
ID:282095 發(fā)表于 2019-7-13 12:28 | 只看該作者
具體的原理可以簡(jiǎn)要說(shuō)明一下嗎
回復(fù)

使用道具 舉報(bào)

12#
ID:273499 發(fā)表于 2020-1-5 23:35 | 只看該作者
感謝感謝   開(kāi)始學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

13#
ID:701056 發(fā)表于 2020-3-2 11:38 | 只看該作者
合乘計(jì)價(jià)器有什么好建議嗎
回復(fù)

使用道具 舉報(bào)

14#
ID:708833 發(fā)表于 2020-3-15 13:59 | 只看該作者
好厲害啊,感謝感謝。
回復(fù)

使用道具 舉報(bào)

15#
ID:707219 發(fā)表于 2020-3-28 18:17 | 只看該作者
請(qǐng)問(wèn)霍爾傳感器是怎么計(jì)算距離的
回復(fù)

使用道具 舉報(bào)

16#
ID:725201 發(fā)表于 2020-4-10 23:49 | 只看該作者
有沒(méi)有proteus仿真電路啊
回復(fù)

使用道具 舉報(bào)

17#
ID:721460 發(fā)表于 2020-5-10 11:17 | 只看該作者
好厲害啊
回復(fù)

使用道具 舉報(bào)

18#
ID:1052124 發(fā)表于 2022-11-15 18:08 | 只看該作者
大家可以根據(jù)樓主提供的原理圖和程序 做一個(gè)仿真測(cè)試一下嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 另类在线 | 亚洲激情一区二区三区 | 午夜三级视频 | 久久久久亚洲精品 | 午夜影院在线 | 日韩精品一区二区三区在线观看 | 91一区二区 | 黄色大片免费网站 | 久久久久久久一区二区三区 | 一区二区三区视频在线观看 | 男女搞网站 | 久久久久国产一区二区三区 | 91精品国产乱码久久久久久 | 日韩在线精品视频 | 久久一 | 91精品国产综合久久久动漫日韩 | 视频一区二区在线观看 | 日韩精品在线播放 | 久久久久久久久99 | 999www视频免费观看 | 夜夜爽99久久国产综合精品女不卡 | 天天曰夜夜操 | 国产精品3区 | 91麻豆产精品久久久久久夏晴子 | 日一区二区 | 日韩在线一区视频 | 91视频一区二区三区 | 91精品国产91久久久久久 | 五月天天丁香婷婷在线中 | 一区二区三区精品视频 | 国产美女福利在线观看 | 天天久久 | 免费观看黄a一级视频 | 精品国产一区二区三区性色av | 91视视频在线观看入口直接观看 | 亚洲国产成人精品女人久久久 | 欧美一二三 | 三区在线观看 | 一a级片 | 做a的各种视频 | 夜夜爽99久久国产综合精品女不卡 |