|
|
max7219显示程序(汇编)
#include "msp430x41x.h"
DIN EQU 001H 1.0
CLK EQU 002H 1.1
LOAD EQU 004H 1.2
ORG 0F000H
RESET MOV #300H,SP ;初始化
MOV #WDTPW+WDTHOLD,&WDTCTL
BIS.B #CLK,& 1DIR
BIS.B #DIN,& 1DIR
BIS.B #LOAD,& 1DIR
PUSH #00C01H ;设置工作模式
BIC.B #LOAD,& 1OUT
CALL #MOVE
BIS.B #LOAD,& 1OUT
PUSH #00B05H ;设置扫描位数
BIC.B #LOAD,& 1OUT
CALL #MOVE
BIS.B #LOAD,& 1OUT
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
/*--------------------------------------------------*/
sbitdis_DIN=P1^0;/*显示串行数据输入端*/
sbitdis_LOAD=P1^1;/*显示数据锁存端*/
sbitdis_CLK=P1^2;/*显示时钟输入端*/
#defineNoOp0x00/*空操作*/
#defineDigit00x01/*数码管1*/
#defineDigit10x02/*数码管2*/
#defineDigit20x03/*数码管3*/
#defineDigit30x04/*数码管4*/
#defineDigit40x05/*数码管5*/
#defineDigit50x06/*数码管6*/
#defineDigit60x07/*数码管7*/
#defineDigit70x08/*数码管8*/
#defineDecodeMode0x09/*译码模式*/
#defineIntensity0x0a/*亮度*/
#defineScanLimit0x0b/*扫描界限*/
#defineShutDown0x0c/*掉电模式*/
#defineDisplayTest0x0f/*显示测试*/
#defineShutdownMode0x00/*掉电方式工作*/
#defineNormalOperation0x01/*正常操作方式*/
#defineDecodeDigit0xff/*译码位数设置*/
#defineIntensityGrade0x0a/*显示亮度级别设置*/
#defineScanDigit0x07/*扫描位数设置*/
#defineTestMode0x01/*显示测试方式*/
#defineTextEnd0x00/*显示测试结束,正常工作*/
unsignedchardataDisBuffer[8]={0,0,0,0,0,0,0,0};/*显示缓存区*/
unsignedcharcodedispaly_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延时子程序
---------------------------------------------------------*/
voiddelayX10ms(unsignedcharcount)
{
unsignedcharj,k;
while(count--!=0)
{
for(j=0;j
#include
#include
#include
#include
#include
#include
//------------------------------------------------------------------------------
//HardwareDefine
//引脚定义
#defineSOFT_SERIAL_PORTPORTB
#defineSOFT_SERIAL_DDRDDRB
#defineSOFT_SERIAL_PINPINB
//------------------------------------------------------------------------------
#defineLOAD_PIN0b00000100
#defineDIN_PIN0b00001000
#defineCLK_PIN0b00010000
//------------------------------------------------------------------------------
//定义引脚操作
#defineSET_DINSOFT_SERIAL_PORT|=DIN_PIN
#defineCLR_DINSOFT_SERIAL_PORT&="DIN_PIN
#defineSET_CLKSOFT_SERIAL_PORT|=CLK_PIN
#defineCLR_CLKSOFT_SERIAL_PORT&="CLK_PIN
#defineSET_LOADSOFT_SERIAL_PORT|=LOAD_PIN
#defineCLR_LOADSOFT_SERIAL_PORT&="LOAD_PIN
//------------------------------------------------------------------------------
#defineTRUE0x01
#defineFALSE0x00
//------------------------------------------------------------------------------
#defineDISPLAY_ADD_00x01
#defineDISPLAY_ADD_10x02
#defineDISPLAY_ADD_20x03
#defineDISPLAY_ADD_30x04
#defineDISPLAY_ADD_40x05
#defineDISPLAY_ADD_50x06
#defineDISPLAY_ADD_60x07
#defineDISPLAY_ADD_70x08
//------------------------------------------------------------------------------
#defineDECODE_ADDRESS0x09
#defineLIGHT_ADDRESS0x0a
#defineSCAN_WIDE0x0b
#defineSLEEP_ADDRESS0x0c
#defineTEST_ADDRESS0x0d
//------------------------------------------------------------------------------
#defineSLEEP_MODE0x00
#defineUN_SLEEP_MODE0x01
//------------------------------------------------------------------------------
#defineNO_DECODE0x00
#defineDECODE_0_0x01
#defineHALF_DECODE0x0f
#defineDECODE_ALL0xff
//------------------------------------------------------------------------------
#define_CHAR_00b00000000
#define_CHAR_10b00000001
#define_CHAR_20b00000010
#define_CHAR_30b00000011
#define_CHAR_40b00000100
#define_CHAR_50b00000101
#define_CHAR_60b00000110
#define_CHAR_70b00000111
#define_CHAR_80b00001000
#define_CHAR_90b00001001
#define_CHAR_-0b00001010
#define_CHAR_E0b00001011
#define_CHAR_H0b00001100
#define_CHAR_L0b00001101
#define_CHAR_P0b00001110
#define_NO_CHAR0b00001111
#define_DOT0b10000000
//------------------------------------------------------------------------------
classmax7219drv
{
public:
max7219drv();
private:
voidwrite(unsignedcharcData);
public:
voidsend(unsignedcharaddress,unsignedcharndata);
};
//------------------------------------------------------------------------------
//构造函数
max7219drv::max7219drv()
{
SOFT_SERIAL_PORT|=0b11111111;//初始状态高电平
SOFT_SERIAL_DDR|=0b11111111;//状态
///////////////////////////////////////////////
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//写数据微程序:私有
voidmax7219drv::write(unsignedcharcData)
{
unsignedcharnloop=0x07;
/////////////////////////////////////////////
do{
(0x80&cData)?(SET_DIN) CLR_DIN);cData<<=1;//数据移
出
CLR_CLK;
SET_CLK;//产生一个时钟信号
}while(nloop--);
}
//------------------------------------------------------------------------------
//写数据子程序:公有
voidmax7219drv::send(unsignedcharaddress,unsignedcharndata)
{
write(address);
write(ndata);
CLR_LOAD;
SET_LOAD;
}
//------------------------------------------------------------------------------
intmain(void)
{
max7219drvdrv;
/////////////////////////////////////////////////////////////////
for(;;)
{
/////////////////////////////////////////////////////////////
//InitMAX7219
drv.send(SLEEP_ADDRESS,UN_SLEEP_MODE);
drv.send(SCAN_WIDE,0x07);
drv.send(LIGHT_ADDRESS,0xf9);
drv.send(DECODE_ADDRESS,DECODE_ALL);
/////////////////////////////////////////////////////////////
drv.send(DISPLAY_ADD_0,_CHAR_1|_DOT);
drv.send(DISPLAY_ADD_1,_CHAR_2|_DOT);
drv.send(DISPLAY_ADD_2,_CHAR_3|_DOT);
drv.send(DISPLAY_ADD_3,_CHAR_4|_DOT);
drv.send(DISPLAY_ADD_4,_CHAR_5|_DOT);
drv.send(DISPLAY_ADD_5,_CHAR_6|_DOT);
drv.send(DISPLAY_ADD_6,_CHAR_7|_DOT);
drv.send(DISPLAY_ADD_7,_CHAR_8|_DOT);
/////////////////////////////////////////////////////////////
//去掉小数点使用drv.send(DISPLAY_ADD_7,_CHAR_8&"
_DOT);
//添加小数点使用drv.send(DISPLAY_ADD_7,_CHAR_8|
_DOT);
/////////////////////////////////////////////////////////////
}
return0;
}
//------------------------------------------------------------------------------ |
|