资源描述:
《单片机项目20-8×8LED点阵》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、单片机学习项目项目20-8×8LED点阵一:电路仿真点阵式LED屏驱动电路分列驱动和行驱动,在占用单片机较少I/O口资源情况下,选用串口芯片作为LED点阵显示屏的驱动接口。为了更详细的说明LED点阵驱动原理,我们先看一个8×8点阵模块驱动电路。图6-4-5所示是一种字符显示的个8×8点阵模块驱动仿真电路,8条列线和8条行线分别利用74HC595输出,其中U3为列驱动,Q7为高位,输出显示的数据,U2为行扫描,Q0接点阵的行扫描先C0。驱动电路与单片机连接只用3条数据线。下面设计程序,让点阵电路仿真显示0~9数字。二:程序设计74HC595是一种带有锁
2、存输出功能的移位寄存器,可以实现8位串行数据到并行数据的转换,通过级联也可以实现多位数据的并行转换。本例中显示一帧图像需要发送列数据,即字符显示数据,又要发送行扫描数据,因此程序中需要设计一个发送1字节数据函数和一个锁存函数。由于要控制每帧图像显示时间,所以又要用到单片机的定时器中断。点阵显示秒时间0~9数字程序如下:/*预处理*/#includeunsignedcharscan[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedintcp1,cp2,cp3;unsignedch
3、ardianzhen[10][8]={ {0x00,0x1C,0x22,0x22,0x22,0x22,0x22,0x1C},//0{0x00,0x08,0x18,0x08,0x08,0x08,0x08,0x3C},//1{0x00,0x1C,0x02,0x02,0x1C,0x20,0x20,0x1C},//2{0x00,0x1C,0x22,0x02,0x0C,0x02,0x22,0x1C},//3{0x00,0x0C,0x14,0x14,0x24,0x3E,0x04,0x04},//4{0x00,0x1C,0x20,0x20,0x1C,0x02,0x
4、02,0x1C},//5{0x00,0x1C,0x20,0x20,0x1C,0x22,0x22,0x1C},//6{0x00,0x3E,0x02,0x02,0x04,0x08,0x08,0x08},//7{0x00,0x1C,0x22,0x22,0x1C,0x22,0x22,0x1C},//8{0x00,0x1C,0x22,0x22,0x1C,0x02,0x02,0x1C},//9}; //0~9字符数组sbitscp=P0^0;sbitsd=P0^1;sbitsct=P0^2;/*发送一字节数据*/voidsend(unsignedcharx
5、){unsignedchari;for(i=0;i<8;i++){scp=0;sd=(bit)(x&0x80);//高位在前x=x<<1;scp=1;}}/*74HC595锁存输出*/voidsuocun(void){sct=0;sct=1;}/*定时器中断服务函数*/voidtimer0_isr(void)interrupt1{TH0=(65535-2000)/256;TL0=(65535-2000)%256;cp1++;if(cp1>=8)cp1=0;cp2++;if(cp2>500)//1秒{cp2=0;cp3++;if(cp3>=10)//1
6、0秒cp3=0;}send(scan[cp1]); //先发送行扫描send(dianzhen[cp3][cp1]); //后发送8位列数据,与行扫描对应的列数据suocun(); //行列控制器锁存输出,每帧图像显示时间为2毫秒}/*定时器中断初始化函数*/voidtimer0_init(void){TMOD=0x01;TH0=(65535-2000)/256;TL0=(65535-2000)%256;EA=1;ET0=1;TR0=1;
7、 }voidmain(void){timer0_init();while(1);}