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

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
/*--------------------------------------------------*/
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<43;j++)
for(k=0;k<73;k++)
;
}
}
/*-------------------------------------------------
向max7219写入字节(8位)
--------------------------------------------------*/
voidsendchar(unsignedcharch)
{
unsignedchari,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位)
-------------------------------------------------*/
voidwriteword(unsignedcharaddr,unsignedcharnum)
{
dis_load=0;
_nop_();
sendchar(addr);
_nop_();
sendchar(num);
_nop_();
dis_load=1;
}
/*-------------------------------------------------
max7219初始化
-------------------------------------------------*/
voidinitdis(void)
{
writeword(scanlimit,scandigit);/*设置扫描界限*/
writeword(decodemode,decodedigit);/*设置译码模式*/
writeword(intensity,intensitygrade);/*设置亮度*/
writeword(shutdown,normaloperation);/*设置电源工作模式*/
}
/*-------------------------------------------------
系统上电初始化
-------------------------------------------------*/
voidinitmain(void)
{
ie=0x00;/*设置中断允许寄存器*/
ip=0x00;/*设置中断优先级管理寄存器*/
th0=0xd8;/*设定时器初值,10ms*/
tl0=0xf0;
tmod=0x01;/*t1定时器模式2,波特率发生器,t0定时器模式1*/
tcon=0x11;/*设置定时器控制寄存器,int0设置为边沿触发方式*/
psw=0x00;
}
/*-------------------------------------------------
主函数
-------------------------------------------------*/
voidmain(void)
{
initmain();
initdis();
writeword(displaytest,testmode);
delayx10ms(0x64);
delayx10ms(0x64);
writeword(displaytest,textend);
while(1)
{
unsignedchari;
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-2218:00:21
我有更简单的 [rq88] 2005-4-2218:38:00 我有更简单的
那就发上来大家都看看嘛 [bush636] 2005-4-2221:19:13
我有avrc++的at90s2313通过(有图)(附图) [sunnyyonkers] 2005-4-2314:27:58 要注意到时序正确就行了,另外电压一定要够,否则一定会出现乱
码。
我先给出一个我做的一个通用驱动。
//------------------------------------------------------------------------------
//author:sunnyyonkers
//date:2005y-03m-18d13:00
//------------------------------------------------------------------------------
#include
#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;
}
//------------------------------------------------------------------------------

l7812cv输出电流是多少
腾讯大数据十年发展历程
DS1302时钟芯片的工作原理
5G物联网时代!华为/阿里/谷歌再次开战
Cadence 扩大了与 Samsung Foundry 的合作,依托 Integrity 3D-IC平台提供独具优势的参考流程
max7219显示程序-C程序—汇编
北汽蓝谷将于明年上市搭载神行电池的极狐车型
华为手机云服务要提升2017年的盈利?
跑者无疆,安富利以跑步践行ESG理念
基于云的实时利益相关者协作
什么是三端双向交流开关(TRIAC),其工作原理是什么?
MAX9132/MAX9134/MAX9135 高速、多路L
P型半导体的定义及形成
歌尔携前沿智能硬件助力实现智慧生活
小米Note3什么时候上市?小米官方发布预告:9月5日要发布双摄旗舰新机,是小米Note3?
华为Mate 30 Pro 5G版Speedtest实测 下行达1466Mbps
在NVIDIA Omniverse Code竞赛中构建元宇宙的3D工具
使用无线振动传感器实现连续可靠的过程监控
PLC程序循环扫描的5个工作过程详解
网易云信三年深入探索在线医疗 精进“互联网+医疗”技术