HD7279A控制数码管(IAR环境)

发布者:CuriousMind123最新更新时间:2020-07-14 来源: 51hei关键字:HD7279A控制  数码管  IAR环境 手机看文章 扫描二维码
随时随地手机看文章

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

IAR环境,HD7279A,P4.0~CS,P4.1~CLK,P4.2~DATA,P4,3~KAY,

DATA为串口数据口,时序图如下:

CS:    ---------_________________________--------

CLK:   ___________---___---___---___---__________

DATA:  ---------~~~---~~~---~~~~---~~~-----------

由430将显示数据一次性送到7279,再由7279显示

通过定时器TimerA将数值不断改变,当主函数发现数值改变后,再将新的数值写到

HD7279A中,这样便起到了节约CPU资源的作用。数值由数码管显示,由于HD7279含有

寄存器的原因,所以只单片机将要显示的数字和位置的信息传给HS7279A即可显示,而

无需单片机扫描。

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


#include "msp430x15x.h"


#define      DATADIR      P4DIR    //  定义端口方向

#define      DATAOUT      P4OUT    //  定义输出端口


#define      CS_L         DATAOUT &= ~BIT0;  //  7279的片选输出低电平

#define      CLK_L        DATAOUT &= ~BIT1;  //  7279的时钟输出低电平

#define      DATA_L       DATAOUT &= ~BIT2;  //  7279的数据输出低电平


#define      CS_H         DATAOUT |= BIT0;  //  7279的片选输出高电平

#define      CLK_H        DATAOUT |= BIT1;  //  7279的时钟输出高电平

#define      DATA_H       DATAOUT |= BIT2;  //  7279的数据输出高电平

         

#define      DP           0X80    //  显示小数点

#define      CMD_REST     0XA4    //  7279的复位命令

#define      CMD_LEFT     0XA1    //  7279的左移位命令

#define      CMD_RIGHT    0XA0    //  7279的读缓冲命令


#define      CMD_MODE_1   0X80    // 按方式0译码

#define      CMD_MODE_2   0XC8    // 按方式1译码

#define      CMD_MODE_3   0X90    // 输入数据不译码


#define      CMD_SHOW     0X88    // 闪烁


typedef unsigned int uint16;


char tab_num[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,

                0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};


uint16 tym,tym_delay;


void delay_nop(uint16 u)                             // 延时多少个机器周期

{

  for(;u>0;u--)

    _NOP();

}


void Send_1_byte(char send)                          // 发送一个字节

{

  char temp,i;  

  CS_L;                                                             // 置低片选信号

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

  {

    temp = send & 0x80;                                       // 发送高位

    if(temp!=0)   {DATA_H;}

    else          {DATA_L;}

    CLK_H;                                                             // 置高时钟位

    send <<= 1;                                                         // 左移一位

    CLK_L;                                                                // 置低时钟位

  }

  CS_H;                                                                 // 置高片选信号

}


void Send_2_byte(char send1,char send2)         // 发送两个字节

{

   char temp,i;

   CS_L;

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

   {

      if(i<8)      temp = send1 & 0x80;                      // 发送高位

      else         temp = send2 & 0x80;

      if(temp!=0)  {DATA_H;}                                   // 如果不为0,输出高电位

      else         {DATA_L;}                                      // 如果为0,则输出低电位

      CLK_H;                                                           // 置高时钟位

      if(i<8)      send1 <<= 1;                                    // 左移一位

      else         send2 <<= 1;

      CLK_L;                                                           // 置低时钟位

      if(i==7)     _NOP();

   }

  CS_H;                                                                 // 置高片选信号  

}


void Write7279()

