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

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

QQ登錄

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

搜索
查看: 2788|回復(fù): 3
收起左側(cè)

單片機(jī)設(shè)計(jì)的防誤踩油門(mén)系統(tǒng) Proteus仿真程序

[復(fù)制鏈接]
ID:448615 發(fā)表于 2020-4-4 21:01 | 顯示全部樓層 |閱讀模式
防誤踩油門(mén)系統(tǒng)的設(shè)計(jì),基于51單片機(jī)的,有原理圖和程序
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png

單片機(jī)源程序如下:
  1. #include "reg52.h"        //此文件中定義了單片機(jī)的一些特殊功能寄存器
  2. #include <intrins.h>    //因?yàn)橐玫阶笥乙坪瘮?shù),所以加入這個(gè)頭文件

  3. #define  uchar unsigned char
  4. #define  uint  unsigned int
  5. #define LCDLCDDisp_Off   0x3e
  6. #define LCDLCDDisp_On    0x3f
  7. #define Page_Add       0xb8//ye
  8. #define LCDCol_Add     0x40//lie
  9. #define Start_Line     0xC0//hang
  10. #define data_ora P0   /*液晶數(shù)據(jù)總線*/

  11. sbit k1=P1^4;
  12. sbit k2=P1^5;
  13. sbit k3=P1^6;
  14. sbit k4=P1^7;
  15. sbit beep=P1^1;
  16. sbit moto=P1^0;
  17. sbit LCDMcs=P2^1 ;    /*片選1*/
  18. sbit LCDScs=P2^2 ;    /*片選2*/
  19. sbit RESET=P2^3 ;     /*復(fù)位信號(hào)*/
  20. sbit LCDDi=P2^4 ;     /*數(shù)據(jù)/指令 選擇*/
  21. sbit LCDRW=P2^5 ;     /*讀/寫(xiě) 選擇*/
  22. sbit LCDEnable=P2^6 ; /*讀/寫(xiě) 使能*/

  23. uchar *tab;
  24. uint k=0;
  25. uint q=0;

  26. uchar code hz1[]=
  27. {
  28. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  29. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  30. /*--  文字:  安  --*/
  31. /*--  楷體_GB231212;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
  32. 0xFF,0xFF,0xFF,0x8F,0xEF,0xEF,0x2D,0xF5,0xF3,0x77,0x57,0x67,0x7F,0x7F,0x7F,0xFF,

  33. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  34. };

  35. void LCDdelay(uchar x)
  36. {
  37.    int d;
  38.    uchar y;
  39.    for(y=0;y<x;y++)
  40.    for(d=0;d<10;d++);
  41. }

  42. void CheckState()        
  43. {
  44.    uchar dat,DATA;//狀態(tài)信息(判斷是否忙)
  45.    LCDDi=0; // 數(shù)據(jù)\指令選擇,D/I(RS)="L" ,表示 DB7∽DB0 為顯示指令數(shù)據(jù)
  46.    LCDRW=1; //R/W="H" ,E="H"數(shù)據(jù)被讀到DB7∽DB0
  47.    do
  48.    {
  49.       DATA=0x00;
  50.       LCDEnable=1;    //EN下降源
  51.       LCDdelay(1);  //延時(shí)
  52.       dat=DATA;
  53.       LCDEnable=0;
  54.       dat=0x80 & dat; //僅當(dāng)?shù)?位為0時(shí)才可操作(判別busy信號(hào))
  55.     }
  56.     while(!(dat==0x00));
  57. }

  58. void write_com(uchar cmdcode)
  59. {
  60.     CheckState();//檢測(cè)LCD是否忙
  61.     LCDDi=0;
  62.     LCDRW=0;
  63.     P0=cmdcode;        
  64.     LCDdelay(1);
  65.     LCDEnable=1;
  66.     LCDdelay(1);
  67.     LCDEnable=0;
  68. }

  69. void write_data(uchar LCDDispdata)
  70. {
  71.     CheckState();//檢測(cè)LCD是否忙
  72.     LCDDi=1;
  73.     LCDRW=0;
  74.     P0=LCDDispdata;
  75.     LCDdelay(1);
  76.     LCDEnable=1;
  77.     LCDdelay(1);
  78.     LCDEnable=0;
  79. }

  80. void init_lcd()
  81. {
  82.     LCDdelay(1);   
  83.     LCDMcs=1;//剛開(kāi)始關(guān)閉兩屏
  84.     LCDScs=1;
  85.     LCDdelay(1);
  86.     write_com(LCDLCDDisp_Off);//寫(xiě)初始化命令
  87.     write_com(Page_Add+0);
  88.     write_com(Start_Line+0);
  89.     write_com(LCDCol_Add+0);
  90.     write_com(LCDLCDDisp_On);
  91. }

  92. void Clr_Scr()
  93. {
  94.     uchar j,k;
  95.     LCDMcs=0; //左、右屏均開(kāi)顯示
  96.     LCDScs=0;
  97.      write_com(Page_Add+0);
  98.      write_com(LCDCol_Add+0);
  99.      for(k=0;k<8;k++)//控制頁(yè)數(shù)0-7,共8頁(yè)
  100.      {
  101.         write_com(Page_Add+k); //每頁(yè)每頁(yè)進(jìn)行寫(xiě)
  102.           for(j=0;j<64;j++)  //每頁(yè)最多可寫(xiě)32個(gè)中文文字或64個(gè)ASCII字符
  103.         {
  104.               write_com(LCDCol_Add+j);
  105.             write_data(0x00);//控制列數(shù)0-63,共64列,寫(xiě)點(diǎn)內(nèi)容,列地址自動(dòng)加1
  106.         }
  107.     }
  108. }

  109. Disp(uchar page,uchar column, uchar code *word)
  110. {
  111. uchar i;
  112. LCDMcs=0;
  113. LCDScs=1;
  114. write_com(0xb8|page);
  115. write_com(0x40|column);
  116. for(i=0;i<16;i++)
  117. write_data(word[i]);
  118. for(i=32;i<48;i++)
  119. write_data(word[i]);
  120. for(i=64;i<80;i++)
  121. write_data(word[i]);
  122. for(i=96;i<112;i++)
  123. write_data(word[i]);

  124. LCDMcs=1;
  125. LCDScs=0;
  126. write_com(0xb8|page);
  127. write_com(0x40);
  128. for(i=128;i<144;i++)
  129. write_data(word[i]);
  130. for(i=160;i<176;i++)
  131. write_data(word[i]);
  132. for(i=192;i<208;i++)
  133. write_data(word[i]);
  134. for(i=224;i<240;i++)
  135. write_data(word[i]);

  136. LCDMcs=0;
  137. LCDScs=1;
  138. write_com(0xb8|page+1);
  139. write_com(0x40|column);
  140. for(i=16;i<32;i++)
  141. write_data(word[i]);
  142. for(i=48;i<64;i++)
  143. write_data(word[i]);
  144. for(i=80;i<96;i++)
  145. write_data(word[i]);
  146. for(i=112;i<128;i++)
  147. write_data(word[i]);

  148. LCDMcs=1;
  149. LCDScs=0;
  150. write_com(0xb8|page+1);
  151. write_com(0x40);
  152. for(i=144;i<160;i++)
  153. write_data(word[i]);
  154. for(i=176;i<192;i++)
  155. write_data(word[i]);
  156. for(i=208;i<224;i++)
  157. write_data(word[i]);
  158. for(i=240;i<250;i++)
  159. write_data(word[i]);
  160. }

  161. void lcd()
  162. {
  163.     init_lcd();
  164.     Clr_Scr();
  165.      k=0;   
  166.      for(q=0;q<1;q++)
  167.      {
  168.       for(k=0xc0;k<0xff;k++)
  169.       {
  170.          Disp(0,0,hz1);
  171.          Disp(2,0,hz2);
  172.          Disp(4,0,hz3);
  173.          Disp(6,0,hz4);
  174.          LCDMcs=0;
  175.          LCDScs=0;
  176.          write_com(k);
  177.          LCDdelay(2);
  178.         }
  179.       }
  180. }   

  181. unsigned char start=0;
  182. unsigned char n=0;  //n為節(jié)拍常數(shù)變量   
  183. unsigned char code music_tab[] ={   
  184. 0x18, 0x30, 0x1C , 0x10, //格式為: 頻率常數(shù), 節(jié)拍常數(shù), 頻率常數(shù), 節(jié)拍常數(shù),   
  185. 0x20, 0x40, 0x1C , 0x10,   
  186. 0x18, 0x10, 0x20 , 0x10,   
  187. 0x1C, 0x10, 0x18 , 0x40,   
  188. 0x1C, 0x20, 0x20 , 0x20,   
  189. 0x1C, 0x20, 0x18 , 0x20,   
  190. 0x20, 0x80, 0xFF , 0x20,   
  191. 0x30, 0x1C, 0x10 , 0x18,   
  192. 0x20, 0x15, 0x20 , 0x1C,   
  193. 0x20, 0x20, 0x20 , 0x26,   
  194. 0x40, 0x20, 0x20 , 0x2B,   
  195. 0x20, 0x26, 0x20 , 0x20,   
  196. 0x20, 0x30, 0x80 , 0xFF,   
  197. 0x20, 0x20, 0x1C , 0x10,   
  198. 0x18, 0x10, 0x20 , 0x20,   
  199. 0x26, 0x20, 0x2B , 0x20,   
  200. 0x30, 0x20, 0x2B , 0x40,   
  201. 0x20, 0x20, 0x1C , 0x10,   
  202. 0x18, 0x10, 0x20 , 0x20,   
  203. 0x26, 0x20, 0x2B , 0x20,   
  204. 0x30, 0x20, 0x2B , 0x40,   
  205. 0x20, 0x30, 0x1C , 0x10,   
  206. 0x18, 0x20, 0x15 , 0x20,   
  207. 0x1C, 0x20, 0x20 , 0x20,   
  208. 0x26, 0x40, 0x20 , 0x20,   
  209. 0x2B, 0x20, 0x26 , 0x20,   
  210. 0x20, 0x20, 0x30 , 0x80,   
  211. 0x20, 0x30, 0x1C , 0x10,   
  212. 0x20, 0x10, 0x1C , 0x10,   
  213. 0x20, 0x20, 0x26 , 0x20,   
  214. 0x2B, 0x20, 0x30 , 0x20,   
  215. 0x2B, 0x40, 0x20 , 0x15,   
  216. 0x1F, 0x05, 0x20 , 0x10,   
  217. 0x1C, 0x10, 0x20 , 0x20,   
  218. 0x26, 0x20, 0x2B , 0x20,   
  219. 0x30, 0x20, 0x2B , 0x40,   
  220. 0x20, 0x30, 0x1C , 0x10,   
  221. 0x18, 0x20, 0x15 , 0x20,   
  222. 0x1C, 0x20, 0x20 , 0x20,   
  223. 0x26, 0x40, 0x20 , 0x20,   
  224. 0x2B, 0x20, 0x26 , 0x20,   
  225. 0x20, 0x20, 0x30 , 0x30,   
  226. 0x20, 0x30, 0x1C , 0x10,   
  227. 0x18, 0x40, 0x1C , 0x20,   
  228. 0x20, 0x20, 0x26 , 0x40,   
  229. 0x13, 0x60, 0x18 , 0x20,   
  230. 0x15, 0x40, 0x13 , 0x40,   
  231. 0x18, 0x80, 0x00   
  232. };
  233.    
  234. void int0()  interrupt 1 //采用中斷0 控制節(jié)拍   
  235. {  TH0=0xd8;   
  236.    TL0=0xef;   
  237.    n--;   
  238. }
  239.    
  240. void delaya(unsigned int a)
  241. {
  242.     while(a--);   
  243. }

  244. void delayb (unsigned char m) //控制頻率延時(shí)   
  245. {   
  246. unsigned b=3*m;   
  247. while(--b);   
  248. }   
  249.    
  250. void delayc(unsigned char c)  //豪秒延時(shí)子程序   
  251. {   
  252.   while(--c);               
  253. }   

  254. void sound()
  255. {
  256.   unsigned char p,m;   //m為頻率常數(shù)變量   
  257.   unsigned char i=0;   
  258.   TMOD&=0x0f;   
  259.   TMOD|=0x01;   
  260.   TH0=0xd8;TL0=0xef;   
  261.   IE=0x82;   
  262. play:   
  263.   while(1)
  264.     {   
  265.     a: p=music_tab[i];   
  266.        if(p==0x00)       { i=0, delayc(1000); goto play;}     //如果碰到結(jié)束符,延時(shí)1秒,回到開(kāi)始再來(lái)一遍   
  267.        else if(p==0xff)  { i=i+1;delayc(100),TR0=0; goto a;}  //若碰到休止符,延時(shí)100ms,繼續(xù)取下一音符   
  268.             else         {m=music_tab[i++], n=music_tab[i++];}  //取頻率常數(shù) 和 節(jié)拍常數(shù)   
  269.              TR0=1;                                             //開(kāi)定時(shí)器1   
  270.            while(n!=0) beep=~beep,delayb(m);                         //等待節(jié)拍完成, 通過(guò)P1口輸出音頻
  271.        TR0=0;                                             //關(guān)定時(shí)器1   
  272.     }   
  273. }

  274. void dcmotor()
  275. {   
  276.     unsigned char j;
  277.     moto=0;            //關(guān)閉電機(jī)
  278.     for(j=0;j<100;j++)    //循環(huán)100次,也就是大約5S
  279.     {
  280.         moto=1;            //開(kāi)啟電機(jī)
  281.         delaya(5000);    //大約延時(shí)50ms
  282.     }
  283.     moto=0;            //關(guān)閉電機(jī)
  284.   
  285. }
  286.   
  287. void keypros()
  288. {
  289.     if((k1|k2|k3|k4)==0)     //開(kāi)始
  290.     {
  291.         delaya(1000);
  292.         if((k1|k2|k3|k4)==0)
  293.         {
  294.             start=1;        
  295.         }
  296.     }
  297. }

  298. void main()
  299. {   
  300.     while(1)
  301.     {
  302.         keypros();
  303.         if(start==1)
  304.         {      
  305.             lcd();
  306.             dcmotor();         
  307.             sound();               
  308.         }      
  309.         else
  310.         {
  311.             beep=1;
  312.             moto=0;
  313.         }        
  314.     }        
  315. }
復(fù)制代碼

所有資料51hei提供下載:
proteus仿真代碼.zip (40.9 KB, 下載次數(shù): 20)
回復(fù)

使用道具 舉報(bào)

ID:328014 發(fā)表于 2020-4-4 22:08 | 顯示全部樓層
程序有問(wèn)題吧,無(wú)屏幕顯示
回復(fù)

使用道具 舉報(bào)

ID:402026 發(fā)表于 2020-4-19 18:04 | 顯示全部樓層
這個(gè)程序和仿真有以下幾個(gè)缺陷:1.仿真的時(shí)候,屏幕沒(méi)有顯示。2.缺少提示和說(shuō)明,不知道按鍵是做什么的!3.這個(gè)防誤踩油門(mén)系統(tǒng),怎么工作的?原理如何?一個(gè)都不知道!
回復(fù)

使用道具 舉報(bào)

ID:402026 發(fā)表于 2020-4-19 22:06 | 顯示全部樓層
不過(guò)還是很感謝你的努力和辛苦,你的程序的借鑒意義是恨到的!再次感謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久精品视频免费观看 | 久久三级av | 日韩一区二区三区视频 | 日本久久网站 | 亚洲成人a v | 欧美日韩福利视频 | av一级毛片 | 国产 欧美 日韩 一区 | 99热视| 亚洲第一网站 | 中文字幕乱码一区二区三区 | 免费在线观看h片 | 96国产精品久久久久aⅴ四区 | 国产在线激情视频 | 婷婷精品 | 在线电影日韩 | 成年人在线观看视频 | 国产亚洲精品久久情网 | 老司机免费视频 | 国产亚洲第一页 | 一级片av| 6080亚洲精品一区二区 | 国产精品无码久久久久 | 少妇精品亚洲一区二区成人 | 一级欧美一级日韩片免费观看 | 国产精品www | 免费在线观看一区二区 | 特黄色毛片 | 精品一区二区av | 99精品99 | 日本成人一区二区 | 五月槐花香 | www.日日夜夜 | 国产精品7777777 | 欧美色性 | 欧美国产日韩在线观看 | 国产高清视频在线 | 久久九 | 国产精品福利在线观看 | 在线视频国产一区 | 欧美片网站免费 |