用max7219驱动六个七端数码管,上电全显示8,接上单片机的数据线或者不接都显示为8;手在附近晃动会引起数码管显示乱码,。程序在Proteus中仿真时正常,求各位高手帮忙解决问题。程序如下:
#include<reg52.h>
#include<intrins.h>
/****************************************************************/
//引脚连接,
sbit DIN = P1^0 ;
sbit CLK = P1^2 ;
sbit LOAD= P1^1 ;
/***************************************************************/
typedef unsigned char uchar;
typedef unsigned int uint;
//BCD decode for 0~9,blank
code uchar Seg[]={0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0xff};
//code uchar Seg[]={0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00};
//延时约1m秒,晶振是11.592
void delay(uint n)
{
uchar j;
while(n--)
for(j=0;j<120;j++);
}
//向7219发送一char型数据
void SendChar(uchar CharData)
{
uchar ii;
for (ii=0;ii<8;ii++){//8个时钟
CLK = 0;
if(((CharData<<ii)&0x80)==0x80)
DIN=1;
else
DIN=0;
CLK=1;
}
}
//向7219中发送多个串数据
void SendAddrDataMulti(uchar Addr,uchar Data)
{
LOAD=0;
_nop_();
SendChar(Addr);
_nop_();
SendChar(Data);
_nop_();
LOAD=1;
_nop_();
}
//向7219发送一十六位的数据
void SendAddrDataSingle(uchar Addr,uchar Data)
{
SendChar(Addr);
_nop_();
SendChar(Data);
_nop_();
}
//初始化所有的器件
void InitAllComponents(void)
{
SendAddrDataMulti(0xf9,0xff); //set decode mode ,Code B Decode for digits 0~7
SendAddrDataMulti(0xfa,0x0f); //set intensity to the max
SendAddrDataMulti(0xfb,0xf1); //set scan limit register format for display 0~7
SendAddrDataMulti(0xfc,0xf1); //set the 7219 to Normal Operation .1--normal operation,0-hutdown
SendAddrDataMulti(0xff,0x00); //set to display; 1-test mode,0-normal mode
}
//向7219中写入数据
void WriteData2Comp()
{
uchar i=0;
for (i=0;i<9;i++)
{
LOAD=0;
delay(10);
SendAddrDataSingle(i,Seg[i+1]);
delay(10);
LOAD=1;
}
}
void main()
{
uchar DataTemp=0;
uchar i=8;
delay(500);//延时让电源稳定
InitAllComponents();
WriteData2Comp();
while(1);
}
STC89C52控制MAX7219驱动2个四位一体的共阴数码管无法正常显示
应该是程序设计的问题,因为这种连接是动态显示,单片机可以驱动。
急!!!max7219驱动数码管问什么会闪烁不停?各种方法都试过了,没效果...
像你这种既然可以闪烁显示数字,说明硬件的问题不大,那很大可能是程序的问题。如果是7219级联驱动更多数码管的话的话,就更加需要调试程序了
STC89C52控制MAX7219驱动数码管无法正常显示
如果在仿真是正确的话,会怀疑板子线路,程序是不会跑错的,在锁存数据时加一段延时吧。让数据稳定。参考资料:MS
MAX7219驱动数码管无法正常显示
Write_Max7219(SHUT_DOWN, 0x01); \/\/设置掉电模式 Write_Max7219(DISPLAY_TEST, 0x00); \/\/设置不工作寄存器 Write_Max7219(DECODE_MODE, 0x09); \/\/设置编码模式 Write_Max7219(SCAN_LIMIT, 0x06); \/\/扫描控制寄存器 Write_Max7219(INTENSITY, 0x04); \/\/设置亮度调节 0xX0~...
跪求MAX7219驱动数码管的时钟代码
w_max7219(0x0f,0x00); \/\/显示状态,0x00为正常显示,0x01为显示测试 timer_ms(2);} \/ 函数名称:w_max7219 函数功能:向MAX7219写入数据 入口参数:addr MAX7219内部寄存器地址,wdata 写入内部寄存器的操作数值 出口参数:其 它:\/ void w_max7219(unsigned char addr,unsigned char wdata)...
四位一体数码管各位数字显示怎么实现单独控制?求解。需要什么芯片?_百度...
此外它还支持多片7219串联方式,这样MCU就可以通过3根线(即串行数据线、串行时钟线和芯片选通线)控制更多的数码管显示。MAX7219有下列几组寄存器:译码控制寄存器、亮度控制寄存器、扫描界限寄存器。MAX7219的外部引脚分配如图1所示及内部结构如图2所示。各位的功能为:DIN:串行数据输入端,DOUT:串行数据...
max7219规格
在输出性能上,它具有高电平输出电流,可以达到65毫安,这对于驱动大型数码管或者LED阵列来说是足够的。温度适应性良好,可以在-40摄氏度的低温环境中正常工作,而且在最热的环境下,也能稳定运行至+85摄氏度,确保了设备在各种气候条件下的可靠性。总的来说,Max7219是一款功耗适中、性能稳定的数字输出...
怎样控制7219让其中的一位闪烁显示呢?每隔1S或半秒。
延时,或者定时器定时刷新,就是隔一定时间写空,或者字符
数码管的显示是什么方式?
在应用数码管进行显示时,首先需要考虑的问题就是驱动电流,与发光二极管相同,数码管的发光段也需要串联限流电阻,以共阳极数码管为例,串联的限流电阻阻值越大,电流越小,亮度越低;电阻值越小,电流越大,亮度越高。在使用限流电阻时需要在每一个段线上都串联限流电阻,而不要在公共端上串联电阻,...
max7219能否同时驱动两块液晶,一块是5位数码管,另一块是3位数码管?
答:max7219具有亮度控制功能,不知道你注意到了没有,他是通过+VDD和ISET之间接一个电阻来提高段电流的,最小值为9.53K,设定段电流为40mA. 显示亮度还可以通过亮度寄存器来控制,数字控制显示亮度是通过亮度寄存器的低四位来控制的脉宽调制器来控制。