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

51单片机——8X8点阵显示

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

74hc595.h:


#ifndef __74hc595_H__

#define __74hc595_H__

/************************************位定义************************************/

sbit DATA_IN = P1^0; //串行数据输入

sbit ST_CK = P1^1; //存储寄存器时钟输入

sbit SH_CK = P1^2; //移位寄存器时钟输入

/***********************************函数声明***********************************/

void Ser_IN(unsigned char Data); //串行数据输入

void Par_OUT(void); //串行数据输出


void Ser_IN(unsigned char Data)

{

unsigned char i;

for(i = 0; i < 8; i++)

{

SH_CK = 0; //CLOCK_MAX=100MHz

DATA_IN = Data & 0x80;

Data <<= 1;

SH_CK = 1;

}

}


void Par_OUT(void)

{

ST_CK = 0;

ST_CK = 1;

}


#endif


8x8LED.c


#include

#include "74hc595.h"


unsigned char i;

unsigned int m,n;


#define num sizeof(Digit_Tab) //代码长度

unsigned char code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned char code Digit_Tab[]= {//取模方式 阴码 列扫描 逆向

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x06,0x18,0x60,0x1D,0x60,0x18,0x06,0x00,

0x06,0x18,0x60,0x1C,0x60,0x18,0x06,0x00,

0x0B,0x1F,0x60,0x1C,0x60,0x18,0x06,0x00,

0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,

0x00,0x04,0x04,0x7E,0x4E,0x24,0x00,0x00,

0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00,

0x7C,0x02,0x02,0x7C,0x02,0x02,0x7C,0x00,

0x00,0x3C,0x42,0x42,0x42,0x24,0x00,0x00,

0x00,0x3E,0x40,0x40,0x40,0x3E,0x00,0x00,

0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,

0x0A,0x3C,0x42,0x4C,0x42,0x24,0x00,0x00,

0x00,0x3C,0x42,0x42,0x42,0x3C,0x00,0x00,

0x7C,0x02,0x02,0x7C,0x02,0x02,0x7C,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x88,0x49,0x2A,0x1F,0xB9,0x49,0x8E,0x00,

0x0A,0xFF,0x1A,0x22,0x2B,0xFE,0x2B,0x22,

0x00,0x3E,0x2E,0x2A,0x7F,0xAA,0xAA,0xBF,

0x00,0x08,0x09,0x89,0x8D,0x7B,0x09,0x08,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

};


void Display(void)

{

Ser_IN((table[i])); //列扫描数据

Ser_IN(Digit_Tab[i + n]); //查表取出行扫描数据

Par_OUT(); //输出显示

i++;

if(i == 8)

{

i = 0;

}

//循环扫描

m++;

if(m == 300)

{

m = 0;

n++;

} //滚动速度控制

if(n == num - 7)

{

n = 0; //循环显示

}

}


void Timer0_init(void)

{

TMOD = 0xf8;

TH0 = 0xcc;

TL0 = 0x00;

IE = 0x82;

TR0 = 1;

}


void Timer0_intservice(void) interrupt 1 using 0

{

TH0 = 0xf8;

TL0 = 0xcc;

Display();

}



void main (void)

{

Timer0_init();

while(1);

}


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

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