{

//  char i;

//  Send_1_byte(0xbf);                                                                 // 用于测试

//  Send_1_byte(0xa4);                                                                //复位指令

  Send_2_byte(CMD_MODE_2|0X03,tab_num[tym/1000]);         //  取千位

  Send_2_byte(CMD_MODE_2|0X02,tab_num[tym/100%10]);    //  取百位

  Send_2_byte(CMD_MODE_2|0X01,tab_num[tym/10%10]);      //  取十位

  Send_2_byte(CMD_MODE_2|0X00,tab_num[tym%10]);           //  取个位

//  Send_1_byte(0xa1);                                                               //左移指令

  

}


void main( void )

{

  uint16 ram;

  // Stop watchdog timer to prevent time out reset

  WDTCTL = WDTPW + WDTHOLD;

  TACTL  = TASSEL_1 + TACLR + MC_1;  // + TAIE 时钟源MCLK,增计模式,开总中断,清除定时器

  CCTL0 |= CCIE;                //允许中断

  CCR0   = 2000;               //设置寄存器的值

//  _EINT();                        //溢出中断

  _BIS_SR(GIE);                //开总中断

  

  DATADIR = 0X07;

  ram = tym;                     //使两者的值相等

  Write7279();                   //显示初始化

  while(1)

  {

    if(ram!=tym)                //当tym的值有变动时,调用7279

    {

      Write7279();             //显示新数值

      ram = tym;                 //使ram和tym的值相同,以确定下一次tym的值的变动

    }

    delay_nop(1);              //延时一个机器周期

  }

}


#pragma vector = TIMERA0_VECTOR

__interrupt void Timer_A0(void)

{

   tym_delay++;                                                                   //进入中断tym_delay的值加一

   if(tym_delay>=20)   {tym++;tym_delay=0;}                       //当tym_delay为20时,tym加一

   if(tym>1000)        tym = 0;                                                //当tym为1000时清零

}


关键字:HD7279A控制  数码管  IAR环境 引用地址:HD7279A控制数码管(IAR环境)

上一篇:MSP430电池电压采集Proteus仿真程序
下一篇:MSP430定时器中断程序

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

51单片机超声波模块数码管程序分享
超声波原理简单测距准确,应用广泛下面贴一个自己写的数码管程序,显示部分需要改,写的是我使用的是慧净开发板,共阴数码管。 //超声波模块程序 //Trig = P2^0 //Echo = P3^2 #include #define uchar unsigned char #define uint unsigned int unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的码表 uint ti me = 0; uintTImeH = 0; uintTImeL = 0; uint succeed_flag;
[单片机]
51单片机超声波模块<font color='red'>数码管</font>程序分享
单片机常用功能模块的使用 Part3. 多位共阴共阳数码管
  多位数码管和单个数码管的区别就在于:数量 (说了跟没说一样)   单个数码管使用时,只要将八位显示接到单片机的 I/O 口(如 P1)就可以了,多个数码管就要考虑管脚的 复用 问题了。因为多位数码管不仅要在单个数码管显示某种字符,还要指定哪一个数码管显示。以 8 位数码管为例,就需要 16 根线控制,8 个控制段码显示,8 个控制位码显示,这样单片机还可以承受。要是 16 位数码管呢,那就是 8+16=24 位了,再多了呢   想想大街上的霓虹灯广告牌,博主倒是不知道那是个什么原理,不过如果是用单片机实现,使用上述方法的话,单片机引脚肯定不够用!   因此,对于多数码管,需要使用 锁存器 ,达到 引脚复用 的目的。
