?? c0851f330 a-d轉換.txt
字號:
//P0.4(20腳口)控轉向→數字輸入,開漏輸出,要跳過
//P0.5(19腳口)控制pwm→數字輸入,推挽輸出,不要跳過
//P1.4(12腳口)接電位器,正輸入
//P1.5(11腳口)接電位器,負輸入
//P0.0(4腳口)VREF基準電壓,與P1.5(11腳口)連一塊
//P0.0,P1.4,P1.5均為模擬輸入,開漏輸出,都要跳過
//通過if~else判斷語句實現電位器由一端轉向另一端,電機有快速正轉慢慢速度減小,電位器過中間時候速度為0,再是反轉,速度慢慢增大電位器轉到底,速度達反向最大
#include <c8051f330.h>
sbit a4=P0^4; //P0.4給定左右輪方向
sbit a5=P0^5; //PWM輸出
unsigned L;
void pwm123(void) //PWM的初始化
{
PCA0MD &= ~0x40;
PCA0CN=0x40; //允許PCA工作
PCA0MD=0x02; //PCA時鐘為4分頻
PCA0CPM0=0x42; //設置左輪為8為PWM輸出
}
void pio(void)
{
P0MDIN=0xFE;//注意P0.0用VREF功能模擬輸入置0→1111 1110
P0MDOUT=0xEE; //P0.4控轉向要驅動能力強選擇開漏置0;P0.5控制轉速就選擇開關能力強更好些置1;P0.0在接均壓電阻,要驅動能力強選擇開漏置0→1110 1110
P0SKIP=0xDF;//不跳過P0.5,因為它是控制轉速,要給CEX0功能留著;P0.0用到了VREF功能,屬于被在設使用,必須跳過→1101 1111
P1MDIN=0xCF; //P1.4接電位,隨時控制轉速大小,為模擬輸入;P1.5接均壓電阻,也為模擬輸入→1100 1111
P1MDOUT=0xCF; //我覺得P1.4,P1.5外接電位器,屬于接了負載,要驅動能力強的,選擇開漏置0→1100 1111
P1SKIP=0xFF;//外設使用到P1.4和P1.5,必須跳過→1111 1111
XBR0=0x00;
XBR1=0xC1; //CEX0
}
void sysclk(void) //內部晶振
{
OSCICL=0x2D; //20MHZ
OSCICN=0xC2;// 二分頻,分后為10MHZ
CLKSEL=0x00;
}
void AD(void)
{
AMX0P=0x0C;//正輸入選擇P1.4→0000 1100
AMX0N=0x0D;//負輸入選擇P1.5→0000 1101
REF0CN=0x00;//選擇基準電壓VREF→0000 0000
ADC0CF=0x24;//2M SAR,左對齊→0010 0100
ADC0CN=0x80;//→1000 0000
}
main( )
{
PCA0MD &= ~0x40;// 關狗
sysclk();
pio();
pwm123() ;
AD();
a4=1;//電機轉向
a5=0;
while(1)
{
AD0BUSY=0;
AD0BUSY=1;//開啟轉換
L=ADC0H;
if((L>=0)&&(L<=127))//千萬記得加等號,否則有突變的情況,“=127”沒加對應的8突變到0,“=0”沒加是反向的0突變到8
{ //ADC0H是0~127的范圍
a4=0; //正轉
L=L*2;//使0~127能控制0~255的速度
L=255-L;//與電位器的旋轉相搭配
PCA0CPH0=L;//將轉換好的值賦給PCA0CPH0
}
else
{ //ADC0H是128~255的范圍
a4=1; //反轉
L=255-L; //為以下轉為速度準備使L的范圍是0~128
L=L*2; //同上
L=255-L; //同上
PCA0CPH0=L;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -