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

pic16f877加2块8x8led点阵滚动显示数字时钟Proteus仿真程序

发布时间:2024-06-14 发布时间:
|

仿真原理图如下

单片机源程序如下:

//-----------------------------------------------------------------

// 名称: 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位

[1] [2] [3] [4] [5]
pic16f8778x8led点阵滚动显示数字时钟

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

热门文章 更多
AVR单片机中RC电容触摸的感应原理解析