发新帖我要提问
12
返回列表
打印

max7219驱动问题

[复制链接]
楼主: ousj
手机看帖
扫描二维码
随时随地手机跟帖
21
跟屏有关还是跟7219有关

使用特权

评论回复
22
zhaoxqi| | 2022-9-2 21:53 | 只看该作者
#include"reg51.h"
sbit LOAD=P2^1; //MAX7219片选   12脚
sbit DIN=P2^0; //MAX7219串行数据 1脚
sbit CLK=P2^2;//MAX7219串行时钟 13脚
sbit k1=P2^5;
sbit k2=P2^6;
sbit k3=P2^7;
//寄存器宏定义
#define DECODE_MODE 0x09       //译码控制寄存器
#define INTENSITY 0x0A        //亮度控制寄存器
#define SCAN_LIMIT 0x0B      //扫描界限寄存器
#define SHUT_DOWN 0x0C      //关断模式寄存器
#define DISPLAY_TEST 0x0F  //测试控制寄存器

//定义全局变量
unsigned char hour=0,minute=0,second=0,time=0,delaytime=0;
unsigned char code value[]={0,1,2,3,4,5,6,7,8,9};


//函数声明
void Write7219(unsigned char address,unsigned char dat);
void Initial(void);
void Key(void);

void delay(void);

//下面开始使用定时器进行延时。

void delay()
  {
    delaytime=0;    // 初始化延时变量。
while(delaytime<5);

  }

//地址、数据发送子程序
void Write7219(unsigned char address,unsigned char dat)
{
unsigned char i;
LOAD=0;            //拉低片选线,选中器件
                  //发送地址
for (i=0;i<8;i++)//移位循环8次
{
CLK=0;         //清零时钟总线
DIN=(bit)(address&0x80); //每次取高字节
address<<=1;            //左移一位
CLK=1;                 //时钟上升沿,发送地址
  }
            //发送数据
for (i=0;i<8;i++)
{
CLK=0;
DIN=(bit)(dat&0x80);
dat<<=1;
CLK=1;//时钟上升沿,发送数据
  }
LOAD=1;//发送结束,上升沿锁存数据
}


//MAX7219初始化,设置MAX7219内部的控制寄存器
void Initial(void)
{
Write7219(SHUT_DOWN,0x01);     //开启正常工作模式(0xX1)
Write7219(DISPLAY_TEST,0x00); //选择工作模式(0xX0)
Write7219(DECODE_MODE,0xff); //选用全译码模式
Write7219(SCAN_LIMIT,0x07); //8只LED全用
Write7219(INTENSITY,0x04); //设置初始亮度
}
//按键程序
void Key(void)
{
if(P2&0xE0==0xE0)  continue;//如果没有按下任何按键就跳出去,否者执行下面的按键操作,这么写就是为了消除抖动
   {
   if(k1==0)  second=0;            //秒针清零
   if(k2==0)  minute++;delay();
   if(k3==0)  hour++;  delay();
   }
}


void main(void)
{
TMOD=0x01;
EA=1;ET0=1;
TH0=(65536-46086)/256;
TL0=(65536-46086)%256;
TR0=1;
Initial(); //MAX7219初始化
while(1)
{
Key();
Write7219(1,  value[hour/10] );
Write7219(2,  value[hour%10] );
Write7219(3,10 );
Write7219(4,value[minute/10] );
Write7219(5,value[minute%10] );
Write7219(6,10);
Write7219(7,value[second/10] );
Write7219(8,value[second%10] );
}
}

void TimeInterrupt (void) interrupt 1 using 1
{
TH0=(65536-46086)/256;
TL0=(65536-46086)%256;
time++;

delaytime++; //此处开始延时,当调用延时时候会初始化,其他时间跑空
if(time==20)
   {time=0;  second++;}
if(second==60)
   {second=0;minute++;}
if(minute==60)
   {minute=0;  hour++;}
if(hour==24)  hour=0;  
}

使用特权

评论回复
23
huangchui| | 2022-9-2 21:54 | 只看该作者
参考一下我的代码,当年上学时候写的。

使用特权

评论回复
24
dengdc| | 2022-9-2 21:58 | 只看该作者
MAX7219 没有设置好

使用特权

评论回复
25
renyaq| | 2022-9-2 22:02 | 只看该作者
这是 MAX7219 这个是电路给你参考,一个是原厂的典型图  一个是我帮客户设计的

使用特权

评论回复
26
jiajs| | 2022-9-2 22:04 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则