历史上的今天
返回首页

历史上的今天

今天是:2024年12月16日(星期一)

正在发生

2020年12月16日 | max7219显示程序-C程序—汇编

2020-12-16 来源:elecfans

max7219显示程序(汇编)

#include "msp430x41x.h"
DIN EQU 001H ;P1.0
CLK EQU 002H ;P1.1
LOAD EQU 004H ;P1.2

ORG 0F000H
RESET MOV #300H,SP ;初始化
MOV #WDTPW+WDTHOLD,&WDTCTL
BIS.B #CLK,&P1DIR
BIS.B #DIN,&P1DIR
BIS.B #LOAD,&P1DIR
PUSH #00C01H ;设置工作模式
BIC.B #LOAD,&P1OUT
CALL #MOVE
BIS.B #LOAD,&P1OUT

PUSH #00B05H ;设置扫描位数
BIC.B #LOAD,&P1OUT
CALL #MOVE
BIS.B #LOAD,&P1OUT

PUSH #009FFH ;设置编码方式
BIC.B #LOAD,&P1OUT
CALL MOVE
BIS.B #LOAD,&P1OUT

PUSH #00A07H ;设置亮度
BIC.B #LOAD,&P1OUT
CALL MOVE
BIS.B #LOAD,&P1OUT

XIAN PUSH #00107H ;显示第一位
BIC.B #LOAD,&P1OUT
CALL MOVE
BIS.B #LOAD,&P1OUT

PUSH #00206H ;显示第二位
BIC.B #LOAD,&P1OUT
CALL MOVE
BIS.B #LOAD,&P1OUT

PUSH #00305H ;显示第三位
BIC.B #LOAD,&P1OUT
CALL MOVE
BIS.B #LOAD,&P1OUT

PUSH #00404H ;显示第四位
BIC.B #LOAD,&P1OUT
CALL MOVE
BIS.B #LOAD,&P1OUT

PUSH #00503H ;显示第五位
BIC.B #LOAD,&P1OUT
CALL MOVE
BIS.B #LOAD,&P1OUT

PUSH #00602H ;显示第六位
BIC.B #LOAD,&P1OUT
CALL MOVE
BIS.B #LOAD,&P1OUT
JMP $
MOVE MOV.B #16,R6
MOV 2(SP),R13
MOV #1,R10
SENDLOOP BIC.B #CLK,&P1OUT
BIT R10,R13
JNZ SEND1
SEND0 BIC.B #DIN,&P1OUT
JMP GOON
SEND1 BIS.B #DIN,&P1OUT
GOON BIS.B #CLK,&P1OUT
RLA R10
BIC.B #CLK,&P1OUT
DEC R6
JNZ SENDLOOP
RET
ORG 0FFFEH
DW RESET
END#include "msp430x41x.h"
DIN EQU 001H ;P1.0
CLK EQU 002H ;P1.1
LOAD EQU 004H ;P1.2

ORG 0F000H
MOV #300H,SP ;初始化
MOV #WDTPW+WDTHOLD,&WDTCTL
BIS.B #CLK,&P1DIR
BIS.B #DIN,&P1DIR
BIS.B #LOAD,&P1DIR

PUSH #00C01H ;设置工作模式
BIC.B #LOAD,&P1OUT
CALL #MOVE
BIS.B #LOAD,&P1OUT

PUSH #00B05H ;设置扫描位数
BIC.B #LOAD,&P1OUT
CALL #MOVE
BIS.B #LOAD,&P1OUT

PUSH #009FFH ;设置编码方式
BIC.B #LOAD,&P1OUT
CALL MOVE
BIS.B #LOAD,&P1OUT

PUSH #00A07H ;设置亮度
BIC.B #LOAD,&P1OUT
CALL MOVE
BIS.B #LOAD,&P1OUT

XIAN PUSH #00107H ;显示第一位
BIC.B #LOAD,&P1OUT
CALL MOVE
BIS.B #LOAD,&P1OUT

PUSH #00206H ;显示第二位
BIC.B #LOAD,&P1OUT
CALL MOVE
BIS.B #LOAD,&P1OUT

PUSH #00305H ;显示第三位
BIC.B #LOAD,&P1OUT
CALL MOVE
BIS.B #LOAD,&P1OUT

