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

QQ登錄

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

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

1602液晶+步進(jìn)電機(jī)的單片機(jī)控制實(shí)訓(xùn)資料

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
1602+步進(jìn)電機(jī)控制
矩陣鍵盤(pán)、附帶程序和仿真圖

單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include<stdio.h>
  3. #include"1602.h"
  4. #include"delay.h"

  5. sbit A1=P2^0; //定義步進(jìn)電機(jī)連接端口
  6. sbit B1=P2^1;
  7. sbit C1=P2^2;
  8. sbit D1=P2^3;

  9. sbit key1=P3^7;
  10. sbit key2=P3^4;
  11. sbit key3=P1^7;
  12. sbit key4=P1^3;

  13. #define KeyPort P3

  14. void Init_Timer0(void);
  15. unsigned char KeyPro(void);

  16. #define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通電,其他相斷電
  17. #define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通電,其他相斷電
  18. #define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通電,其他相斷電
  19. #define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
  20. #define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通電,其他相斷電
  21. #define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通電,其他相斷電
  22. #define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通電,其他相斷電
  23. #define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
  24. #define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部斷電

  25. unsigned char Speed=1;

  26. bit StopFlag;

  27. unsigned char code code_1602[]={'1','2','3','4','5','6','7','8','9'};//轉(zhuǎn)換成液晶顯示的字符

  28. main()
  29. {
  30.         unsigned int i=512;//旋轉(zhuǎn)一周時(shí)間
  31. //        unsigned char num;
  32.         unsigned shi,ge;
  33.         Init_Timer0();
  34.         LCD_Init();
  35. //        LCD_Clear();
  36.        
  37.         while(1)  //正向
  38.           {                  
  39.                 //num為鍵盤(pán)值
  40.                 //num=KeyPro();
  41.                 //LCD_Write_String(0,1,"Speed:0");
  42.                 switch(KeyPro())
  43.                 {
  44.                         case 1:{
  45.                                         Coil_OFF
  46.                                     StopFlag=1;
  47.                                     LCD_Write_String(2,0,"    stop   ");
  48.                                     LCD_Write_String(0,1,"Speed:0");
  49.                                    }break;
  50.                         case 2:{
  51.                                         StopFlag=0;
  52.                                         LCD_Write_String(2,0,"  running ");
  53.                                    }break;
  54.                         case 3:{
  55.                                         if(Speed<18)
  56.                                         {
  57.                                                 Speed++;
  58.                                                 LCD_Write_String(2,0," Speed up ");
  59.                                                 LCD_Write_String(0,1,"Speed:");
  60.                                                 shi=Speed/10;
  61.                                                 ge=Speed%10;
  62.                                                 LCD_Write_Char(6,1,code_1602[shi]);
  63.                                                 LCD_Write_Char(7,1,code_1602[ge]);
  64.                                         }               
  65.                                    }break;
  66.                         case 4:{
  67.                                            if(Speed>1)
  68.                                         {
  69.                                                 Speed--;
  70.                                                 LCD_Write_String(2,0,"Speed down");
  71.                                                 LCD_Write_String(0,1,"Speed:");
  72.                                                 LCD_Write_Char(6,1,code_1602[Speed]);
  73.                                     }
  74.                                    }break;
  75.                 }

  76. //                if(num==2)//第一個(gè)按鍵,速度等級(jí)增加
  77. //                {
  78. //                        if(Speed<18)
  79. //                        {
  80. //                                Speed++;
  81. //                                LCD_Write_String(2,0," Speed up ");
  82. //                                LCD_Write_String(0,1,"Speed:");
  83. //                                shi=Speed/10;
  84. //                                ge=Speed%10;
  85. //                                LCD_Write_Char(6,1,code_1602[shi]);
  86. //                                LCD_Write_Char(7,1,code_1602[ge]);
  87. //                        }       
  88. //                }       
  89. //                else if(num==3)//第二個(gè)按鍵,速度等級(jí)減小
  90. //                {
  91. //                        if(Speed>1)
  92. //                        Speed--;
  93. //                        LCD_Write_String(2,0,"Speed down");
  94. //                        LCD_Write_String(0,1,"Speed:");
  95. //                        LCD_Write_Char(6,1,code_1602[Speed]);
  96. //                }       
  97. //                else if(num==0)//電機(jī)停止
  98. //                {
  99. //                        Coil_OFF
  100. //                        StopFlag=1;
  101. //                        LCD_Write_String(2,0,"    stop   ");
  102. //                        LCD_Write_String(0,1,"Speed:0");
  103. //                }
  104. //                else if(num==1)//電機(jī)啟動(dòng)
  105. //                {
  106. //                        StopFlag=0;
  107. //                        LCD_Write_String(2,0,"  running ");
  108. //                }               
  109.         }
  110. }


  111. /*------------------------------------------------
  112.                     定時(shí)器初始化子程序
  113. ------------------------------------------------*/
  114. void Init_Timer0(void)
  115. {
  116. TMOD |= 0x01;          //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響                     
  117. //TH0=0x00;              //給定初值
  118. //TL0=0x00;
  119. EA=1;            //總中斷打開(kāi)
  120. ET0=1;           //定時(shí)器中斷打開(kāi)
  121. TR0=1;           //定時(shí)器開(kāi)關(guān)打開(kāi)
  122. PT0=1;           //優(yōu)先級(jí)打開(kāi)
  123. }
  124. /*------------------------------------------------
  125.                  定時(shí)器中斷子程序
  126. ------------------------------------------------*/
  127. void Timer0_isr(void) interrupt 1
  128. {
  129. static unsigned char times,i;
  130. TH0=(65536-1000)/256;                  //重新賦值 1ms
  131. TL0=(65536-1000)%256;

  132. //Display(0,8);
  133. if(!StopFlag)
  134. {
  135.           if(times==(20-Speed))//最大值18,所以最小間隔值20-18=2
  136.           {
  137.                 times=0;
  138.                
  139.                 switch(i)
  140.             {
  141.                         case 0:Coil_A1;i++;break;
  142.                         case 1:Coil_B1;i++;break;
  143.                         case 2:Coil_C1;i++;break;
  144.                         case 3:Coil_D1;i++;break;
  145.                         case 4:i=0;break;
  146.                         default:break;
  147.            }
  148.           }
  149.           times++;
  150. }
  151. }


  152. ///*------------------------------------------------
  153. //按鍵掃描函數(shù),返回掃描鍵值
  154. //------------------------------------------------*/
  155. //unsigned char KeyScan(void)  //鍵盤(pán)掃描函數(shù),使用行列反轉(zhuǎn)掃描法
  156. //{
  157. // unsigned char cord_h,cord_l;//行列值中間變量
  158. // KeyPort=0x0f;            //行線輸出全為0
  159. // cord_h=KeyPort&0x0f;     //讀入列線值
  160. // if(cord_h!=0x0f)    //先檢測(cè)有無(wú)按鍵按下
  161. // {
  162. //  DelayMs(10);        //去抖
  163. //  if((KeyPort&0x0f)!=0x0f)
  164. //  {
  165. //    cord_h=KeyPort&0x0f;  //讀入列線值
  166. //    KeyPort=cord_h|0xf0;  //輸出當(dāng)前列線值
  167. //    cord_l=KeyPort&0xf0;  //讀入行線值
  168. //
  169. //    while((KeyPort&0xf0)!=0xf0);//等待松開(kāi)并輸出
  170. //
  171. //    return(cord_h+cord_l);//鍵盤(pán)最后組合碼值
  172. //   }
  173. //  }return(0xff);     //返回該值
  174. //}
  175. ///*------------------------------------------------
  176. //按鍵值處理函數(shù),返回掃鍵值
  177. //------------------------------------------------*/
  178. //unsigned char KeyPro(void)
  179. //{
  180. //         switch(KeyScan())
  181. //         {
  182. //                  case 0x7e:return 0;break;//0 按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值
  183. //                  case 0x7d:return 1;break;//1
  184. //                  case 0x7b:return 2;break;//2
  185. //                  case 0x77:return 3;break;//3
  186. //                  case 0xbe:return 4;break;//4
  187. //                  case 0xbd:return 5;break;//5
  188. //                  case 0xbb:return 6;break;//6
  189. //                  case 0xb7:return 7;break;//7
  190. //                  case 0xde:return 8;break;//8
  191. //                  case 0xdd:return 9;break;//9
  192. //                  case 0xdb:return 10;break;//a
  193. //                  case 0xd7:return 11;break;//b
  194. //                  case 0xee:return 12;break;//c
  195. //                  case 0xed:return 13;break;//d
  196. //                  case 0xeb:return 14;break;//e
  197. //                  case 0xe7:return 15;break;//f
  198. //                  default:return 0xff;break;
  199. //         }
  200. //}

  201. unsigned char KeyPro(void)
  202. {
  203.         if(key1 == 0)
  204.            {
  205.                    DelayMs(10);//在此處可以添加去抖動(dòng)程序,防止按鍵抖動(dòng)造成錯(cuò)誤
  206.                    if(key1 == 0)
  207.                            while(!key1);//等待按鍵釋放
  208.                            {
  209.                              return 1;   
  210.                     }
  211.    }

  212.         if(key2 == 0)
  213.            {
  214. ……………………

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

所有資料51hei提供下載:
實(shí)訓(xùn).zip (14.19 MB, 下載次數(shù): 30)


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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2017-5-28 16:59 | 只看該作者
好東東 不過(guò)仿真文件無(wú)法打開(kāi)
回復(fù)

使用道具 舉報(bào)

板凳
ID:185367 發(fā)表于 2017-5-28 17:15 | 只看該作者
下載下來(lái)研究一下,感謝樓主分享。
回復(fù)

使用道具 舉報(bào)

地板
ID:103307 發(fā)表于 2017-5-28 18:32 | 只看該作者
不孬,收藏了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表