max7219显示程序-C程序—汇编

发布者:Qingliu2022最新更新时间:2020-12-16 来源: elecfans关键字:max7219  显示程序  汇编 手机看文章 扫描二维码
随时随地手机看文章

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

          }


   }

[1] [2] [3]
关键字:max7219  显示程序  汇编 引用地址:max7219显示程序-C程序—汇编

上一篇:动态心电心音信号同步检测系统
下一篇:单片机实现无线遥控教鞭

推荐阅读最新更新时间:2024-11-13 10:15

PIC中档单片机汇编指令详解(3)
ADDWF W寄存器内容和f数据寄存器内容相加 语法形式:ADDWF f,d 操作数:f为数据寄存器的低7位地址(0x00~0x7F) d为目的寄存器的低7位地址(0x00~0x7F) 当d=f时,结果放在f数据寄存器,W寄存器的内容不变 当d=W时,结果放在W寄存器中,f数据寄存器的内容不变 执行时间:一个指令周期 执行过程:【f】+【W】 d 状态标志影响:Z DC C 说明:数据寄存器内容和W寄存器内容相加,结果放入d指定的地方 指令范例: MOVLW 0x55 ;W=0x55,假定Sum=0xAA ADDWF Sum,f ;W不变,Sum=0xFF MOVF 传送f数据寄存器的内容到目的寄存器 语法
[单片机]
为什么学习STM32时还要学习汇编
不同的平台的汇编代码是不一样的,最早的汇编在50年代就发明了,比很多人的父母的年龄都大,老掉牙,不用学习怎么写汇编。一个公司有一个人知道怎么写汇编就够了。但要学习读汇编,为什么学习汇编? 1、性能 直接翻译为机器语言,性能最高。优秀的C语言效率只能达到汇编的80%左右。其他高级语言跟汇编一比差得更远。语言越高级性能越差。很多bootloader和BIOS用汇编写,汇编操作的是电脑,手机刚刚上电时,硬件和初始化的那些命令,它们的性能的要求比较高,效率高开机速度更快。 分析问题 个人认为,编程人与机器对话,我们写C,写JAVA,但是电脑并不认识这些语言,电脑只认识0和1;所以需要一个人来翻译这些语言,这个翻译官就是编译器,但是
[单片机]
为什么学习STM32时还要学习<font color='red'>汇编</font>
Keil进入仿真,窗口不显示程序运行箭头
Keil进入仿真后,程序窗口中不显示程序运行箭头。点“Run”,程序也会运行,就是不显示程序运行指示箭头。 可能是“Debug Infomation”选项没有勾选,勾上即可。
[单片机]
Keil进入仿真,窗口不<font color='red'>显示</font><font color='red'>程序</font>运行箭头
B001-Atmega16-汇编-地址空间分配
地址空间规划 打开m16def.inc、可以看到如下面的定义,它和手册里面描述的FlashROM、SRAM、EEPROM等的地址空间一一对应。 ; ***** DATA MEMORY DECLARATIONS ***************************************** .equ FLASHEND = 0x1fff ; Note: Word address、这里一共是8K word的flash ROM .equ IOEND = 0x003f ; IO寄存器的地址空间是0x0000-0x003F、但它们被映射到0x0020-0x005F .equ SRAM_START = 0x0060
[单片机]
B001-Atmega16-<font color='red'>汇编</font>-地址空间分配
keil调试出现反汇编的解决方法
若经常出现反汇编要看Debug目录下的Load Application at Startup前面的勾是否打上。是否打上直接影响加载的程序,请看Edit前面的路径,编辑它。出现下面的形式。 重点看这一行。LOAD power.axf INCREMENTAL // Download (assumes that 'load application at startup' is unchecked) 意思是说若load application at startup前面没有打对勾,那么加载的程序将是power.axf。如果你是自己建立的工程,并且按照别的一个模板进行配置,这个地方一定要小心。要不会很头疼的。刚开始的
[单片机]
用1602显示18b20温度的程序
温度值精确到0.1度,lcd1602显示 仿真电路图如下 c程序如下: #include reg51.h #define uchar unsigned char #define uint unsigned int sbit DQ=P3^7;//ds18b20与单片机连接口 sbit RS=P3^0; sbit RW=P3^1; sbit EN=P3^2; unsigned char code str1 ={ temperature: }; unsigned char code str2 ={ }; uchar data disdata ; uint tvalue;//温度值 uchar tflag;//温度
[单片机]
用1602<font color='red'>显示</font>18b20温度的<font color='red'>程序</font>
51单片机小白零基础教程——数码管的静态显示,以及数码管拓展程序
一、数码管的显示原理 数码管:是一种可以显示数字和其他信息的电子设备,可以看成是多个二极管的组成。 数码管有单位数码管、双位数码管、四位数码管,我们开发板上的数码管为2个四位数码管。 数码管显示原理:通过点亮内部的发光二极管来发光 引脚:又被称为管脚,从集成电路内部电路引出与外围电路的接线,所有的引脚构成了这块芯片的接口 单位数码管的引脚有10个,内部一共有8个小的发光二级管,还有2个引脚是公共端,其实只有一个公共端,但是生产厂家为了封装统一,把这2个引脚连接在了一起。 数码管根据其公共端所接的阳极和阴极的不同,分为了共阴极数码管和共阳极数码管。 共阳极接法:几个二极管的阳极接在一起,接到VCC(高电平),
[单片机]
51单片机小白零基础教程——数码管的静态<font color='red'>显示</font>,以及数码管拓展<font color='red'>程序</font>
单片机计数器计数脉冲检测汇编程序
4位数码管用2个573接到p0口,位选p2 段选P0口,电路详见单片机开发板的原理图: 点这里 采用定时器来记录脉冲 并用数码管输出 以下是源代码: ;********51hei单片机 计数脉冲检测汇编程序,数码管显示脉冲的的次数 ********************************** ORG 0000H JMP MAIN ORG 000BH JMP TT0 ORG 001BH JMP TT1 MOV 23H,#300 MOV 20H,#00H MOV SP,70H ;============================
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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