应该不难吧。看看我这个电位器调速的。参考一下。
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
__CONFIG(XT&UNPROTECT&PWRTEN&BORDIS&WDTEN);
union {
struct {
unsigned b0:1;
unsigned b1:1;
unsigned b2:1;
unsigned b3:1;
unsigned b4:1;
unsigned b5:1;
unsigned b6:1;
unsigned b7:1;
}tpBit;
unsigned char tpBits;
} tp;
#define bj0 tp.tpBit.b0
#define bj1 tp.tpBit.b1
#define bj tp.tpBits
const unsigned char table[]={ 0x60,0x30,0x90,0x0C0, };
const unsigned char tablef[]={0x0C0,0x90,0x30,0x060, };
uchar i;
///////AD 延时子程序////////////////
void ADdelay (uchar i)
{
while(i--) ;
}
/////// 延时子程序////////////////
void delay(uint i)
{
while(i--)
{
uchar a=127;
while(a--);
}
}
////系统 各I/O初始化子程序////////////////////
void initial (void)
{ TRISB=0;
//TRISC=0;
TRISA=0x0ff;
}
///////A/D转换初始化子程序/////////////////////
void adinitial()
{
ADCON1=0;//;设置RA为A/D甬道模拟输入
//;RC时钟。打开A/D转换器。先中通道0
ADCON0=0x0c1;// B'11000001' // ;A/D时钟为RC。RA0作A/D输入等
// ADIE=1; //时。开放中断
ADIF=0; //清/AD中断标志位 PIR1,
// PEIE=1; //开放外围部件中断INTCON,
// GIE=1; //开放总中断 INTCON,
TRISA0=1;
TRISA1=1;
}
//////////////////////////A/D转换/////////////////////////////////////////////////////////
void AD_ad()
{
ADCON0=0x0c1; // B'11001001' // ;A/D时钟为RC。RA0作A/D输入等
ADdelay(3);//采样时间30us
ADGO=1; //启动A/D转换 ADCON0,
while(ADGO); //等待
}
////////////////主程序///////////////////
void main()
{
initial (); //系统 各I/O初始化子程序
adinitial(); //A/D转换初始化子程序
i=250;
while(1)
{
unsigned char c;
for(c=0;c<4;c++)
{
if(bj0)PORTB=table[ c] ;
else PORTB=tablef[ c] ;
CLRWDT();
AD_ad();
delay(ADRES );
}
i--;
while(i==0)
{
i=250;bj0=!bj0;
}
}
}