根据外界光强改变LED亮度

用普中的51开发板,点亮点阵中的一个LED,并使这个LED的亮度随着光敏电阻感受到的光强变化而变化。
这个开发板的点阵使用四个级联的74HC595控制的。附上用到的模块的原理图。根据外界光强改变LED亮度_第1张图片
这个是16*16的点阵。
根据外界光强改变LED亮度_第2张图片
这个是四片级联的74HC595。
根据外界光强改变LED亮度_第3张图片
这个是光敏电阻及ADC模块
随下附上我的代码,已写好十分详细的注释。

#include
sbit RCK=P1^5;         // ???????λ??????????洢?????
sbit SCK=P1^6;     //??????λ
sbit SER=P1^7;      //????????74HC595
sbit DOUT=P2^7;        //??????????????????
sbit DIN=P2^6;     //??????????????
sbit CS=P2^5;     //????????                
sbit DCLK=P2^4;     //???????
unsigned char a=0;    //1ms
unsigned char n=1;    //pwm??
unsigned int L=0;    //????????
unsigned int out=0;    //???????
void delay(unsigned char x)   //???????
{
 unsigned char i;
 while(x--)
 for(i=0;i<120;i++);
}
void uint()   //??????????
{
 IE=0X82;
 TMOD=0X02; //T0????????2
 TH0=0Xc9; //???
 TL0=0Xc9;
 n=1;  //???????? 
 TR0=1;
}
void DZ()   // ?????????е????LED
{
 unsigned char i,x=120; 
 while(x--)
 {
 RCK=0;
 for(i=0;i<32;i++)
 { 
   SCK=0;
  if(i<16)    
  { if(i==7)    //?????
   SER=0;
   else
   SER=1;}
  else
  { if(i==23)   //?????
   SER=n;
   else
   SER=0;}    
  SCK=1;   //SCK????????????λ    
 }
 RCK=1;      //RCK??????????????洢?????
 }
}
void uint1()   //AD???????
{
 CS=0;
 DCLK=0;
 out=0;
}
void crol()    //д??????
{
 unsigned char crol1=0xA4,i;
 for(i=0;i<8;i++)    
 { 
  DIN=crol1>>7; 
  DCLK=0;
  DCLK=1;
  crol1=crol1<<1;
 }
}
void dout()      //?????
{
 unsigned char i;
 for(i=0;i<12;i++)    
 {
  out=out|DOUT;
  DCLK=1;
  DCLK=0;  
   out=out<<1; 
 }
 L=out/10;
}
void time0() interrupt 1 //????pwm??
{
 a++;
 if(a==L)
 n=0;
 if(a==50)
 {
  n=1;
  a=0;
 } 
}
void main()
{
 uint();
 while(1)
 {
 uint1();
 crol();
 delay(1);   //???????????????????????
 dout(); 
  DZ();
 }
}

注释为什么都变成问号了,尴尬。凑合看一下吧。
再附上成果视频。
视频链接

你可能感兴趣的:(51单片机)