找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3080|回復(fù): 9
收起左側(cè)

max7219驅(qū)動數(shù)碼管循環(huán)顯示0-9以及help字符,現(xiàn)在只能顯示0-9 求個思路

[復(fù)制鏈接]
ID:836924 發(fā)表于 2020-11-24 17:20 | 顯示全部樓層 |閱讀模式
如題
回復(fù)

使用道具 舉報

ID:748788 發(fā)表于 2020-11-25 10:49 | 顯示全部樓層
將要顯示的0-9和help字符按順序放到數(shù)組里,在一個循環(huán)里逐一顯示。
回復(fù)

使用道具 舉報

ID:836924 發(fā)表于 2020-11-25 20:06 | 顯示全部樓層
wwh2382 發(fā)表于 2020-11-25 10:49
將要顯示的0-9和help字符按順序放到數(shù)組里,在一個循環(huán)里逐一顯示。

#include <reg52.h>
#include <intrins.h>         
sbit DIN_7219=P0^5;   //7219串行數(shù)據(jù)輸入端
sbit LOAD_7219=P0^6;   //7219數(shù)據(jù)鎖存端
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;  //時鐘上升沿把數(shù)據(jù)送入寄存器鎖定  
   }
}
void write_7219 (uchar addr,uchar dat)
{
LOAD_7219=0;     //寄存器打開,等待數(shù)據(jù)的送入
_nop_();
write_7219_byte (addr);   //選擇寄存器地址
_nop_();
write_7219_byte (dat);    //選擇讓芯片執(zhí)行什么命令
_nop_();
LOAD_7219=1; //第16個上升沿之后,第17個上升沿之前必須把pinCLK置高,否則數(shù)據(jù)丟失
}
void init_7219 (void)
   {
     write_7219 (0x0c,0x01);     /*  設(shè)置電源工作模式            */
     write_7219 (0x0a,0x02);     /*  設(shè)置亮度(19/32,根據(jù)需要增減)*/
     write_7219 (0x0b,0x03);     /*  設(shè)置掃描界限(根據(jù)需要增減)  */
     write_7219 (0x09,0x00);     /*  設(shè)置譯碼模式(00不譯,FF譯)    */
  write_7219 (0x0f,0x00);     /*  顯示測試(00為正常工作狀態(tài))  */
   }
void clear_7219(void)
{
uchar i;       //變量i,用來選擇數(shù)碼管位選
for(i=8;i>0;i--)     //i自減,選擇完所有的8位
{
  write_7219(i,0x00);  //對應(yīng)位選的段全部清除顯示
}
}
void main(void)
{
    init_7219 ();          //MAX7219初始化
clear_7219();   //MAX7219清除顯示,免去干擾
    while(1)   
  {  
   write_7219(0x01,LEDcode[5]);      //掃描第一位(LSB),并送段碼顯示
   write_7219(0x02,LEDcode[5]|0x80); //掃描第二位,并送段碼顯示,同時加顯小數(shù)點2|  0x80 如果不加小數(shù)點就去掉|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),并送段碼顯示

  }   
}
回復(fù)

使用道具 舉報