PUSH #00404H ;显示第四位
BIC.B #LOAD,&P1OUT
CALL MOVE
BIS.B #LOAD,&P1OUT

PUSH #00503H ;显示第五位
BIC.B #LOAD,&P1OUT
CALL MOVE
BIS.B #LOAD,&P1OUT

PUSH #00602H ;显示第六位
BIC.B #LOAD,&P1OUT
CALL MOVE
BIS.B #LOAD,&P1OUT
JMP $
MOVE MOV.B #16,R6
POP R13
MOV #1,R10
SENDLOOP BIC.B #CLK,&P1OUT
BIT R10,R13
JNZ SEND1
SEND0 BIC.B #DIN,&P1OUT
JMP GOON
SEND1 BIS.B #DIN,&P1OUT
GOON BIS.B #CLK,&P1OUT
RLA R10
BIC.B #CLK,&P1OUT
DEC R6
JNZ SENDLOOP
RET
END

MAX7219的c程序

/*---------------------------------------------------------
 *                     程序说明                           *
 * 1、本程序已经通过测试,非常好用;                      *
 * 2、在非译码方式下编码和一般书上写的不一样,请注意;    *
 * 3、每次送显示的时候先初始化一次;                      *
 * 4、在设计电路或制作试验板时注意添加Vcc到GND之间的电容,*
 *    一个10vF的电解电容和0.1vF的陶瓷电容。并在DIN、LOAD、*
 *    CLK到GND之间接入30pF的瓷片电容。                    *
 *                                                        *
 *                程序提供人:苏建宇                      *
 *                                                        *
 *                                                        *
----------------------------------------------------------*/

#include 
#include 
//#include 
/*--------------------------------------------------*/
sbit dis_DIN=P1^0;           /*显示串行数据输入端*/
sbit dis_LOAD=P1^1;          /*显示数据锁存端*/
sbit dis_CLK=P1^2;           /*显示时钟输入端*/

#define NoOp   0x00         /*空操作*/
#define Digit0 0x01         /*数码管1*/
#define Digit1 0x02         /*数码管2*/
#define Digit2 0x03         /*数码管3*/
#define Digit3 0x04         /*数码管4*/
#define Digit4 0x05         /*数码管5*/
#define Digit5 0x06         /*数码管6*/
#define Digit6 0x07         /*数码管7*/
#define Digit7 0x08         /*数码管8*/
#define DecodeMode 0x09     /*译码模式*/
#define Intensity 0x0a     /*亮度*/
#define ScanLimit 0x0b      /*扫描界限*/
#define ShutDown 0x0c       /*掉电模式*/
#define DisplayTest 0x0f    /*显示测试*/

#define ShutdownMode 0x00      /*掉电方式工作*/
#define NormalOperaTIon 0x01   /*正常操作方式*/

#define DecodeDigit 0xff       /*译码位数设置*/

#define IntensityGrade 0x0a    /*显示亮度级别设置*/

#define ScanDigit 0x07         /*扫描位数设置*/

#define TestMode 0x01          /*显示测试方式*/
#define TextEnd 0x00           /*显示测试结束,正常工作*/

unsigned char data DisBuffer[8]={0,0,0,0,0,0,0,0};    /*显示缓存区*/

unsigned char code dispaly_list[]=
    { 
0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,    /*0,1,2,3,4,5,6,7,8,9*/
      0x77,0x1f,0x4e,0x3d,0x4f,0x47,0x67,0x3e,0xff,0x00};   /*A,B,C,D,E,F,P,U,全
亮,全灭*/

/*--------------------------------------------------------
                   10ms延时子程序
---------------------------------------------------------*/
void delayX10ms(unsigned char count)
     {
      unsigned char j,k;
      while(count--!=0)
        {
         for(j=0;j<43;j++)
           for(k=0;k<73;k++)
           ;
        }
     }

/*-------------------------------------------------
                向MAX7219写入字节(8位)
--------------------------------------------------*/
void SendChar (unsigned char ch)
   {
    unsigned char i,temp;
    _nop_();
    for (i=0;i<8;i++)
       {
           temp=ch&0x80;
           ch=ch<<1;
           if(temp)
          {
           dis_DIN=1;
           dis_CLK=0;
           dis_CLK=1;
          }
        else
          {
           dis_DIN=0;
           dis_CLK=0;
           dis_CLK=1;
          }
       }
   }

