|
1602+步進(jìn)電機(jī)控制
矩陣鍵盤(pán)、附帶程序和仿真圖
0.png (76.11 KB, 下載次數(shù): 75)
下載附件
2017-5-28 16:55 上傳
單片機(jī)源程序如下:
- #include<reg52.h>
- #include<stdio.h>
- #include"1602.h"
- #include"delay.h"
- sbit A1=P2^0; //定義步進(jìn)電機(jī)連接端口
- sbit B1=P2^1;
- sbit C1=P2^2;
- sbit D1=P2^3;
- sbit key1=P3^7;
- sbit key2=P3^4;
- sbit key3=P1^7;
- sbit key4=P1^3;
- #define KeyPort P3
- void Init_Timer0(void);
- unsigned char KeyPro(void);
- #define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通電,其他相斷電
- #define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通電,其他相斷電
- #define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通電,其他相斷電
- #define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
- #define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通電,其他相斷電
- #define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通電,其他相斷電
- #define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通電,其他相斷電
- #define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
- #define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部斷電
- unsigned char Speed=1;
- bit StopFlag;
- unsigned char code code_1602[]={'1','2','3','4','5','6','7','8','9'};//轉(zhuǎn)換成液晶顯示的字符
- main()
- {
- unsigned int i=512;//旋轉(zhuǎn)一周時(shí)間
- // unsigned char num;
- unsigned shi,ge;
- Init_Timer0();
- LCD_Init();
- // LCD_Clear();
-
- while(1) //正向
- {
- //num為鍵盤(pán)值
- //num=KeyPro();
- //LCD_Write_String(0,1,"Speed:0");
- switch(KeyPro())
- {
- case 1:{
- Coil_OFF
- StopFlag=1;
- LCD_Write_String(2,0," stop ");
- LCD_Write_String(0,1,"Speed:0");
- }break;
- case 2:{
- StopFlag=0;
- LCD_Write_String(2,0," running ");
- }break;
- case 3:{
- if(Speed<18)
- {
- Speed++;
- LCD_Write_String(2,0," Speed up ");
- LCD_Write_String(0,1,"Speed:");
- shi=Speed/10;
- ge=Speed%10;
- LCD_Write_Char(6,1,code_1602[shi]);
- LCD_Write_Char(7,1,code_1602[ge]);
- }
- }break;
- case 4:{
- if(Speed>1)
- {
- Speed--;
- LCD_Write_String(2,0,"Speed down");
- LCD_Write_String(0,1,"Speed:");
- LCD_Write_Char(6,1,code_1602[Speed]);
- }
- }break;
- }
- // if(num==2)//第一個(gè)按鍵,速度等級(jí)增加
- // {
- // if(Speed<18)
- // {
- // Speed++;
- // LCD_Write_String(2,0," Speed up ");
- // LCD_Write_String(0,1,"Speed:");
- // shi=Speed/10;
- // ge=Speed%10;
- // LCD_Write_Char(6,1,code_1602[shi]);
- // LCD_Write_Char(7,1,code_1602[ge]);
- // }
- // }
- // else if(num==3)//第二個(gè)按鍵,速度等級(jí)減小
- // {
- // if(Speed>1)
- // Speed--;
- // LCD_Write_String(2,0,"Speed down");
- // LCD_Write_String(0,1,"Speed:");
- // LCD_Write_Char(6,1,code_1602[Speed]);
- // }
- // else if(num==0)//電機(jī)停止
- // {
- // Coil_OFF
- // StopFlag=1;
- // LCD_Write_String(2,0," stop ");
- // LCD_Write_String(0,1,"Speed:0");
- // }
- // else if(num==1)//電機(jī)啟動(dòng)
- // {
- // StopFlag=0;
- // LCD_Write_String(2,0," running ");
- // }
- }
- }
- /*------------------------------------------------
- 定時(shí)器初始化子程序
- ------------------------------------------------*/
- void Init_Timer0(void)
- {
- TMOD |= 0x01; //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響
- //TH0=0x00; //給定初值
- //TL0=0x00;
- EA=1; //總中斷打開(kāi)
- ET0=1; //定時(shí)器中斷打開(kāi)
- TR0=1; //定時(shí)器開(kāi)關(guān)打開(kāi)
- PT0=1; //優(yōu)先級(jí)打開(kāi)
- }
- /*------------------------------------------------
- 定時(shí)器中斷子程序
- ------------------------------------------------*/
- void Timer0_isr(void) interrupt 1
- {
- static unsigned char times,i;
- TH0=(65536-1000)/256; //重新賦值 1ms
- TL0=(65536-1000)%256;
-
- //Display(0,8);
- if(!StopFlag)
- {
- if(times==(20-Speed))//最大值18,所以最小間隔值20-18=2
- {
- times=0;
-
- switch(i)
- {
- case 0:Coil_A1;i++;break;
- case 1:Coil_B1;i++;break;
- case 2:Coil_C1;i++;break;
- case 3:Coil_D1;i++;break;
- case 4:i=0;break;
- default:break;
- }
- }
- times++;
- }
- }
- ///*------------------------------------------------
- //按鍵掃描函數(shù),返回掃描鍵值
- //------------------------------------------------*/
- //unsigned char KeyScan(void) //鍵盤(pán)掃描函數(shù),使用行列反轉(zhuǎn)掃描法
- //{
- // unsigned char cord_h,cord_l;//行列值中間變量
- // KeyPort=0x0f; //行線輸出全為0
- // cord_h=KeyPort&0x0f; //讀入列線值
- // if(cord_h!=0x0f) //先檢測(cè)有無(wú)按鍵按下
- // {
- // DelayMs(10); //去抖
- // if((KeyPort&0x0f)!=0x0f)
- // {
- // cord_h=KeyPort&0x0f; //讀入列線值
- // KeyPort=cord_h|0xf0; //輸出當(dāng)前列線值
- // cord_l=KeyPort&0xf0; //讀入行線值
- //
- // while((KeyPort&0xf0)!=0xf0);//等待松開(kāi)并輸出
- //
- // return(cord_h+cord_l);//鍵盤(pán)最后組合碼值
- // }
- // }return(0xff); //返回該值
- //}
- ///*------------------------------------------------
- //按鍵值處理函數(shù),返回掃鍵值
- //------------------------------------------------*/
- //unsigned char KeyPro(void)
- //{
- // switch(KeyScan())
- // {
- // case 0x7e:return 0;break;//0 按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值
- // case 0x7d:return 1;break;//1
- // case 0x7b:return 2;break;//2
- // case 0x77:return 3;break;//3
- // case 0xbe:return 4;break;//4
- // case 0xbd:return 5;break;//5
- // case 0xbb:return 6;break;//6
- // case 0xb7:return 7;break;//7
- // case 0xde:return 8;break;//8
- // case 0xdd:return 9;break;//9
- // case 0xdb:return 10;break;//a
- // case 0xd7:return 11;break;//b
- // case 0xee:return 12;break;//c
- // case 0xed:return 13;break;//d
- // case 0xeb:return 14;break;//e
- // case 0xe7:return 15;break;//f
- // default:return 0xff;break;
- // }
- //}
- unsigned char KeyPro(void)
- {
- if(key1 == 0)
- {
- DelayMs(10);//在此處可以添加去抖動(dòng)程序,防止按鍵抖動(dòng)造成錯(cuò)誤
- if(key1 == 0)
- while(!key1);//等待按鍵釋放
- {
- return 1;
- }
- }
- if(key2 == 0)
- {
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
實(shí)訓(xùn).zip
(14.19 MB, 下載次數(shù): 30)
2017-5-28 15:40 上傳
點(diǎn)擊文件名下載附件
1602+步進(jìn)電機(jī)控制 下載積分: 黑幣 -5
|
|