[单片机]
51单片机基础之数码管(二)
原理: 因为数码管有8个,我们必须采用38译码器来节省单片机的资源,这里先简单介绍一下38译码器的原理,之后会慢慢补充常用芯片的原理和工作方法。 功能:38译码器有三个信号输入端,2的3次方就是8,有八种输出情况,每种情况对应一个输出,八个数码管分别连接八个输出,三个输入就可以实现八个数码管的动态显示。 真值表: 代码: #include reg52.h #define SMG P0 typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; //配置38译码器,到时候要用 sbit LSA=P2^2; sbit LSB
[单片机]
51单片机基础之<font color='red'>数码管</font>(二)
MSP430数码管的使用Ⅰ
首先应该了解数码管及其工作原理。了解你使用的是共阴还是共阳数码管,其次了解数码管的段选位选。 接下来是一个例程 #include msp430f149.h typedef unsigned char uchar; #define wei_h P5OUT |= BIT5 #define wei_l P5OUT &= BIT5 #define duan_l P6OUT &= ~BIT6 #define duan_h P6OUT |= BIT6 uchar table = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,
[单片机]
51单片机入门——数码管
1.数码管 1.1.什么是数码管? 数码显示器简称数码管,是一种可以显示数字和其他信息的电子设备。它在数字式显示系统中是不可缺少的器件,应用极其广泛,发展速度很快,数码管朝着小型化、 平面化、多功能化和低耗电方面发展。 1.2.数码管的种类 数码管主要有下列三大类。 字形重叠式数码管。这种数码管的特点是将不同的数字、字母等符号的电极重叠起来,当需要哪一个符号显示时,就驱动该符号的电极,使之发光显示,此时其他符号电极不发光。 这种数码管有辉光放电管和边光显示管等。 分段式数码管。这种数码管的特点是将一个数字分成若干个笔画,通过驱动相应的笔画发光来显示某一个数字,如荧光数码管就是这种类型的。 分段式数码管有八段式和七段式两种。
[单片机]
51单片机入门——<font color='red'>数码管</font>
数码管拉幕显示计数(C语言)
/*数码管拉幕显示计数我以前初学数码管时就听说, 但是那时候因为基础不太好,一时没有想出来,今天 看到工厂样品室的恒温烙铁上面的(温度计)数码管 就是开机拉幕显示,感觉挺不错的,我就想了一下它程序 原理,然后真的就写出了我想要的效果,其实蛮简单的 ,只要将要显示的数或运算一下就搞定了,哈 !数码管硬件显示原理我就不介绍了,下面将我写得 代码及实际视频效果分享一下,请大家指教!*/ 一、视频效果参见以下地址: http://www.tudou.com/programs/view/U89zcpfoUYk/ 完整代码下载地址: http://www.51hei.com/f/lmsmg.rar 二、具体程序: #inclu
[单片机]
max7219控制8段数码管 spi接口
#include iom16v.h #define uint unsigned int #define uchar unsigned char #define CS_H PORTB|=(1 4) #define CS_L PORTB&=~(1 4) void SPI_MasterInit(void) { /* 设置MOSI 和SCK 为输出,其他为输入 */ DDRB = (1 4)|(1 5)|(1 7); /* 使能SPI 主机模式,设置时钟速率为fck/16 */ SPCR = (1 SPE)|(1 MSTR)|(1 SPR1)|(1 SPR0); } void SPI_MasterTran
[单片机]
max7219<font color='red'>控制</font>8段<font color='red'>数码管</font> spi接口
【51单片机】七段数码管和矩阵键盘的综合实验——计算器
前言 系列文章中的四篇是我学习单片机以来写下的4篇学习记录。在有了以上知识的了解后,我也掌握了部分80C51单片机的编程思想,当然80C51可以挂载很多不同的芯片和设备,还有很多内容需要学习的。就目前而言,对I/O设备的使用有了基础,平时也在学习中编写程序,这让我的小目标—— 做一个计算器 ,有了一定的基础。所以趁今天有时间,把这个计算器实现的过程记录下来。 一、程序思路 首先,要做一个计算器,并且实现连续运算,键盘的功能就应该有数字键和四则运算符号键,并且,连续按下多个数字键可以得到多位数,即有十位、百位、千位; 第二,进行连续运算的第二次符号输入时,即可输出上两个数字的运算结果。 第三,按下等号键,输出前两个数字的运算
[单片机]
【51单片机】七段<font color='red'>数码管</font>和矩阵键盘的综合实验——计算器
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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