ID:828133 發(fā)表于 2020-11-26 19:46 | 顯示全部樓層
#include <reg52.h> #include <intrins.h>          sbit DIN_7219=P0^5;   //7219串行數(shù)據(jù)輸入端 sbit LOAD_7219=P0^6;   //7219數(shù)據(jù)鎖存端 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;  //時鐘上升沿把數(shù)據(jù)送入寄存器鎖定      } } void write_7219 (uchar addr,uchar dat) { LOAD_7219=0;     //寄存器打開,等待數(shù)據(jù)的送入 _nop_(); write_7219_byte (addr);   //選擇寄存器地址 _nop_(); write_7219_byte (dat);    //選擇讓芯片執(zhí)行什么命令 _nop_(); LOAD_7219=1; //第16個上升沿之后,第17個上升沿之前必須把pinCLK置高,否則數(shù)據(jù)丟失 } void init_7219 (void)    {      write_7219 (0x0c,0x01);     /*  設(shè)置電源工作模式            */       write_7219 (0x0a,0x02);     /*  設(shè)置亮度(19/32,根據(jù)需要增減)*/      write_7219 (0x0b,0x03);     /*  設(shè)置掃描界限(根據(jù)需要增減)  */      write_7219 (0x09,0x00);     /*  設(shè)置譯碼模式(00不譯,FF譯)    */   write_7219 (0x0f,0x00);     /*  顯示測試(00為正常工作狀態(tài))  */    } void clear_7219(void) { uchar i;       //變量i,用來選擇數(shù)碼管位選 for(i=8;i>0;i--)     //i自減,選擇完所有的8位 {   write_7219(i,0x00);  //對應(yīng)位選的段全部清除顯示 } } void main(void) {     init_7219 ();          //MAX7219初始化 clear_7219();   //MAX7219清除顯示,免去干擾     while(1)      {      write_7219(0x01,LEDcode[5]);      //掃描第一位(LSB),并送段碼顯示    write_7219(0x02,LEDcode[5]|0x80); //掃描第二位,并送段碼顯示,同時加顯小數(shù)點2|  0x80 如果不加小數(shù)點就去掉|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),并送段碼顯示   }     }
回復(fù)

使用道具 舉報

ID:836924 發(fā)表于 2020-11-28 16:43 | 顯示全部樓層
poj 發(fā)表于 2020-11-26 19:46
#include  #include           sbit DIN_7219=P0^5;   //7219串行數(shù)據(jù)輸入端 sbit LOAD_7219=P0^6;   //721 ...

你這格式有點看不懂,有點亂了
回復(fù)

使用道具 舉報

ID:1143011 發(fā)表于 2025-1-16 22:48 | 顯示全部樓層
yq1113 發(fā)表于 2020-11-25 20:06
#include
#include         
sbit DIN_7219=P0^5;   //7219串行數(shù)據(jù)輸入端

謝謝你的數(shù)組,我一直找不到合適的數(shù)組顯示
回復(fù)

使用道具 舉報

ID:332444 發(fā)表于 2025-1-17 09:00 | 顯示全部樓層
數(shù)碼管字段自己用計算器就能獲得,很簡單的,每段的值分別是1 2 4 8 16 32 64 128所有復(fù)合的段都是這些值的加法.
回復(fù)

使用道具 舉報

ID:332444 發(fā)表于 2025-1-17 09:03 | 顯示全部樓層
舉個荔枝,要想數(shù)碼管顯示L則8+16+32=都知道的值,直接用十進(jìn)制也可轉(zhuǎn)為十六進(jìn)制也可.設(shè)計數(shù)碼管段值的軟件無非就是點擊進(jìn)行相應(yīng)的加減而已.
回復(fù)

使用道具 舉報

ID:332444 發(fā)表于 2025-1-17 22:17 | 顯示全部樓層
如果有人想要軟件的話留言,我可現(xiàn)寫一個,輸出十進(jìn)制、十六進(jìn)制、共陽、共陰四種值,8段數(shù)碼管點擊,有確定按鍵添加可生成數(shù)組元素。
回復(fù)

使用道具 舉報

ID:1143011 發(fā)表于 2025-1-30 11:32 | 顯示全部樓層
unsigned char code LED_0F[] = { //字體表
        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,0x37,0x17,0x0E,0x38,
        //A=11 B=12 C=13 D=14 E=15 F=16 H=17 h=18 L=19 J=20
         0x76,0x15,0x1D,0x67,0x73,0x0F,0x3e,0x1C,0x3B,0xff,
   //M=21,n=22,o=23,P=24,q=25,t=26,U=27,u=28,y=29,全亮=30
         0x01,0x08,0x80,0x09 }; 這是我的表
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表