欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
步進電機控制_液晶顯示
[打印本頁]
作者:
火雞味鍋巴
時間:
2020-12-1 22:18
標題:
步進電機控制_液晶顯示
#include <AT89X51.h>
#include <stdio.h>
#include <math.h>
#define uc unsigned char
#define ui unsigned int
#define LCDPAGE 0xB8 //設置頁指令。
#define LCDLINE 0x40 //設置列指令。
sbit E= P3^5;
sbit RW=P3^4;
sbit RS=P3^2;
sbit L=P3^1; //左半平面
sbit R=P3^0; //右半平面
sbit Busy=P2^7;// //忙 判斷位
uc scan_key1,scan_key2; //按鍵功能選擇,00 停止,01 正轉 10 反轉
uc step1;step2;
static step_index;
ui count1,count2; //定時
uc butter; //按鍵
static speed; //速度參數
//;本文件為16×16點陣中文字庫文件,字的橫向8點構成一字節(jié),左邊點在字節(jié)的高
//位,字符點陣四角按左上角→右上角→左下角→右下角取字
//;如你想在以后繼續(xù)用HZDotReader打開文件,追加漢字點陣數據,請不要修改或增刪所有注釋
uc code JIANG[]=
{
//;江 CBDAD
0x10,0x60,0x01,0xC6,0x30,0x00,0x04,0x04,
0x04,0xFC,0x04,0x04,0x04,0x04,0x00,0x00,
0x04,0x04,0x7E,0x01,0x20,0x20,0x20,0x20,
0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x00,
};
uc code XI[]=
{
//;西 CCEF7
0x02,0xF2,0x12,0x12,0x12,0xFE,0x12,0x12,
0x12,0xFE,0x12,0x12,0x12,0xF2,0x02,0x00,
0x00,0x7F,0x28,0x24,0x22,0x21,0x20,0x20,
0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00,
};
uc code LI[]=
{
//;理 CC0ED
0x44,0x44,0xFC,0x44,0x44,0x00,0xFE,0x92,
0x92,0xFE,0x92,0x92,0x92,0xFE,0x00,0x00,
0x10,0x10,0x0F,0x08,0x48,0x40,0x45,0x44,
0x44,0x7F,0x44,0x44,0x44,0x45,0x40,0x00,
};
uc GONG[]=
{
//;工 CB9A4
0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,
0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
};
uc code DA[]=
{
//;大 CB4F3
0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,
0xA0,0x20,0x20,0x20,0x20,0x30,0x20,0x00,
0x00,0x40,0x40,0x20,0x10,0x0C,0x03,0x00,
0x01,0x06,0x08,0x10,0x20,0x60,0x20,0x00
};
uc XUE[]=
{
//;學 CD1A7
0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,
0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,
0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
};
uc code ZI[]= //自動化
{
0x00,0x00,0x00,0xF8,0x48,0x48,0x4C,0x4B,
0x4A,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,
0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00,
};
uc code DONG[]=
{
0x20,0x24,0x24,0xE4,0x24,0x24,0x24,0x20,
0x10,0x10,0xFF,0x10,0x10,0xF0,0x00,0x00,
0x08,0x1C,0x0B,0x08,0x0C,0x05,0x4E,0x24,
0x10,0x0C,0x03,0x20,0x40,0x3F,0x00,0x00,
};
uc code HUA[]=
{
0x80,0x40,0x20,0xF8,0x07,0x02,0x00,0x00,
0xFF,0xC0,0x60,0x30,0x1C,0x08,0x00,0x00,
0x00,0x00,0x00,0x7F,0x00,0x04,0x02,0x01,
0x3F,0x40,0x40,0x40,0x40,0x78,0x00,0x00,
};
uc code CHANG[]= //常
{
0x20,0x18,0x08,0x09,0xEE,0xAA,0xA8,0xAF,
0xA8,0xA8,0xEC,0x0B,0x2A,0x18,0x08,0x00,
0x00,0x00,0x3E,0x02,0x02,0x02,0x02,0xFF,
0x02,0x02,0x12,0x22,0x1E,0x00,0x00,0x00,
};
uc code YUN[]= //運
{
0x40,0x41,0xCE,0x04,0x00,0x20,0x22,0xA2,
0x62,0x22,0xA2,0x22,0x22,0x22,0x20,0x00,
0x40,0x20,0x1F,0x20,0x28,0x4C,0x4A,0x49,
0x48,0x4C,0x44,0x45,0x5E,0x4C,0x40,0x00,
};
uc code XING[]= //行
{
0x10,0x08,0x84,0xC6,0x73,0x22,0x40,0x44,
0x44,0x44,0xC4,0x44,0x44,0x44,0x40,0x00,
0x02,0x01,0x00,0xFF,0x00,0x00,0x00,0x00,
0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,
};
uc code ZHENG[ ] =
{
/*正 CD5FD */
0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0x02,
0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,
0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,
0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
};
uc code ZHUAN[ ] =
{
/*轉 CD7AA */
0xC8,0xA8,0x9C,0xEB,0x88,0x88,0x88,0x40,
0x48,0xF8,0x4F,0x48,0x48,0x48,0x40,0x00,
0x08,0x08,0x04,0xFF,0x04,0x04,0x00,0x02,
0x0B,0x12,0x22,0xD2,0x0E,0x02,0x00,0x00,
};
uc code FAN[ ] =
{
/*反 CB7B4 */
0x00,0x00,0xFE,0x12,0x72,0x92,0x12,0x12,
0x12,0x11,0x91,0x71,0x01,0x00,0x00,0x00,
0x40,0x30,0x4F,0x40,0x20,0x21,0x12,0x0C,
0x0C,0x12,0x11,0x20,0x60,0x20,0x00,0x00,
};
uc code TING[] =
{
/*停 CCDA3 */
0x80,0x40,0x20,0xF8,0x07,0x02,0x04,0x74,
0x54,0x55,0x56,0x54,0x74,0x04,0x04,0x00,
0x00,0x00,0x00,0xFF,0x00,0x03,0x01,0x05,
0x45,0x85,0x7D,0x05,0x05,0x05,0x03,0x00,
};
uc code ZHI[ ] =
{
/*止 CD6B9 */
0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,
0xFF,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,
0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
};
uc code JIA[]= //加
{
0x00,0x08,0x08,0x08,0xFF,0x08,0x08,0xF8,
0x00,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00,
0x40,0x20,0x18,0x07,0x00,0x20,0x40,0x3F,
0x00,0x7F,0x10,0x10,0x10,0x3F,0x00,0x00,
};
uc code SU[]= //速
{
0x40,0x42,0xCC,0x00,0x04,0xE4,0x24,0x24,
0xFF,0x24,0x24,0x24,0xE4,0x04,0x00,0x00,
0x40,0x20,0x1F,0x20,0x48,0x49,0x45,0x43,
0x7F,0x41,0x43,0x45,0x4D,0x40,0x40,0x00,
};
uc code JIAN[]= //減
{
0x00,0x02,0xEC,0x00,0xF8,0x28,0x28,0x28,
0x28,0x28,0xFF,0x08,0x8A,0xEC,0x48,0x00,
0x02,0x5F,0x20,0x18,0x07,0x00,0x1F,0x49,
0x5F,0x20,0x13,0x0C,0x13,0x20,0x78,0x00,
}; //輸出空白區(qū)域
uc code BAI[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
uc code DI[]= //低
{
0x40,0x20,0xF0,0x0C,0x07,0x02,0xFC,0x44,
0x44,0x42,0xFE,0x43,0x43,0x42,0x40,0x00,
0x00,0x00,0x7F,0x00,0x00,0x00,0x7F,0x20,
0x10,0x28,0x43,0x0C,0x10,0x20,0x78,0x00,
};
//////////////////函數聲明 **************////////
//************************************************
void iniLCD(void);
void chkbusy(void);
void wcode(uc cd) ;
void wdata(uc dat);
void disrow(uc page,uc col,uc *temp);
void display( uc page,uc col,uc *temp);
void ground(step); //轉步
void run1(); //正轉
void run2();
void stop();
void delay(ui time);
//************************************
//**************LCD初始化 ***************
//*********************************
void iniLCD(void) //初始化
{ L=1;R=1;
wcode(0x38);
wcode(0x0f); //開顯示 設置
wcode(0xc0); //設置顯示啟動為第一行
wcode(0x01); //清屏
wcode(0x06); //畫面不動,光標右移。
}
//******************LCD判斷忙的子程序**********
//**********************************************8
void chkbusy(void) // 測LCD忙狀態(tài)
{
E=1; //使能LCD
RS=0; //讀寫指令
RW=1; //讀
P2=0xff; //讀操作前先進行一次空讀操作 ,接下來才能讀到數據
while(!Busy); //等待,不忙退出
}
//*****************************************
//*****************寫指令代碼*****************
//***********************************************
void wcode(uc cd) //寫指令 代碼
{
chkbusy(); //寫等待
P2=0xff; //使能LCD
RW=0; //讀禁止
RS=0; //輸出 設置
P2=cd; //寫數據代碼
E=1; //以下兩句產生下降沿
E=0; //
}
//*******************把顯示數據寫到內存單元中 *****************
void wdata(uc dat) //寫顯示數據
{
chkbusy(); //寫等待
P2=0xff; //使能LCD
RW=0; //讀禁止
RS=1; //輸出 設置
P2=dat; //寫數據代碼
E=1; //以下兩句產生下降沿
E=0; //
}
//***********************************************
//****************顯示LCD程序********************
//*****************可以更改程序中的64變?yōu)?2就可以輸出數字了**********
//****************************************************************
//*************還可以換成生成圖片的形式,具體****************
///****************************************************
void disrow(uc page,uc col,uc *temp)
{
uc i;
if(col<64) // 左半平面
{
L=1;R=0;
wcode(LCDPAGE+page); // 寫指令 頁
wcode(LCDLINE+col); //寫指令行
if((col+16)<64) //如果字在左半平面顯示不了,轉到右半平面去
{
for(i=0;i<16;i++) //寫字
wdata(*(temp+i));
}
else //右半平面
{
for(i=0;i<64-col;i++) //減去左邊數,從右半平面第一位開始顯示
wdata(*(temp+i)); //寫字 顯示
L=0;R=1; //右半平面
wcode(LCDPAGE+page); // 寫指令 頁
wcode(LCDLINE); //寫指令行
for(i=64-col;i<16;i++) //寫字 右半平面
wdata(*(temp+i));
}
}
else
{
L=0;R=1;
wcode(LCDPAGE+page); // 寫指令 頁
wcode(LCDLINE+col-64); //寫指令行
for(i=0;i<16;i++) //寫字
wdata(*(temp+i));
}
}
//*********************供調用 ****子程序 *************
//****************************************
void display( uc page,uc col,uc *temp)
{
disrow( page, col, temp); //顯示上半字
disrow( page+1, col, temp+16); //顯示下半字
}
//***********************主***控****程********序********************
//******************************************************************
//***************程序完成于2008年6月 1日,兒童節(jié)********************
//***************程序員:韓福偉************************************
//**********江西理工大學應用科學學院機電學部自動化******************
//******************************************************************
//*********
void main(void)
{
P2=0xff;
iniLCD(); //初始化 LCD
display(0,0x00,&JIANG); // 江
display(0,0x10,&XI); // 西
display(0,0x20,&LI); // 理
display(0,0x30,&GONG); // 工
display(0,0x40,&DA); // 大
display(0,0x50,&XUE); // 學
step2=0;
step1=0;
P1=0xff;
P0=0;
EX1=1;
EA=1; //開中斷
speed=2010;
while(1)
{
if((scan_key1==1)&(scan_key2==0)) // 正轉
{
display(6,0x00,&ZHENG); // LCD顯示
display(6,0x10,&ZHUAN);
ground(step_index);
delay(speed);
step_index++; //大于7,從頭再來
if(step_index>7)
step_index=0;
}
if((scan_key1==0)&(scan_key2==1)) //反轉
{
ground(step_index);
display(6,0x00,&FAN); // LCD顯示
display(6,0x10,&ZHUAN);
delay(speed);
step_index--;
if(step_index<0) //小于0,從頭再來。
step_index=7;
}
if(scan_key1==0&scan_key2==0)
{
display(6,0x00,&TING); // 停止
display(6,0x10,&ZHI);
display(6,0x20,&BAI);
display(6,0x30,&BAI);
P0=0xff;
}
if(step1==1&step2==0)
{
speed=speed-100;
if(speed<200|speed==200) //小于話,說明電機的速度不能再提高了。
{ speed=200; //speed參數自己設定,以下遇到也是一樣的。我只是一個亂寫的值
display(6,0x20,&ZHENG); //正常運行
display(6,0x30,&CHANG);
display(6,0x40,&YUN);
display(6,0x50,&XING);
}
else //加速
{
display(6,0x20,&JIA);
display(6,0x30,&SU);
}
}
if(step1==0&step2==1)
{
speed=speed+100; //這里面的參數,論實際情況更改
if(speed>2500|speed==2500) //如果 小于了,就說明到餓低速,可以用停止按鍵停止。
{ speed=2500; //低速運行
display(6,0x20,&DI);
display(6,0x30,&SU);
display(6,0x40,&YUN);
display(6,0x50,&XING);
}
else
{
display(6,0x20,&JIAN); //減速
display(6,0x30,&SU);
}
}
}
}
//***************************************************
//************************* 延時子程序**************
//**************************************************
void delay(ui time) ///延時程序
{ for (count1=0;count1<time;count1++ ) //此處可以用中斷進行準確定時。我只是瞎定了幾個參數
for(count2=0;count2<3;count2++);
}
//*********************************************************
//******************按鍵處理程序****************************
//************************************************************
void key(void) interrupt 2
{
uc i;
for(i=0;i<200;i++); //延時防抖
if(P3_3==0)
{
butter=~P1;
switch(butter)
{case 0x01: scan_key1=1;scan_key2=0; break; //正常運行 ,用兩個數字進行選擇,是不錯的辦法
case 0x02: scan_key1=0;scan_key2=0;break; //停止
case 0x04: scan_key1=0 ;scan_key2=1; break; //加速
case 0x08: step1=1;step2=0;break; //減速
case 0x10: step1=0;step2=1;break; //正轉
default : ; //其它值返回
}
}
P1=0XFF;
}
//**************************************************
//**********************轉步************************
//**************************************************
void ground(step_index) //轉步
{
switch(step_index)
{
case 0://0 // 這里就說明了同步電機是怎么轉的。我本來是用了代碼的,
P0_0 = 1; //但是后來考慮了一些初學者不懂同步電機到底怎么轉的
P0_1 = 0; //我就換成這個了, 知道怎么轉的人,就換成代碼把,一樣的
P0_2 = 0;
P0_3 = 0;
break;
case 1://0,1
P0_0 = 1;
P0_1 = 1;
P0_2 = 0;
P0_3 = 0;
break;
case 2://1
P0_0 = 0;
P0_1 = 1;
P0_2 = 0;
P0_3 = 0;
break;
case 3://1,2
P0_0 = 0;
P0_1 = 1;
P0_2 = 1;
P0_3 = 0;
break;
case 4://2
P0_0 = 0;
P0_1 = 0;
P0_2 = 1;
P0_3 = 0;
break;
case 5://2,3
P0_0 = 0;
P0_1 = 0;
P0_2 = 1;
P0_3 = 1;
break;
case 6://3
P0_0 = 0;
P0_1 = 0;
P0_2 = 0;
P0_3 = 1;
break;
case 7://3,0
P0_0 = 0;
P0_1 = 0;
P0_2 = 0;
P0_3 = 1;
}
}
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1