找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2452|回复: 4
打印 上一主题 下一主题
收起左侧

max7219驱动数码管循环显示0-9以及help字符,现在只能显示0-9 求个思路

[复制链接]
跳转到指定楼层
楼主
ID:836924 发表于 2020-11-24 17:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:748788 发表于 2020-11-25 10:49 | 只看该作者
将要显示的0-9和help字符按顺序放到数组里,在一个循环里逐一显示。
回复

使用道具 举报

板凳
ID:836924 发表于 2020-11-25 20:06 | 只看该作者
wwh2382 发表于 2020-11-25 10:49
将要显示的0-9和help字符按顺序放到数组里,在一个循环里逐一显示。

#include <reg52.h>
#include <intrins.h>         
sbit DIN_7219=P0^5;   //7219串行数据输入端
sbit LOAD_7219=P0^6;   //7219数据锁存端
sbit CLK_7219=P0^7;   //7219时钟输入端
#define uchar unsigned char
uchar code LEDcode[]=
{0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x00     /*0,1,2,3,4,5,6,7,8,9,全灭*/
  /*0x77,0x1f,0x4e,0x3d,0x4f,0x47,0x67,0x3e,0xff,*/   };    /*A,B,C,D,E,F,P,U,全亮*/
void write_7219_byte (uchar dat)
{
uchar i,temp;
for (i=0;i<8;i++)
   {
       temp=dat&0x80;
       dat=dat<<1;
       if(temp)
          DIN_7219=1;   
       else
          DIN_7219=0;
    CLK_7219=0;
    _nop_();
       CLK_7219=1;  //时钟上升沿把数据送入寄存器锁定  
   }
}
void write_7219 (uchar addr,uchar dat)
{
LOAD_7219=0;     //寄存器打开,等待数据的送入
_nop_();
write_7219_byte (addr);   //选择寄存器地址
_nop_();
write_7219_byte (dat);    //选择让芯片执行什么命令
_nop_();
LOAD_7219=1; //第16个上升沿之后,第17个上升沿之前必须把pinCLK置高,否则数据丢失
}
void init_7219 (void)
   {
     write_7219 (0x0c,0x01);     /*  设置电源工作模式            */
     write_7219 (0x0a,0x02);     /*  设置亮度(19/32,根据需要增减)*/
     write_7219 (0x0b,0x03);     /*  设置扫描界限(根据需要增减)  */
     write_7219 (0x09,0x00);     /*  设置译码模式(00不译,FF译)    */
  write_7219 (0x0f,0x00);     /*  显示测试(00为正常工作状态)  */
   }
void clear_7219(void)
{
uchar i;       //变量i,用来选择数码管位选
for(i=8;i>0;i--)     //i自减,选择完所有的8位
{
  write_7219(i,0x00);  //对应位选的段全部清除显示
}
}
void main(void)
{
    init_7219 ();          //MAX7219初始化
clear_7219();   //MAX7219清除显示,免去干扰
    while(1)   
  {  
   write_7219(0x01,LEDcode[5]);      //扫描第一位(LSB),并送段码显示
   write_7219(0x02,LEDcode[5]|0x80); //扫描第二位,并送段码显示,同时加显小数点2|  0x80 如果不加小数点就去掉|0x80
   write_7219(0x03,LEDcode[5]);      //扫描第三位,并送段码显示
   write_7219(0x04,LEDcode[5]);   //扫描第四位,并送段码显示
//  write_7219(0x05,LEDcode[5]);   //扫描第五位,并送段码显示
//  write_7219(0x06,LEDcode[6]);   //扫描第六位,并送段码显示
//  write_7219(0x07,LEDcode[7]);   //扫描第七位,并送段码显示
//  write_7219(0x08,LEDcode[8]);   //扫描第八位(MSB),并送段码显示

  }   
}
回复

使用道具 举报

地板
ID:828133 发表于 2020-11-26 19:46 | 只看该作者
#include <reg52.h> #include <intrins.h>          sbit DIN_7219=P0^5;   //7219串行数据输入端 sbit LOAD_7219=P0^6;   //7219数据锁存端 sbit CLK_7219=P0^7;   //7219时钟输入端 #define uchar unsigned char uchar code LEDcode[]= {0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x00     /*0,1,2,3,4,5,6,7,8,9,全灭*/   /*0x77,0x1f,0x4e,0x3d,0x4f,0x47,0x67,0x3e,0xff,*/   };    /*A,B,C,D,E,F,P,U,全亮*/ void write_7219_byte (uchar dat) { uchar i,temp; for (i=0;i<8;i++)    {         temp=dat&0x80;        dat=dat<<1;        if(temp)           DIN_7219=1;           else           DIN_7219=0;     CLK_7219=0;     _nop_();        CLK_7219=1;  //时钟上升沿把数据送入寄存器锁定      } } void write_7219 (uchar addr,uchar dat) { LOAD_7219=0;     //寄存器打开,等待数据的送入 _nop_(); write_7219_byte (addr);   //选择寄存器地址 _nop_(); write_7219_byte (dat);    //选择让芯片执行什么命令 _nop_(); LOAD_7219=1; //第16个上升沿之后,第17个上升沿之前必须把pinCLK置高,否则数据丢失 } void init_7219 (void)    {      write_7219 (0x0c,0x01);     /*  设置电源工作模式            */       write_7219 (0x0a,0x02);     /*  设置亮度(19/32,根据需要增减)*/      write_7219 (0x0b,0x03);     /*  设置扫描界限(根据需要增减)  */      write_7219 (0x09,0x00);     /*  设置译码模式(00不译,FF译)    */   write_7219 (0x0f,0x00);     /*  显示测试(00为正常工作状态)  */    } void clear_7219(void) { uchar i;       //变量i,用来选择数码管位选 for(i=8;i>0;i--)     //i自减,选择完所有的8位 {   write_7219(i,0x00);  //对应位选的段全部清除显示 } } void main(void) {     init_7219 ();          //MAX7219初始化 clear_7219();   //MAX7219清除显示,免去干扰     while(1)      {      write_7219(0x01,LEDcode[5]);      //扫描第一位(LSB),并送段码显示    write_7219(0x02,LEDcode[5]|0x80); //扫描第二位,并送段码显示,同时加显小数点2|  0x80 如果不加小数点就去掉|0x80    write_7219(0x03,LEDcode[5]);      //扫描第三位,并送段码显示    write_7219(0x04,LEDcode[5]);   //扫描第四位,并送段码显示 //  write_7219(0x05,LEDcode[5]);   //扫描第五位,并送段码显示 //  write_7219(0x06,LEDcode[6]);   //扫描第六位,并送段码显示 //  write_7219(0x07,LEDcode[7]);   //扫描第七位,并送段码显示 //  write_7219(0x08,LEDcode[8]);   //扫描第八位(MSB),并送段码显示   }     }
回复

使用道具 举报

5#
ID:836924 发表于 2020-11-28 16:43 | 只看该作者
poj 发表于 2020-11-26 19:46
#include  #include           sbit DIN_7219=P0^5;   //7219串行数据输入端 sbit LOAD_7219=P0^6;   //721 ...

你这格式有点看不懂,有点乱了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表