×
单片机 > 单片机程序设计 > 详情

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

发布时间:2024-05-18 发布时间:
|

利用8X8 点阵挨个显示数字0 到9 的数字,到9后从0重新开始,如此循环。


解决方式一:通过中断方式让所有行值始终为低电平(事实上,并不是一次性让所有行值为低电平,而是挨行设置,CPU的中断时间间隔较短,当挨行设置频率较快时,可近似认为所有行值都为低电平),而列值需要根据具体数字的列值来确定,每秒改一次列值的数字。


解决方式二:通过中断方式让所有列值始终为高电平(原理同上),而行值根据具体数字的行值来确定,每秒改变一次行值的数字


以下我采用了方法一来实现。


编译环境: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 char code table2[10][8]={

{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00}, //0

{0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00}, //1

{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00}, //2

{0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00}, //3

{0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00}, //4

{0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00}, //5

{0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00}, //6

{0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00}, //7

{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00}, //8

{0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00} //9

};


unsigned int times_of_interrupt;


unsigned char i,j;



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;

i=0;

j=0;


while(1)

{}


}




void t0_interrupt_function() interrupt 1

{

P2=table1[i];

P1=table2[j][i];


i++;


if(i==8)

{

i=0;

}



if(times_of_interrupt==40)

{

times_of_interrupt=1;


j++;

if(j==10)

{

j=0;

}

}


else

{

times_of_interrupt=times_of_interrupt+1;

}

}


电路图核心部分如下:

显示效果如下:


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会