基于51单片机的灯盘检测系统使用,AT89C51作为系统主控,采用PCF8591+CD4051进行循环检测,本次的led灯一共有90个并在每个led上做了一个断路模拟开关,部分led上还设置了击穿模拟开关,led点亮使用PNP三极管进行导通,低电平的导通方式。
一、参考代码
1、扫描灯盘
本次设计使用PCF8591和CD4051配合进行90个led的扫描,首先使用传入的变量进行通道选择DA、DB、DC分别使用的引脚是P22、P23、P24进行CD4051通道的选择,ADC读取采取统一通道,即AN0通道。接着再使用成对的CD4051进行扫描,以此类推最后进行了90个led的扫描。
void ScanLed(unsigned char n)
{
//选择灯盘 1110 0011
P2 &= 0xE3;
//选择灯盘
P2 |= (n << 2);
//清除低四位
P1 &= 0xF0;
j=0;
while(j<16){
if(led_state == n+1){
P1 &= 0xf0;
//选择通道
P1 |= j;
//获取ADC的值
Invalue = read_AD_data(0x40);
if(Invalue==0 || Invalue>=250){
if(n==0){err1_led[num1] = n*16+j-1;num1++;}
if(n==1){err2_led[num2] = n*16+j-1;num2++;}
if(n==2){err3_led[num3] = n*16+j-1;num3++;}
if(n==3){err4_led[num4] = n*16+j-1;num4++;}
if(n==4){err5_led[num5] = n*16+j-1;num5++;}
}
}
j++;
}
}
2、主函数
下面是本次设