/*-------------------------------------------------
               向MAX7219写入字(16位)
-------------------------------------------------*/
void WriteWord (unsigned char addr,unsigned char num)
   {
    dis_LOAD=0;
    _nop_();
    SendChar (addr);
    _nop_();
    SendChar (num);
    _nop_();
    dis_LOAD=1;
   }

/*-------------------------------------------------
                 MAX7219初始化
-------------------------------------------------*/
void InitDis (void)
   {
    WriteWord (ScanLimit,ScanDigit);         /*设置扫描界限*/
    WriteWord (DecodeMode,DecodeDigit);      /*设置译码模式*/
    WriteWord (Intensity,IntensityGrade);    /*设置亮度*/
    WriteWord (ShutDown,NormalOperaTIon);    /*设置电源工作模式*/
   }

/*-------------------------------------------------
                    系统上电初始化
-------------------------------------------------*/
void InitMain (void)
   {
    IE=0x00;    /*设置中断允许寄存器*/
    IP=0x00;    /*设置中断优先级管理寄存器*/
    TH0=0xd8;   /*设定时器初值,10ms*/
    TL0=0xf0;
    TMOD=0x01;  /*T1 定时器模式2,波特率发生器,T0 定时器模式1*/
    TCON=0x11;  /*设置定时器控制寄存器,INT0设置为边沿触发方式*/
    PSW=0x00;
   }

/*-------------------------------------------------
                    主函数
-------------------------------------------------*/
void main(void)
  {
   InitMain ();
   InitDis ();
   WriteWord (DisplayTest,TestMode);
      delayX10ms(0x64);
       delayX10ms(0x64);
   WriteWord (DisplayTest,TextEnd);

    while(1)
            {
             unsigned char i;
             for (i=0;i<=9;i++)
                {
               delayX10ms(0x64);
               delayX10ms(0x64);
                 InitDis ();
               DisBuffer[0]=i;
               DisBuffer[1]=i;
               DisBuffer[2]=i;
               DisBuffer[3]=i;
               DisBuffer[4]=i;
               DisBuffer[5]=i;
               DisBuffer[6]=i;
               DisBuffer[7]=i;
               
               WriteWord (Digit0,DisBuffer[0]);
               WriteWord (Digit1,DisBuffer[1]);
               WriteWord (Digit2,DisBuffer[2]);
               WriteWord (Digit3,DisBuffer[3]);
               WriteWord (Digit4,DisBuffer[4]);
               WriteWord (Digit5,DisBuffer[5]);
               WriteWord (Digit6,DisBuffer[6]);
               WriteWord (Digit7,DisBuffer[7]);
              }

          }


   }

推荐阅读

史海拾趣

Hammond公司的发展小趣事

HALO Electronics公司的发展故事

故事一:初创与早期技术突破

HALO Electronics,全称HALO Electronics, Inc.,成立于1991年9月19日,总部位于美国德克萨斯州。公司自成立之初便专注于通信和功率磁性元件的设计与制造。在成立的早期,HALO便展现出了强大的技术创新能力。1993年,HALO推出了TnT™模块,这是首个具有成本效益的10base2模块,专为房地产敏感的薄网和背板应用设计,这一产品迅速在市场上获得了认可。紧接着,1994年,HALO又开发了一种专利的SMD变压器技术,为行业提供了更为强大的变压器解决方案,进一步巩固了其在磁性元件领域的地位。

故事二:与行业领先企业的合作

HALO Electronics的发展离不开与行业内领先企业的紧密合作。1995年,HALO与Maxim Integrated Products合作,共同开发了TGM-P3系列低成本PCMCIA变压器,这些变压器专为MAX253/845系列单片振荡器/功率驱动器设计,用于小型低成本DC/DC转换器。这一合作不仅提升了HALO产品的市场竞争力,也为其在高端应用领域的拓展奠定了坚实基础。

故事三:创新产品的持续推出

