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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

ABS防抱死系統程序原理圖 基于51單片機設計

[復制鏈接]
跳轉到指定樓層
樓主
  1. #include <reg52.h>
  2. #include <intrins.h>  
  3. #include <math.h>   
  4. #include <stdio.h>   
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7.       
  8. uint Time1ms=0;
  9. uint TimeCount=0;
  10. //LCD定義
  11. #define LCD_DB P0
  12. sbit LCD_RS=P2^0;   
  13. sbit LCD_RW=P2^1;  
  14. sbit LCD_E=P2^2;  
  15. //按鍵定義
  16. sbit K1=P3^1;
  17. sbit K2=P1^0;
  18. sbit K3=P1^1;
  19. sbit K4=P1^2;
  20. //PWM變量
  21. uint PWMTime=0;
  22. uint PWMscale=100;
  23. //速度變量
  24. uchar Speed=0;
  25. //里程變量
  26. uint Meter=0;
  27. //時間變量
  28. uint Time01ms=0;
  29. uint Time10ms=0;
  30. //按鍵松開標志位
  31. bit flag_KEY=0;
  32. //剎車標志位
  33. bit bStop=0;
  34. //滑移率變量
  35. uint R=0;
  36. uchar CheSpeed=8;
  37. sbit LED1=P1^7;  
  38. sbit LED2=P1^6;  
  39. sbit LED3=P1^5;  
  40. uint Count=0;
  41. /*-------------------------------------
  42.                            函數申明
  43. ---------------------------------------*/
  44. void LCD_init(void);                          //初始化函數
  45. void LCD_write_command(uchar command);        //寫指令函數
  46. void LCD_write_data(uchar dat);               //寫數據函數  
  47. void LCD_disp_char(uchar x,uchar y,uchar dat);//在某個屏幕位置上顯示一個字符,X(0-15),y(1-2)  
  48. void LCD_disp_str(uchar x,uchar y,uchar *str); //LCD1602顯示字符串函數
  49. void delay_n10us(uint n);                     //延時函數
  50. /*------------------------------------------------
  51.               外部中斷0程序
  52. ------------------------------------------------*/
  53. void INT() interrupt 0
  54. {
  55.                 Count++;
  56. }
  57. /*------------------------------------------
  58.                                 定時器0中斷處理
  59. --------------------------------------------*/
  60. void tim0_isr(void) interrupt 1 using 1
  61. {
  62.         TH0=0XFC;      
  63.         TL0=0X66;
  64.         Time1ms++;
  65.         TimeCount++;
  66. }
  67. /*-------------------------------------
  68.                         定時器初始化
  69. ---------------------------------------*/
  70. void TIM0init(void)
  71. {
  72.         TMOD=0x11;
  73.         TH0=0xDC;       //定時0.1ms
  74.         TL0=0x00;
  75.         ET0=1;
  76.         TR0=1;
  77.         EA=1;
  78. }
  79. /*-------------------------------------
  80.                            LCD1602子程序                                        (網上直接用)
  81. ---------------------------------------*/
  82. void LCD_init(void)
  83. {  
  84.         delay_n10us(10);  
  85.         LCD_write_command(0x38);//設置8位格式,2行,5x7
  86.         delay_n10us(10);  LCD_write_command(0x0c);//開顯示,關光標,不閃爍
  87.         delay_n10us(10);  LCD_write_command(0x06);//設定輸入方式,增量不移位
  88.         delay_n10us(10);  LCD_write_command(0x01);//清除屏幕顯示  
  89.         delay_n10us(100);       //延時清屏,延時函數,延時約n個10us
  90. }
  91. void LCD_write_command(uchar dat)
  92. {  
  93.         delay_n10us(10);  
  94.         LCD_RS=0;         //指令
  95.         LCD_RW=0;         //寫入
  96.         LCD_E=1;          //允許
  97.         LCD_DB=dat;  delay_n10us(10);  //實踐證明,我的LCD1602上,用for循環1次就能完成普通寫指令。
  98.         LCD_E=0;  delay_n10us(10);  //實踐證明,我的LCD1602上,用for循環1次就能完成普通寫指令。
  99. }
  100. void LCD_write_data(uchar dat)
  101. {  
  102.         delay_n10us(10);  
  103.         LCD_RS=1;          //數據
  104.         LCD_RW=0;                   //寫入
  105.         LCD_E=1;           //允許
  106.         LCD_DB=dat; delay_n10us(10);
  107.          LCD_E=0;  delay_n10us(10);
  108. }
  109. void LCD_disp_char(uchar x,uchar y,uchar dat)
  110. {   
  111.         uchar address;   
  112.         if(y==1)           
  113.         address=0x80+x;  
  114.         else           
  115.         address=0xc0+x;   
  116.         LCD_write_command(address);   
  117.         LCD_write_data(dat);
  118. }
  119. void LCD_disp_str(uchar x,uchar y,uchar *str)
  120. {   
  121.         uchar address;   
  122.         if(y==1)           
  123.         address=0x80+x;   
  124.         else           
  125.         address=0xc0+x;   
  126.         LCD_write_command(address);   
  127.         while(*str!='\0')   
  128.                 {      
  129.                 LCD_write_data(*str);
  130.                 str++;
  131.                 }
  132. }
  133. void delay_n10us(uint n)  //延時
  134. {                 
  135.         uint i;                    
  136.         for(i=n;i>0;i--)            
  137.          {         
  138.          nop_();_nop_();_nop_();_nop_();_nop_();_nop_();   
  139.          }
  140. }
  141. /*-------------------------------------
  142.                             按鍵掃描
  143. ---------------------------------------*/      
  144. void keyscan()
  145. {
  146.         if(K1==0)//剎車
  147.         {
  148.                 if(flag_KEY==1)
  149.                 {
  150.                         flag_KEY=0;
  151.                
  152.                         bStop=1;
  153.                 }
  154.         }
  155.         else if(K2==0)//車速1
  156.         {
  157.                 if(flag_KEY==1)
  158.                 {
  159.                         flag_KEY=0;
  160.                
  161.                         CheSpeed=8;
  162.                 }
  163.         }
  164.         else if(K3==0)//車速2
  165.         {
  166.                 if(flag_KEY==1)
  167.                 {
  168.                         flag_KEY=0;
  169.                
  170.                         CheSpeed=10;
  171.                 }
  172.         }
  173.         else if(K4==0)//車速3
  174.         {
  175.                 if(flag_KEY==1)
  176.                 {
  177.                         flag_KEY=0;
  178.                
  179.                         CheSpeed=15;
  180.                 }
  181.         }
  182.         else//按鍵松開
  183.   {      
  184.           flag_KEY=1;
  185.   }
  186. }
  187. /*-------------------------------------
  188.                             測速程序
  189. ---------------------------------------*/      
  190. void Check()
  191. {
  192.         //-----定時1秒--------
  193.         if(Time1ms>=1000)
  194.         {
  195.                 Time1ms=0;
  196.                 Speed=Count/2;
  197.                 Count=0;
  198.         }      
  199. }
  200. /*-------------------------------------
  201.                             LCD顯示內容
  202. ---------------------------------------*/      
  203. void DisPlay()
  204. {
  205.         //顯示輪速
  206.         LCD_disp_char(0,1,Speed/10+'0'); //顯示輪速變量
  207.         LCD_disp_char(1,1,Speed%10+'0');
  208.       
  209.         //顯示車速
  210.         LCD_disp_char(0,2,CheSpeed/10+'0'); //顯示車速變量
  211.         LCD_disp_char(1,2,CheSpeed%10+'0');
  212.       
  213.       
  214.         //顯示里程
  215.         LCD_disp_char(10,1,Meter/10000%10+'0'); //顯示里程變量
  216.         LCD_disp_char(11,1,Meter/1000%10+'0');
  217.         LCD_disp_char(12,1,Meter/100%10+'0');
  218.         LCD_disp_char(13,1,Meter/10%10+'0');
  219.         LCD_disp_char(14,1,Meter%10+'0');
  220.       
  221.       
  222.         //顯示滑移率
  223.         LCD_disp_char(12,2,R/10%10+'0');//顯示滑移率
  224.         LCD_disp_char(13,2,R%10+'0');
  225. }
  226. /*-------------------------------------
  227.           計算
  228. ---------------------------------------*/      
  229. void Jisuan()
  230. {
  231.       
  232.         //路程累計
  233.         Meter=Meter+Speed;
  234.       
  235.       
  236.       
  237.         if(bStop==1)
  238.         {
  239.                 if(R>22)
  240.                 {
  241.                         LED1=0;  
  242.                         LED2=1;  
  243.                         LED3=1;
  244.                 }
  245.                 else if(R>18)
  246.                 {
  247.                         LED1=1;  
  248.                         LED2=0;  
  249.                         LED3=1;
  250.                 }
  251.                 else if(R>0)
  252.                 {
  253.                         LED1=1;  
  254.                         LED2=1;  
  255.                         LED3=0;
  256.                 }
  257.                 else
  258.                 {
  259.                         LED1=1;  
  260.                         LED2=1;  
  261.                         LED3=1;
  262.                 }         
  263.                  
  264.                
  265.                
  266.                
  267.                 if(Speed>0)
  268.                 {
  269.                         if(CheSpeed>Speed)
  270.                         {
  271.                                 R=(CheSpeed-Speed)*100/CheSpeed;
  272.                         }
  273.                         else
  274.                         {
  275.                                 R=0;
  276.                         }
  277.                 }
  278.                 else
  279.                 {
  280.                         R=0;
  281.                 }
  282.         }
  283.         else
  284.         {
  285.                 R=0;
  286.                 LED1=1;  
  287.                 LED2=1;  
  288.                 LED3=1;
  289.         }
  290.       
  291.                
  292.       
  293. }
  294. /*-------------------------------------
  295.                             主函數
  296. ---------------------------------------*/      
  297. void main(void)
  298. {
  299.         TIM0init();//定時器配置
  300.         EX0=1;//打開外部中斷0
  301.         IT0=1;//下降沿觸發
  302.       
  303.         LCD_init();//LCD初始化              
  304.         LCD_disp_str(0,1,"  m/s          M"); //顯示速度   里程
  305.         LCD_disp_str(0,2,"  m/s     S:  % "); //顯示滑移率
  306.         while(1)
  307.         {
  308.                 keyscan(); //按鍵掃描
  309.                 Check();//測速程序
  310.                 DisPlay();//LCD顯示
  311.                
  312.                 //-----1秒------
  313.                 if(TimeCount>=1000)
  314.                 {
  315.                         TimeCount=0;
  316.                         Jisuan();
  317.                 }
  318.         }
  319. }
復制代碼


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲 精品 综合 精品 自拍 | 亚洲国产精品第一区二区 | 国产视频福利一区 | 欧美日韩国产三级 | 欧美日韩一区二区三区视频 | 国产激情视频网 | 国产黄色在线观看 | 亚洲精品一区在线观看 | jizz在线看片 | 亚洲国产精品一区 | www.久久久久久久久久久 | 一区二区三区在线 | 天天色官网 | 91视频在线观看 | 91人人在线 | 亚洲精品免费观看 | 成人免费大片黄在线播放 | 日韩中文一区二区三区 | 免费黄色在线观看 | 天堂资源| 婷婷综合激情 | 永久精品 | 欧美成人一区二区三区 | 亚洲高清视频在线 | 亚洲成人av | 夏同学福利网 | 国产在线一区观看 | 黄色一级免费观看 | 国产欧美一区二区三区久久手机版 | 中文字幕av在线播放 | 久久看看| 国产95在线 | 久久国产精品一区二区 | 国产午夜精品视频 | 欧美高清性xxxxhdvideosex | 中文字幕免费视频 | 亚洲综合色视频在线观看 | 在线观看免费高清av | 日本精品视频在线观看 | 国产精久久久久久 | 久久国产精品网 |