void main(vodi) { unsigned char i,n,temp; COM8255=0X80; //8255工作方式:PA/PB/PC输出 while(1) { temp = 0xFE;//扫描第一行 PA8255=temp;n=0; for(i=0;i<8;i++) //逐行扫描L1-L8行 { PC8255=str[2*n];//取字符代码 P1=str[2*n+1]; LED_delay(); temp=(temp<<1)|0x01; PA8255=temp;n++; } temp=0xFE; PB8255=temp; //逐行扫描L9-L16行 for(i=0;i<8;i++) { PC8255=str[2*n]; P1=str[2*n+1]; LED_delay(); temp=(temp<<1)|0x01; PB8255=temp;n++; } PA8255=0XFF; //关闭消隐 PB8255=0XFF; LED_delay(); } } void LED_delay() { unsigned char i =50; while(i--); }
时间: 2023-10-16 12:10:41 浏览: 131
这是一段用于控制16*16点阵显示屏的代码,主要是使用8255芯片来控制点阵的输出。具体来讲,代码中的PA8255、PB8255、PC8255等变量是对应8255芯片的三个I/O端口,通过对这些端口的控制来实现点阵输出。LED_delay函数是一个简单的延时函数,用来控制点阵的刷新速度。
代码的主要逻辑是不断地循环扫描点阵的每一行,先扫描L1-L8行,再扫描L9-L16行。在扫描每一行时,先通过PC8255变量来取得对应的字符代码,然后再通过P1变量来取得对应的字符亮度数据,最后将这些数据输出到对应的I/O端口上,控制点阵的显示。在输出完成后,使用LED_delay函数进行一定的延时,然后再开始下一次扫描。
需要注意的是,代码中的str数组没有给出定义,这个数组应该是存储了16*16点阵中每个点的状态数据,具体的值需要根据要显示的内容进行设置。此外,代码中没有给出消隐的实现,即在切换行时需要将前一行的亮度数据清零,否则会出现重影现象。
阅读全文