单片机实验——8X8LED点阵显示技术

在8X8 LED 点阵上显示柱形,让其先从左到右平滑移动1次,其次从右到左
平滑移动1次,再次从上到下平滑移动1次,最后从下到上平滑移动次,
如此循环下去。

 

LED显示原理:显示某一个点时,列值设为1,行值设为0即可

 

编译环境:KEIL C51 V3
电路仿真软件:proteus 7.4
单片机类型:AT89C52

LED类型:MATRIX-8X8-RED

 

单片机上代码如下:

 

#include unsigned char code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char code table2[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned int times_of_interrupt; unsigned char display_times; unsigned char i; void main() { TMOD=0x01; //定时器/计数器工作方式为16位定时/计数器 //给定时器/计数器T0装入预定初值 TH0=(65535-60000)/256; TL0=(65535-60000)/256; TR0=1; //设置定时器/计数器T0为定时器状态 ET0=1; //打开定时器ET0中断允许标志位 EA=1; //打开CPU中断允许标志位 times_of_interrupt=0; display_times=1; i=0; while(1) {} } void t0_interrupt_function() interrupt 1 { if(times_of_interrupt==20) { times_of_interrupt=1; if(display_times==1) { P2=table1[i]; P1=0xff; i++; if(i==8) { i=0; display_times++; } } if(display_times==2) { P2=table1[7-i]; P1=0xff; i++; if(i==8) { i=0; display_times++; } } if(display_times==3) { P2=0x00; P1=table2[i]; i++; if(i==8) { i=0; display_times++; } } if(display_times==4) { P2=0x00; P1=table2[7-i]; i++; if(i==8) { i=0; display_times=1; } } } else { times_of_interrupt=times_of_interrupt+1; } }

 

电路图核心部分如下:

 

你可能感兴趣的:(【嵌入式/单片机】,table,function,工作,c)