求:在AT89C51单片机,怎么实现任意路AD转换来控制数码管走”8“的速度
第一段代码是之前实现AD转换,光敏,热敏这些显示到数码管上的
#include <REGX51.H>
//---IO¿Ú¶¨Òå---//
sbit DOUT = P3^7; //Êä³ö
sbit CLK = P3^6; //ʱÖÓ
sbit DIN = P3^4; //ÊäÈë
sbit CS = P3^5; //Ƭѡ
unsigned char 8 =0xFF;//1111 1111
void Delay(unsigned int xms)//ÑÓʱº¯Êý
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
unsigned char showTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0~9£¬ÊýÂë¹ÜÉÏÏÔʾ
void show(unsigned char Location,unsigned char Number,unsigned char d){//¸ù¾Ý´«ÈëµÄλÖã¬Êý×ÖºÍСÊýµã£¬ÔÚÊýÂë¹ÜÉÏÏÔʾ
switch(Location)
{
case 1:P2_4=0;P2_3=0;P2_2=0;break;
case 2:P2_4=0;P2_3=0;P2_2=1;break;
case 3:P2_4=0;P2_3=1;P2_2=0;break;
case 4:P2_4=0;P2_3=1;P2_2=1;break;
case 5:P2_4=1;P2_3=0;P2_2=0;break;
case 6:P2_4=1;P2_3=0;P2_2=1;break;
case 7:P2_4=1;P2_3=1;P2_2=0;break;
case 8:P2_4=1;P2_3=1;P2_2=1;break;
}
if(d == 0){
P0=showTable[Number];
}
else{
P0=showTable[Number]|0x80;//0x80=10000000,Óë²Ù×÷£¬ÈôÔÀ´Îª1Ôò»¹ÊÇ1£¬Í¬Ê±µãÁÁСÊýµã
}
Delay(1);
P0=0x00;
}
void SPI_Start(void)
{
CLK = 0;//ʱÖÓÐźÅΪµÍµçƽ
CS = 1;//ƬѡÐźÅδѡÖÐÍⲿÉ豸
DIN = 1;//±íʾ·¢Ë͵ÄÊý¾ÝλÊÇ1£¬Êý¾ÝÊäÈë
CLK = 1;//ʱÖÓÐźÅΪ¸ßµçƽ£¬ÔÚʱÖÓÉÏÉýÑØ£¬¿ÉÄÜ»á¶ÁÈ¡ÉÏÃæµÄÐÅÏ¢
CS = 0;
}
void SPI_Write(unsigned char dat)//ÏòÍⲿÉ豸·¢ËÍÊý¾Ý
{
unsigned char i;
CLK = 0;//ÉèΪ0£¬¿ªÊ¼Ò»¸öÖÜÆÚ
for(i=0; i<8; i++)//Ñ»·8´Î£¬·¢ËÍ8λ
{
DIN = dat >> 7;//·¢Ë͵ÄÊý¾ÝÓÒÒÆ7λ£¬Ã¿´Î¶¼·¢×î¸ßλ
dat <<= 1;//ÔÙ×óÒÆ£¬ÎªÏÂÒ»´Î·¢ËÍÊý¾Ý×ö×¼±¸
CLK = 0;//¿ªÊ¼Ò»¸öÖÜÆÚ
CLK = 1;//½áÊøÒ»¸öÖÜÆÚ
}
}
unsigned int SPI_Read(void)//ÿ¶Áһ룬¾Í×óÒÆ1λ,×îжÁÈ¡µÄ¼Óµ½×îµÍλ
{
unsigned int i, dat=0;
CLK = 0;//×¼±¸¶ÁÈ¡
for(i=0; i<12; i++)//¶ÁÒ»¸ö12λµÄÎÞ·ûºÅÕûÊý
{
dat <<= 1;
CLK = 1;//×¼±¸¿ªÊ¼ÐµÄÖÜÆÚ
CLK = 0;
dat |= DOUT;//½«DOUTµÄֵͨ¹ý»òÔËËã¼Óµ½×îµÍλ
}
return dat; //·µ»Ø¶ÁÈ¡µÄ
}
unsigned int SPI(unsigned char dat){
SPI_Start();
SPI_Write(dat);
return SPI_Read();
}
unsigned int ADvalue,i;
int main(){
while(1){
ADvalue=SPI(0xA4);//âÃô0xA4 µçλÆ÷ 0x94 ÈÈÃô0xD4
for(i=0;i<40;i++){
show(1,ADvalue/1000%10,0);//ǧλ
show(2,ADvalue/100%10,1);//°Ùλ
show(3,ADvalue/10%10,0);//Ê®
show(4,ADvalue%10,0);//¸ö
}
}
}