HALO Electronics一直致力于创新产品的研发与推出。1997年,公司推出了Quatra™系列首个四端口T1/E1磁性模块,这一产品是与Level One(Intel)共同开发的,提供了更高密度的T1/E1解决方案。随后,在1998年,HALO又创造了Ultra™系列变压器,这是当时最具成本效益和房地产效率的10/100base-TX变压器,其SOIC16封装成为了单端口快速以太网应用的行业标准。这些创新产品的推出,不断推动着HALO在电子行业的领先地位。

故事四:安全与效率并重的产品开发

HALO Electronics在产品开发过程中始终注重安全与效率。1999年,公司宣布了业界首个UL认可的4.5KV隔离变压器系列,这些变压器专为需要高度安全的以太网应用设计,满足了市场对高安全性产品的迫切需求。同年,HALO还推出了业界较小的双端口T1/E1变压器系列,进一步提升了产品的空间利用率和效率。这些举措不仅彰显了HALO在产品安全与效率方面的卓越追求,也为其赢得了更多客户的信赖和支持。

故事五:全球化布局与市场份额的扩大

随着业务的不断发展,HALO Electronics逐渐开始了全球化布局。公司在全球范围内建立了多个销售办事处和仓库,包括加州圣克拉拉、内华达州拉斯维加斯、香港和新加坡等地。同时,HALO还在北美、欧洲和亚洲的主要地区设立了卫星办公室,由区域经理负责开展工作。此外,HALO还在全球范围内拥有众多制造商代表和分销商,形成了完善的销售和服务网络。这些举措不仅提升了HALO的市场覆盖率和服务能力,也为其在全球范围内的市场份额扩大奠定了坚实基础。如今,HALO已成为电子行业中备受瞩目的磁性元件供应商之一。

Amprobe公司的发展小趣事

Amprobe是一家专业生产测试仪器的公司,为电子行业提供各种测试和测量解决方案。以下是Amprobe公司发展的五个相关故事:

  1. 创立与初期发展:Amprobe公司创立于1948年,总部位于美国华盛顿州埃弗雷特市。最初,公司专注于生产便携式测试仪器,如电表、电压计和电流计等,为电工、维修人员和工程师提供便捷的测量工具。公司以其可靠的产品质量和简便易用的设计在市场上建立了良好的声誉。

  2. 技术创新与产品扩展:随着技术的发展和市场需求的变化,Amprobe公司不断进行技术创新,并扩展了产品线。除了传统的电表和电压计,公司开始开发数字式测试仪器、热像仪、电池测试仪等高端产品,以满足客户对更高精度和更多功能的需求。

  3. 全球市场拓展:随着全球经济一体化的发展,Amprobe公司积极拓展国际市场。公司在欧洲、亚洲、南美等地设立了销售代表处和分支机构,建立了完善的全球销售网络。通过与当地经销商和合作伙伴合作,公司的产品销售已经覆盖了全球范围,为客户提供及时的技术支持和服务。

  4. 质量控制与认证:Amprobe公司高度重视产品质量控制,严格遵循国际质量管理标准。公司的生产工艺和质量管理体系通过了ISO 9001质量管理体系认证,并获得了欧洲CE认证和美国UL认证等产品认证。通过持续改进和质量监控,公司确保产品符合客户的要求和行业标准。

  5. 持续发展与未来规划:Amprobe公司未来将继续致力于技术创新和产品研发,不断推出符合市场需求的新产品。公司计划加强与客户的合作关系,深入了解客户的需求,提供定制化的解决方案。同时,公司将继续拓展国际市场,加强与全球合作伙伴的合作,实现持续稳健的发展。

ENOCEAN公司的发展小趣事

EnOcean GmbH成立于2001年,总部设在慕尼黑附近的奥伯兴。自创立之初,公司就专注于无线无源传输技术的研发,旨在提供一种无需外部电源、低维护成本的无线传感器解决方案。这种技术的核心在于能量转换器,能够收集环境中的微弱能量(如光能、振动能等),转化为电能供传感器使用。随着技术的不断完善,EnOcean逐渐在电子行业中崭露头角。

FUJITSU(富士通)公司的发展小趣事

为了进一步推动其技术在建筑行业的应用,EnOcean发起并建立了EnOcean联盟。该联盟由来自建筑行业的400多家公司组成,致力于推广基于EnOcean无线标准的免维护无线解决方案。通过与联盟成员的合作,EnOcean不断拓展其市场份额,并为智慧楼宇及能源管理提供更稳定的硬件解决方案。

