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

发布者:谁与争锋1最新更新时间:2020-03-24 来源: eefocus关键字:51单片机  8X8  点阵显示 手机看文章 扫描二维码
随时随地手机看文章

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);

}

关键字:51单片机  8X8  点阵显示 引用地址:51单片机——8X8点阵显示

上一篇:单片机开发 --- 8X8LED点阵
下一篇:单片机实验——8X8LED点阵显示技术(二)

推荐阅读最新更新时间:2024-11-09 16:50

51单片机实习-数码管动态显示4399(模块化编程)
#include reg52.h sbit wei0=P1^0; sbit wei1=P1^1; sbit wei2=P1^2; sbit wei3=P1^3; int zxm ={0x98,0x98,0xb0,0x99}; void delay(int i) { while(i--) { int j=0; for(;j 115;j++); } } void display() { int i; for( i=0;i 4;i++) { switch(i) { case 0: wei0=0,wei1=1,wei2=1,wei3=1;break; case
[单片机]
<font color='red'>51单片机</font>实习-数码管动态显示4399(模块化编程)
51单片机怎么驱动直流电机c语言
特点 产品 PK51 CA51 A51 设备支持 经典的8051设备 Far Memory类型 ADI公司ADuC812的家庭 Dallas Semiconductor的390家庭 NXP(飞利浦)51MX家庭 μVisionIDE IDE 调试器 模拟器 编译工具 AX51汇编 CX51的C编译器 LX51连接器 OHx51目标进制转换器 A51汇编 BL51代码空间连接器 OH51对象的十六进制转换器 OC51 banked 目标转换器
[单片机]
<font color='red'>51单片机</font>怎么驱动直流电机c语言
8051单片机基础3:C51内存模型(small, compact和large)
C51编译器支持3种内存模型 Small Model Compact Model Large Model 函数参数、automatic变量在声明时,如果没有指定内存类型,C51编译器会根据内存模型进行隐式声明; 使用内存模型的方式 1. 在源文件中使用#pragma来指定内存模型 #pragma large /* 以下代码默认使用large内存模型 */ int a; int *p; void function(int arg, int *p) { /* user code */ } 2. 在声明/定义函数时,后面加上small/compact/large对单个函数进行指定 int mtest (int
[单片机]
80<font color='red'>51单片机</font>基础3:C51内存模型(small, compact和large)
51单片机入门教程(2)——实现流水灯
一、搭建流水灯电路 在Proteus中搭建流水灯电路如图 二、流水灯程序 我们可以把流水灯看作依次点亮若干个灯。 程序如下: #include reg52.h sbit led1 = P2^0; sbit led2 = P2^1; sbit led3 = P2^2; sbit led4 = P2^3; sbit led5 = P2^4; sbit led6 = P2^5; sbit led7 = P2^6; sbit led8 = P2^7; void main() { //点亮第一个灯 led1 = 1; led2 = 0; led3 = 0; led4 = 0; led5 = 0; l
[单片机]
<font color='red'>51单片机</font>入门教程(2)——实现流水灯
51单片机-进一步理解中断函数
1.另一个外部中断 前面两讲都是围绕外部中断0(P3.2的功能)来讲解,这里我们也还有一个外部中断1(P3.3的功能)。P3.3要想实现上一讲的功能只需杜邦线接下面的IO端口即可 代码就是把“EX0”改为“EX1”,“IT0”改为“IT1”。 interrupt后面的0要改为2,函数名我们改为“EXTI1_IRQHandler()” #include reg52.h #include function.h //详见第六章第8讲 void main() { IT1 = 1; //下降沿触发模式 EX1 = 1; EA = 1; LED_Init();//初始化LED硬件模块 while
[单片机]
<font color='red'>51单片机</font>-进一步理解中断函数
AT89S51单片机的详细资料介绍
很多初学51单片机的网友会有这样的问题:AT89S51是什么 书上和网络教程上可都是8051,89C51等!没听说过有89S51 ! 这里,初学者要澄清单片机实际使用方面的一个产品概念,MCS-51单片机是美国INTE公司于1980年推出的产品,典型产品有 8031(内部没有程序存储器,实际使用方面已经被市场淘汰),8051(芯片采用HMOS,功耗是630mW,是89C51的5倍,实际使用方面已经被市场淘汰)和8751等通用产品,一直到现在, MCS-51内核系列兼容的单片机仍是应用的主流产品(比如目前流行的89S51,已经停产的89C51等),各高校及专业学校的培训教材仍与MCS-51单片机作为代表进行理论基础学习。 有
[单片机]
51单片机(六)—— GPIO控制多路LED
本文中,我们对多路LED进行控制,硬件电路如下图所示 在《51单片机(五)—— GPIO点亮一个LED》中,已经对这个电路做了详细介绍,这里不再详述。 在这个实验中,我们采用两种方法对多路LED进行控制,实验是需要把J21接口的8个引脚与单片机的P0口的8个引脚分别连接在一起。 方法一: 实现代码如下所示 #include reg52.h //包含头文件,一般情况不需要改动, sbit LED1=P0^0; //用sbit关键字 定义LED1到P00端口, sbit LED2=P0^1; sbit LED3=P0^2; sbit LED4=P0^3; sbit LED5=P0^4; sbit LED6=P0^5
[单片机]
<font color='red'>51单片机</font>(六)—— GPIO控制多路LED
51单片机最简LED驱动
得到8盏LED交替亮灭的实验效果 #include reg51.h void Delay10ms(unsigned int c); // 延时10ms void main() { while(1) { P0 = 0x00; // 设置 P0 为低电平 Delay10ms(50); // 延时 P0 = 0xff; // 设置 P0 为高电平 Delay10ms(50); // 延时 } } void Delay10ms(unsigned int c) { unsigned char a, b; for (; c 0; c--) { for (b = 38;
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved