標(biāo)題:
1602液晶+步進(jìn)電機(jī)的單片機(jī)控制實(shí)訓(xùn)資料
[打印本頁]
作者:
ATXD
時(shí)間:
2017-5-28 15:40
標(biāo)題:
1602液晶+步進(jìn)電機(jī)的單片機(jī)控制實(shí)訓(xùn)資料
1602+步進(jìn)電機(jī)控制
矩陣鍵盤、附帶程序和仿真圖
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為鍵盤值
//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)//第一個按鍵,速度等級增加
// {
// 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)//第二個按鍵,速度等級減小
// {
// 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ī)啟動
// {
// StopFlag=0;
// LCD_Write_String(2,0," running ");
// }
}
}
/*------------------------------------------------
定時(shí)器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定時(shí)器,使用"|"符號可以在使用多個定時(shí)器時(shí)不受影響
//TH0=0x00; //給定初值
//TL0=0x00;
EA=1; //總中斷打開
ET0=1; //定時(shí)器中斷打開
TR0=1; //定時(shí)器開關(guān)打開
PT0=1; //優(yōu)先級打開
}
/*------------------------------------------------
定時(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) //鍵盤掃描函數(shù),使用行列反轉(zhuǎn)掃描法
//{
// unsigned char cord_h,cord_l;//行列值中間變量
// KeyPort=0x0f; //行線輸出全為0
// cord_h=KeyPort&0x0f; //讀入列線值
// if(cord_h!=0x0f) //先檢測有無按鍵按下
// {
// DelayMs(10); //去抖
// if((KeyPort&0x0f)!=0x0f)
// {
// cord_h=KeyPort&0x0f; //讀入列線值
// KeyPort=cord_h|0xf0; //輸出當(dāng)前列線值
// cord_l=KeyPort&0xf0; //讀入行線值
//
// while((KeyPort&0xf0)!=0xf0);//等待松開并輸出
//
// return(cord_h+cord_l);//鍵盤最后組合碼值
// }
// }return(0xff); //返回該值
//}
///*------------------------------------------------
//按鍵值處理函數(shù),返回掃鍵值
//------------------------------------------------*/
//unsigned char KeyPro(void)
//{
// switch(KeyScan())
// {
// case 0x7e:return 0;break;//0 按下相應(yīng)的鍵顯示相對應(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);//在此處可以添加去抖動程序,防止按鍵抖動造成錯誤
if(key1 == 0)
while(!key1);//等待按鍵釋放
{
return 1;
}
}
if(key2 == 0)
{
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
實(shí)訓(xùn).zip
(14.19 MB, 下載次數(shù): 30)
2017-5-28 15:40 上傳
點(diǎn)擊文件名下載附件
1602+步進(jìn)電機(jī)控制
下載積分: 黑幣 -5
作者:
admin
時(shí)間:
2017-5-28 16:59
好東東 不過仿真文件無法打開
作者:
半路
時(shí)間:
2017-5-28 17:15
下載下來研究一下,感謝樓主分享。
作者:
tiandiko86
時(shí)間:
2017-5-28 18:32
不孬,收藏了
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1