City_Technology公司的发展小趣事

随着业务的不断扩展,City Technology于1990年在英国南海岸的普茨茅斯建立了生产基地,并将办公楼从伦敦中心区迁至该地。这一举措不仅提高了公司的生产效率,也为其进一步拓展国际市场提供了有力支持。此后,公司开始在全球范围内设立销售中心,包括波恩(德国)、苏黎世(瑞士)、上海及芝加哥等地,逐步实现了业务的国际化。

CUI Devices公司的发展小趣事

CUI Devices的历史可以追溯到1989年,当时它作为CUI Inc的一部分,在俄勒冈州波特兰郊外以高精度示波器探头制造商的身份进入市场。然而,随着时间的推移,公司逐渐认识到市场的多元化需求,开始积极拓展其产品供应和业务范围。2019年9月,一群在CUI Inc有着深厚背景和平均任期超过15年的高级管理人员,剥离了部分业务,成立了新的私人实体——CUI Devices。这一转型不仅为公司注入了新的活力,也为电子元件行业带来了更多的可能性。

问答坊 | AI 解惑

指纹阅读器的选择

目前,市场上提供的指纹阅读器依据指纹传感器的不同主要分为两类,即:以中控、科密、汉王、青松为代表的光学指纹阅读器和以广州三新、香港龙杰为代表的电容式指纹阅读器。光学传感器也称为第一代传感器,其原理是通过光学成像原理形成指纹图像,并 ...…

查看全部问答>

请问3DG7是稳压管吗?

我在电子市场要的稳压管,给他型号了,他给了我个这个3DG7,这是三端稳压管吗,总感觉是三极管那…

查看全部问答>

数字频率合成器的FPGA实现

摘要: 介绍了DDFS的原理和Altera公司的FPGA器件ACEX 1K的主要特点,给出了用ACEX 1K系列器件EP1K10TC144-1实现数字频率合成器的工作原理、设计思路、电路结构和仿真结果。 关键词: DDFS;FPGA;快速通道互连;仿真 1 概述 1971年, ...…

查看全部问答>

jtag下载出问题了,大家帮忙看看,谢谢了!!!

今天焊了一个ep2c8q208的板子,焊完电源后检查3.3v 1.2v电源正常,开始焊cyclone ii,焊完后,焊接jtag和as下载电路,焊完后检测时发现jtag不能下载,而as可以下载。 经检测jtag原理图正确,jtag管脚和fpga管脚连接没断路没短路 晶振是50m,测试时 ...…

查看全部问答>

免费赠送D78F1203资料

本帖最后由 paulhyde 于 2014-9-15 09:17 编辑 免费赠送D78F1203资料,里面全是英文,且没有具体的引脚信息,但是有对它的介绍,相信对大家有用,万一大会让制定用这个芯片就麻烦了  …

查看全部问答>

矢量控制与VF控制的比较

矢量控制:精度高,动态响应好…

查看全部问答>

看门狗定时器(very clear).

看门狗定时器(very clear). 对看门狗讲解的很清楚。…

查看全部问答>

vxworks loading问题

MPC8245 CPU板,通过底板PCI挂个8139的网卡,boot启动后从网络下载印象时一直下载不了。网卡的链接和数据灯都亮着,主机也提示网络已链接,fpt sever没有客户端访问信息。目标机串口启动信息如下 boot device        &nbs ...…

查看全部问答>

pocket pc2003 ppt8846 8800中文版

我有一台机器 PPT 8846 r3bz00ww 系统pocket pc 2003 是英文的 我想刷成中文版 好像少了一个 OS Image中文版(CS)的HEX文件 哪位大大可以提供点帮助啊 十分感谢 (成功了不限于口头上的)  我的QQ869048686 …

查看全部问答>

这种嵌入开发要求能用虚函数的技术吗?

开发一个嵌入式东西。cpu300多M,内存60M。现在的程序启动之后,cpu也就10%,内存占11m;想用虚函数的技术。不知道效率上会带来什么问题。嵌入式系统能用虚函数这种耗资源的技术吗 另外,程序对可靠性要求比较高,要求持续运行几年没问题,不知道虚 ...…

查看全部问答>