|
這是我做的一個(gè)追蹤系統(tǒng)
包含兩部分測(cè)量顯示部分和電機(jī)驅(qū)動(dòng)部分
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
用proteus畫(huà)的仿真原理圖,還有仿真結(jié)果。
八位開(kāi)關(guān)模擬八位二進(jìn)制編碼盤(pán)角度精度360/2^8=1.40625度
顯示電路選用數(shù)碼管動(dòng)態(tài)掃描顯示,顯示角度-180~+180度
000000000000000000000000000000000
電機(jī)驅(qū)動(dòng)用于接收單片機(jī)正負(fù)旋轉(zhuǎn)信號(hào),驅(qū)動(dòng)電機(jī)正反轉(zhuǎn)
單片機(jī)源程序如下:
- #include "reg51.h"
- sbit M1=P2^6;
- sbit M2=P2^7;
- sbit P20=P2^0;
- sbit P21=P2^1;
- sbit P22=P2^2;
- sbit P23=P2^3;
- sbit P24=P2^4;
- unsigned int table[10]={
- 0xC0, //"0"
- 0xF9, //"1"
- 0xA4, //"2"
- 0xB0, //"3"
- 0x99, //"4"
- 0x92, //"5"
- 0x82, //"6"
- 0xF8, //"7"
- 0x80, //"8"
- 0x90, //"9"
- };
- float Angle,jiaodu;
- void Sys_Init() //端口初始電平
- {
- P0=0XFF;
- P1=0XFF;
- P2=0Xe0;
- }
- float Read_Data() //從P1口讀四位二進(jìn)制碼,轉(zhuǎn)化為角度值
- {
- unsigned int y=0;
- float x=0.0;
- y=0XFF^P1;
- x=y*1.4;
- return x;
- }
- void Delay10ms() //延時(shí)函數(shù)
- {
- unsigned char i, j;
- i = 20;
- j = 113;
- do
- {
- while (--j);
- } while (--i);
- }
- void Display() //顯示函數(shù)
- {
- unsigned int i;
- unsigned B,C,D,E;
- // A=Angle/1000; //千位
- if(jiaodu>180)
- Angle=360.0-jiaodu;
- else Angle=jiaodu;
- B=(((int)Angle)%1000)/100; //百位
- C=((int)Angle)%100/10; //十位
- D=((int)Angle)%10; //個(gè)位
- E=((int)(jiaodu*10))%10; //十分位
- for(i=0;i<5;i++)
- {
- switch(i)
- {
- case 0:
- P20=1; //位選端打開(kāi)
- if(jiaodu>180)
- P0=0xBF; //向P0口輸數(shù)據(jù)
- else P0=0xC0;
- Delay10ms(); //延時(shí)
- P20=0; //位選端關(guān)閉
- break;
- case 1:
- P21=1;
- P0=table[B];
- Delay10ms();
- P21=0;
- break;
- case 2:
- P22=1;
- P0=table[C];
- Delay10ms();
- P22=0;
- break;
- case 3:
- P23=1;
- P0=table[D];
- Delay10ms();
- P23=0;
- break;
- case 4:
- P24=1;
- P0=table[E];
- Delay10ms();
- P24=0;
- break;
- default:
- break;
- }
- }
- }
- void Motor_Ctrl() //步進(jìn)電機(jī)脈沖
- {
- if(jiaodu<=180) //角度小于180度P26輸出一個(gè)脈沖
- {
- M1=0;
- M2=1;
- Delay10ms();
- M1=1;
- }
- else if(jiaodu>180) //角度大于180度P27輸出脈沖
- {
- M1=1;
- M2=0;
- Delay10ms();
- M2=1;
- }
- else
- {
- M1=1;
- M2=1;
- }
- }
- void main() //主函數(shù)
- {
- Sys_Init();
- while(1)
- {
- jiaodu=Read_Data();
- Motor_Ctrl();
- Display();
- }
- }
復(fù)制代碼
全部資料51hei下載地址:
課程設(shè)計(jì).zip
(30.2 KB, 下載次數(shù): 96)
2019-4-8 15:01 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|