PIC单片机-LED阵列的使用

发布者:平安宁静最新更新时间:2019-05-11 来源: eefocus关键字:PIC单片机  LED阵列  循环显示 手机看文章 扫描二维码
随时随地手机看文章

编写程序,在Led阵列上依次循环显示自己的学号及姓名拼音的缩写

/*******************************************************************************

* 标    题: LED点阵显示

* 功能描述: LED点阵循环显示"141270049ZRJ"

*******************************************************************************/

#include

 

#define uint8 unsigned char

#define uint16 unsigned int

 

__CONFIG(FOSC_HS &WDTE_OFF &BOREN_OFF &PWRTE_OFF &LVP_OFF); //设置配置位

//WDTE_OFF:disable watchdog timer       看门狗禁止

//LVP_OFF:low voltage programming disabled  低电压编程禁止

//FOSC_HS:high speed crystal/resonator  4M以上晶振选择HS高速

//PWRTDIS:disable power up timer

//BOREN_OFF:disable brown out reset

 

#define     SCK_595     RA5

#define     RCK_595     RE0

#define     SER_595     RC0

 

void DelayUS(uint8 delay);

void HC595_Init(void);

void HC595_Write_Byte(uint8 data);

uint8 LED_Datachage(uint8 data);

 

const uint8 dot[12][8] =

{

    {0x00, 0x08, 0x18, 0x28, 0x08, 0x08, 0x08, 0x00},   //"1"

    {0x00, 0x08, 0x18, 0x28, 0x7E, 0x08, 0x08, 0x00},   //"4"

    {0x00, 0x08, 0x18, 0x28, 0x08, 0x08, 0x08, 0x00},   //"1"

    {0x00, 0x18, 0x24, 0x08, 0x10, 0x3C, 0x00, 0x00},   //"2"

    {0x00, 0x3C, 0x04, 0x08, 0x10, 0x20, 0x20, 0x00},   //"7"

    {0x00, 0x18, 0x24, 0x24, 0x24, 0x24, 0x18, 0x00},   //"0"

    {0x00, 0x18, 0x24, 0x24, 0x24, 0x24, 0x18, 0x00},   //"0"

    {0x00, 0x08, 0x18, 0x28, 0x7E, 0x08, 0x08, 0x00},   //"4"

    {0x00, 0x18, 0x24, 0x24, 0x1C, 0x08, 0x10, 0x00},   //"9"

    {0x00, 0x7E, 0x04, 0x08, 0x10, 0x20, 0x7E, 0x00},   //"Z"

    {0x00, 0x70, 0x48, 0x70, 0x60, 0x50, 0x48, 0x00},   //"R"

    {0x00, 0x7C, 0x10, 0x10, 0x10, 0x50, 0x20, 0x00}    //"J"

};

 

/*******************************************************************************

* 函 数 名: DelayUS(uint8 delay)

* 函数功能: 微秒延时   for 20MHZ

* 入口参数: delay

* 返    回: 无

*******************************************************************************/

 

void DelayUS(uint8 delay)

{

    while(--delay);

}

 

/******************************************************************************

* 函 数 名: HC595_Init(void)

* 函数功能: 74HC595初始化

* 入口参数: 无

* 返    回: 无

*******************************************************************************/

void HC595_Init(void)

{

    ADCON1 = 0x8E;

    TRISA5 = 0;

    TRISE0 = 0;

    TRISC0 = 0;

}

 

/******************************************************************************

* 函 数 名: HC595_Write_Byte(uint8 data)

* 函数功能: 74HC595写8位数据

* 入口参数: 无

* 返    回: 无

*******************************************************************************/

void HC595_Write_Byte(uint8 data)

{

    uint8 i;

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

    {

        if(data & 0x80)

        {

            SER_595 = 1;

        }

        else

        {

            SER_595 = 0;

        }

        SCK_595 = 0;

        data <<= 1;

        SCK_595 = 1;

    }

    RCK_595 = 0;

    RCK_595 = 1;

}

 

/******************************************************************************

* 函 数 名: LED_Datachage(uint8 data)

* 函数功能: 将8位数据的bit0和bit7、bit1和bit6,bit2和bit5,bit3和bit4互相对换

* 入口参数: data:待对换的数据

* 返    回: 无

*******************************************************************************/

