max7219显示程序-C程序-汇编_第1页
max7219显示程序-C程序-汇编_第2页
max7219显示程序-C程序-汇编_第3页
max7219显示程序-C程序-汇编_第4页
max7219显示程序-C程序-汇编_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

max7219显示程序-C程序—汇编max7219显示程序(汇编)#include"msp430x41x.h"

DINEQU001H;P1.0

CLKEQU002H;P1.1

LOADEQU004H;P1.2ORG0F000H

RESETMOV#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,&P1OUTPUSH#00B05H;设置扫描位数

BIC.B#LOAD,&P1OUT

CALL#MOVE

BIS.B#LOAD,&P1OUTPUSH#009FFH;设置编码方式

BIC.B#LOAD,&P1OUT

CALLMOVE

BIS.B#LOAD,&P1OUTPUSH#00A07H;设置亮度

BIC.B#LOAD,&P1OUT

CALLMOVE

BIS.B#LOAD,&P1OUTXIANPUSH#00107H;显示第一位

BIC.B#LOAD,&P1OUT

CALLMOVE

BIS.B#LOAD,&P1OUTPUSH#00206H;显示第二位

BIC.B#LOAD,&P1OUT

CALLMOVE

BIS.B#LOAD,&P1OUTPUSH#00305H;显示第三位

BIC.B#LOAD,&P1OUT

CALLMOVE

BIS.B#LOAD,&P1OUTPUSH#00404H;显示第四位

BIC.B#LOAD,&P1OUT

CALLMOVE

BIS.B#LOAD,&P1OUTPUSH#00503H;显示第五位

BIC.B#LOAD,&P1OUT

CALLMOVE

BIS.B#LOAD,&P1OUTPUSH#00602H;显示第六位

BIC.B#LOAD,&P1OUT

CALLMOVE

BIS.B#LOAD,&P1OUT

JMP$

MOVEMOV.B#16,R6

MOV2(SP),R13

MOV#1,R10

SENDLOOPBIC.B#CLK,&P1OUT

BITR10,R13

JNZSEND1

SEND0BIC.B#DIN,&P1OUT

JMPGOON

SEND1BIS.B#DIN,&P1OUT

GOONBIS.B#CLK,&P1OUT

RLAR10

BIC.B#CLK,&P1OUT

DECR6

JNZSENDLOOP

RET

ORG0FFFEH

DWRESET

END#include"msp430x41x.h"

DINEQU001H;P1.0

CLKEQU002H;P1.1

LOADEQU004H;P1.2ORG0F000H

MOV#300H,SP;初始化

MOV#WDTPW+WDTHOLD,&WDTCTL

BIS.B#CLK,&P1DIR

BIS.B#DIN,&P1DIR

BIS.B#LOAD,&P1DIRPUSH#00C01H;设置工作模式

BIC.B#LOAD,&P1OUT

CALL#MOVE

BIS.B#LOAD,&P1OUTPUSH#00B05H;设置扫描位数

BIC.B#LOAD,&P1OUT

CALL#MOVE

BIS.B#LOAD,&P1OUTPUSH#009FFH;设置编码方式

BIC.B#LOAD,&P1OUT

CALLMOVE

BIS.B#LOAD,&P1OUTPUSH#00A07H;设置亮度

BIC.B#LOAD,&P1OUT

CALLMOVE

BIS.B#LOAD,&P1OUTXIANPUSH#00107H;显示第一位

BIC.B#LOAD,&P1OUT

CALLMOVE

BIS.B#LOAD,&P1OUTPUSH#00206H;显示第二位

BIC.B#LOAD,&P1OUT

CALLMOVE

BIS.B#LOAD,&P1OUTPUSH#00305H;显示第三位

BIC.B#LOAD,&P1OUT

CALLMOVE

BIS.B#LOAD,&P1OUTPUSH#00404H;显示第四位

BIC.B#LOAD,&P1OUT

CALLMOVE

BIS.B#LOAD,&P1OUTPUSH#00503H;显示第五位

BIC.B#LOAD,&P1OUT

CALLMOVE

BIS.B#LOAD,&P1OUTPUSH#00602H;显示第六位

BIC.B#LOAD,&P1OUT

CALLMOVE

BIS.B#LOAD,&P1OUT

JMP$

MOVEMOV.B#16,R6

POPR13

MOV#1,R10

SENDLOOPBIC.B#CLK,&P1OUT

BITR10,R13

JNZSEND1

SEND0BIC.B#DIN,&P1OUT

JMPGOON

SEND1BIS.B#DIN,&P1OUT

GOONBIS.B#CLK,&P1OUT

RLAR10

BIC.B#CLK,&P1OUT

DECR6

JNZSENDLOOP

RET

ENDMAX7219的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]);

}

}

}我正好有个7219,一直想学一下,51节就搭个电路看看,谢谢。[电烙铁]2005-4-22

