仿真原理图如下
单片机源程序如下:
//-----------------------------------------------------------------
// 名称: 8×8LED点阵屏显示数字
//-----------------------------------------------------------------
// 说明: 8×8LED点阵屏循环显示数字0-9,刷新过程由定时器中断完成
//
//-----------------------------------------------------------------
#include
#define INT8U unsigned char
#define INT16U unsigned int
#define _XTAL_FREQ 1000000UL
unsigned char s,m;
unsigned char column[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //column number select chart
//数字0~9的8*8点阵编码
//const INT8U Table_OF_Digits[] =
//{
//};
const unsigned char dot5x3[10][3] = {
{0x07,0x77,0x07}, //0 3column for 1 digit
{0xff,0x07,0xff}, //1
{0x47,0x57,0x17}, //2
{0x57,0x57,0x07}, //3
{0x1f,0xdf,0x07}, //4
{0x17,0x57,0x47}, //5
{0x07,0x57,0x47}, //6
{0x7f,0x7f,0x07}, //7
{0x07,0x57,0x07}, //8
{0x17,0x57,0x07}, //9
};
void display()
{
INT8U i,j;
for (i=0;i<32;i++)
{
for (j=0;j<12;j++)
{
if(16>i&&i>=0)
{
if(i<8)
{
PORTB=0xff; //关闭显示
PORTB=dot5x3[m/10][0]>>2|11000000;
PORTC=column[i%8]; //选通第1个点阵,显示第i列
__delay_ms(1); //显示延时
PORTC=0x00; //关闭显示
PORTB=0xff; //关闭显示
}
else
{
PORTB=0xff; //关闭显示
PORTB=dot5x3[m/10][0]>>2|11000000;
PORTD=column[i%8]; //选通第2个点阵,显示第i列
__delay_ms(1); //显示延时
PORTD=0x00; //关闭显示
PORTB=0xff; //关闭显示
}
}
if(17>i&&i>=1)
{
if(i<9)
{
PORTB=0xff; //关闭显示
PORTB=dot5x3[m/10][1]>>2|11000000;
PORTC=column[(i-1)%8]; //选通第1个点阵,显示第i列
__delay_ms(1); //显示延时
PORTC=0x00; //关闭显示
PORTB=0xff; //关闭显示
}
else
{
PORTB=0xff; //关闭显示
PORTB=dot5x3[m/10][1]>>2|11000000;
PORTD=column[(i-1)%8]; //选通第2个点阵,显示第i列
__delay_ms(1); //显示延时
PORTD=0x00; //关闭显示
PORTB=0xff; //关闭显示
}
}
if(18>i&&i>=2)
{
if(i<10)
{
PORTB=0xff; //关闭显示
PORTB=dot5x3[m/10][2]>>2|11000000;
PORTC=column[(i-2)%8]; //选通左起第2个数码管,显示i位
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』