uint8 LED_Datachage(uint8 data)

{

    uint8 temp, temp1;

    temp = (data & 0x01) << 7;

    temp1 = (data & 0x80) >> 7;

    data = (data & 0x7E) | temp | temp1;

    temp = (data & 0x02) << 5;

    temp1 = (data & 0x40) >> 5;

    data = (data & 0xBD) | temp | temp1;

    temp = (data & 0x04) << 3;

    temp1 = (data & 0x20) >> 3;

    data = (data & 0xDB) | temp | temp1;

    temp = (data & 0x08) << 1;

    temp1 = (data & 0x10) >> 1;

    data = (data & 0xE7) | temp | temp1;

    return data;

}

 

/*******************************************************************************

* 函 数 名: main(void)

* 函数功能: LED点阵循环显示0~9数字

*******************************************************************************/

void main(void)

{

    uint8 i, j;

    uint16 k;

    TRISA &= 0xE3;      //RA2、RA3、RA4设置成输出模式

    PORTA |= 0x1C;      //RA2 = 1、RA3 = 1、RA4 = 1,不选通任何数码管,则关掉数码管显示

 

    TRISE &= 0xEF;      //配置PORTD为普通IO口,对PORTD的操作务必加上这句

    TRISD = 0x00;       //设置PORTD为输出

    HC595_Init();       //74HC595初始化

    while(1)

    {

        for(j = 0; j < 12; j++) //"141270049ZRJ"

        {

            for(k = 0; k < 1500; k++)   //每个数字重复显示次数

            {

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

                {

                    HC595_Write_Byte((0x01 << i));  //选择行

                    PORTD = ~LED_Datachage(dot[j][i]);  //送字

                    DelayUS(50);    //延时50us

                    PORTD = 0xFF;   //关显示

                }

            }

        }

    }

}


关键字:PIC单片机  LED阵列  循环显示 引用地址:PIC单片机-LED阵列的使用

上一篇:PIC单片机-普通IO口模拟I2C总线对24C02进行读写操作
下一篇:PIC单片机-步进电机的正转与反转

推荐阅读最新更新时间:2024-11-04 01:06

PIC单片机对数码管的动态扫描显示设计
#include//包含单片机内部资源预定义 __CONFIG(0x1832); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 voiddelay();//delay函数申明 voidinit();//I/O口初始化函数申明 constcharTABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92};//定义常数0-5的数据表格 voidm ai n()//主函数 { while(1)//死循环,让数码管持续点亮 { init();//调用初始化函数 PORTD=TABLE[0];//D口输出数据表格第1个数据0 PORTA=0X3E;//点亮第1位数码管 de
[单片机]
<font color='red'>PIC单片机</font>对数码管的动态扫描<font color='red'>显示</font>设计
pic单片机IIC通信读24C02程序例 16F877A 主频4M
文本名为 iic.h #ifndef _iic_h_ #define _iic_h_//pic单片机IIC通信初始化函数声明 void iiccsh(void); //pic单片机IIC通信读外围设备函数声明 //功能:传送一个8位地址,返回一个8位数据 unsigned char iicread(unsigned char data); //pic单片机IIC通信给外围器件发送函数声明 //功能:传送一个8位地址,传送一个8位数据或指令 void iicwrite(unsigned char diz,unsigned char data); #endif 文本名为 iic.c#ifndef _iic_h_ //立
[单片机]
PIC单片机复位系统模块有哪些?
PIC16F87X系列单片机的复位功能设计得比较完善,根据引起单片机内部复位的条件和原因,可以将PIC单片机复位系统分为五个模块进行介绍:   1.上电复位   每次单片机加电时,上电复位电路都要对电源电压VDD的上升过程进行检测,当VDD值上升到规定值1.6~1.8V时,就产生一个有效的复位信号,需经过72ms加1024个时钟周期的延时,才会使单片机复位。   2.人工复位(单片机在执行程序期间)   无论是单片机在按预先设定的正常顺序运行程序,还是出现单片机进入不可预知的某一个死循环,都必须认为单片机在执行程序。单片机在执行程序期间,只要在人工复位端MCLR加入一个低电平信号,就会令其复位。   3.人工复位(单片机在睡眠期间)
[单片机]
基于I2C总线的PIC单片机端口扩展技术
1. 概述 随着单片机技术的发展,单片机在机电产品领域的应用越来越广泛。一方面,希望单片机构成的嵌入式系统功能尽可能强大,处理能力强,控制对象多;另一方面,又希望整个系统的成本尽可能低,即性价比好。因此,实际应用中经常会遇到单片机I/0接口资源不够用的情形,在一些较复杂的应用系统中,由于被控对象较多,如控制多个LED数码管的显示、超过30路状态的显示等,此时,端口供需矛盾尤其突出, 通常的解决方法是采用8155 , 8255 , 8259 , 74HC164,74HC165,74LS373 及74LS245 等外扩I/0 接口, 这样必然会使系统更加复杂, 成本增加, 可靠性下降。 目前,功能较强的单片机中大多采用了FLAS
[单片机]
基于I2C总线的<font color='red'>PIC单片机</font>端口扩展技术
PIC单片机PAGE和BANK设置
   从PIC单片机的指令结构上来分析一下为什么PIC中要有BANK和PAGE的设置吧。先来看一下为什么PIC中要把RAM区划分多个BANK。   仔细观察PIC单片机汇编语言指令的格式,一条完整的汇编语言指令语句通常是这样的:标号操作码助记符 操作数1,操作数2;注释。其中,主体部分是‘操作码助记符操作数1,操作数2’。   例如:   指令:MOVF 33,1   操作码助记符:MOVF ;   操作数1:33 ;   操作数2:1 ;   而在程序被编译时指令语句的主体部分会被转换为代码的形式,通常是:指令代码操作数2 操作数1。   例如在指令位数为14位的中档PIC单片机中:   指