18:00:21我有更简单的[rq88]2005-4-22

18:38:00我有更简单的那就发上来大家都看看嘛

[bush636]2005-4-22

21:19:13我有AVR

C++的

AT90S2313通过(有图)(附图)[Sunnyyonkers]2005-4-23

14:27:58要注意到时序正确就行了,另外电压一定要够,否则一定会出现乱

码。

我先给出一个我做的一个通用驱动。

//------------------------------------------------------------------------------

//Author:SunnyYonkers

//Date:

2005y-03m-18d

13:00

//------------------------------------------------------------------------------

#include

#include

#include

#include

#include

#include

#include

//------------------------------------------------------------------------------

//Hardware

Define

//引脚定义

#define

SOFT_SERIAL_PORT

PORTB

#define

SOFT_SERIAL_DDR

DDRB

#define

SOFT_SERIAL_PIN

PINB

//------------------------------------------------------------------------------

#define

LOAD_PIN

0b00000100

#define

DIN_PIN

0b00001000

#define

CLK_PIN

0b00010000

//------------------------------------------------------------------------------

//定义引脚操作

#define

SET_DIN

SOFT_SERIAL_PORT

|=

DIN_PIN

#define

CLR_DIN

SOFT_SERIAL_PORT

&=

~DIN_PIN

#define

SET_CLK

SOFT_SERIAL_PORT

|=

CLK_PIN

#define

CLR_CLK

SOFT_SERIAL_PORT

&=

~CLK_PIN

#define

SET_LOAD

SOFT_SERIAL_PORT

|=

LOAD_PIN

#define

CLR_LOAD

SOFT_SERIAL_PORT

&=

~LOAD_PIN

//------------------------------------------------------------------------------

#define

TRUE

0x01

#define

FALSE

0x00

//------------------------------------------------------------------------------

#define

DISPLAY_ADD_0

0x01

#define

DISPLAY_ADD_1

0x02

#define

DISPLAY_ADD_2

0x03

#define

DISPLAY_ADD_3

0x04

#define

DISPLAY_ADD_4

0x05

#define

DISPLAY_ADD_5

0x06

#define

DISPLAY_ADD_6

0x07

#define

DISPLAY_ADD_7

0x08

//------------------------------------------------------------------------------

#define

DECODE_ADDRESS

0x09

#define

LIGHT_ADDRESS

0x0a

#define

SCAN_WIDE

0x0b

#define

SLEEP_ADDRESS

0x0c

#define

TEST_ADDRESS

0x0d

//------------------------------------------------------------------------------

#define

SLEEP_MODE

0x00

#define

UN_SLEEP_MODE

0x01

//------------------------------------------------------------------------------

#define

NO_DECODE

0x00

#define

DECODE_0_

0x01

#define

HALF_DECODE

0x0f

#define

DECODE_ALL

0xff

//------------------------------------------------------------------------------

#define

_CHAR_0

0b00000000

#define

_CHAR_1

0b00000001

#define

_CHAR_2

0b00000010

#define

_CHAR_3

0b00000011

#define

_CHAR_4

0b00000100

#define

_CHAR_5

0b00000101

#define

_CHAR_6

0b00000110

#define

_CHAR_7

0b00000111

#define

_CHAR_8

0b00001000

#define

_CHAR_9

0b00001001

#define

_CHAR_-

0b00001010

#define

_CHAR_E

0b00001011

#define

_CHAR_H

0b00001100

#define

_CHAR_L

0b00001101

#define

_CHAR_P

0b00001110

#define

_NO_CHAR

0b00001111

#define

_DOT

0b10000000

//------------------------------------------------------------------------------

class

max7219drv

{

public:

max7219drv();

private:

void

write(unsigned

char

cData);

public:

void

send(unsigned

char

address,unsigned

char

ndata);

};

//------------------------------------------------------------------------------

//构造函数

max7219drv::max7219drv()

{

SOFT_SERIAL_PORT

|=

0b11111111;//初始状态高电平

SOFT_SERIAL_DDR

|=

0b11111111;//状态

///////////////////////////////////////////////

}

//------------------------------------------------------------------------------

//------------------------------------------------------------------------------

//写数据微程序:私有

void

max7219drv::write(unsigned

char

cData)

{

unsigned

char

nloop=0x07;

/////////////////////////////////////////////

do{

(0x80

&

cData)

?

(SET_DIN)

:

(CLR_DIN);cData<<=1;//数据移

CLR_CLK;

SET_CLK;//产生一个时钟信号

}while(nloop--);

}

//------------------------------------------------------------------------------

//写数据子程序:公有

void

max7219drv::send(unsigned

char

address,unsigned

char

ndata)

{

write(address);

write(ndata);

CLR_LOAD;

SET_LOAD

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论