[单片机]
PIC单片机在中央空调控制器中的应用
1 引 言 中央空调控制器有别于普通空调控制器。普通空调控制器安装于室内挂机内,对控制器尺寸要求不高,采用任何单片机加上外扩,不管多少外围器件都没问题。但中央空调控制器由于没有可放置的室内机,所以只能单独放置,这样,就要求控制器小巧精致。本设计中,用户要求设计的控制器尺寸与一般的家用开关面板大小相仿,上面排布七个按键,十个LED发光指示和一个温度显示,功能上还有遥控、两路温度采样等。 2 系统硬件设计 根据用户要求,我们进行了初步设计。在排布组件时,我们就发现,这么小的空间,放上面板所需的键盘、显示后,只留下了一片单片机的位置,那么A/D、红外遥控译码和外围驱动电路怎么放?经过比较,我们最终选择了PIC单片机。在开发
[单片机]
<font color='red'>PIC单片机</font>在中央空调控制器中的应用
工程师在PIC单片机选型时需要了解的特性
  单片机的种类很多,PIC单片机(Peripheral Interface Controller)是一种用来开发和控制外围设备的集成电路(IC)。一种具有分散作用(多任务)功能的CPU。与人类相比,大脑就是CPU,PIC 共享的部分相当于人的神经系统。   PIC单片机有计算功能和记忆内存像CPU并由软件控制运行。然而,处理能力—般,存储器容量也很有限,这取决于PIC的类型。但是它们的最高操作频率大约都在20MHz左右,存储器容量用做写程序的大约1K—4K字节。时钟频率与扫描程序的时间和执行程序指令的时间有关系。但不能仅以时钟频率来判断程序处理能力,它还随处理装置的体系结构改变。如果是同样的体系结构,时钟频率较高的处理能力会
[单片机]
基于PIC单片机芯片的三相半控整流电路设计
  整流电路广泛应用在直流电机调速,直流稳压电压等场合。而三相半控整流桥电路结构是一种常见的整流电路,其容易控制,成本较低。本文中介绍了一种基于 PIC690单片机与专用集成触发芯片TC787的三相半控整流电路,它结合专用集成触发芯片和数字触发器的优点 ,获得了高性能和高度对称的触发脉冲。它充分利用单片机内部资源 ,集相序自适应、系统参数在线调节和各种保护功能于一体,可用于对负载的恒电压控制。主电路采用了三相半控桥结构,直流侧采用LC滤波结构来提高输出的电压质量。       系统总体设计   本系统通过PIC690单片机作为主控制芯片,用晶闸管作为主要开关器件。设计的目标是保持输出的直流电压稳定,输出电压纹波小,交流输出测电
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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