max7219多级联程序

电子常识

2641人已加入

描述

  MAX7219/MAX7221为紧凑的串行输入/输出共阴极显示驱动器,用于连接微处理器(µP)与8位7段LED数码管显示器、条形图显示器或64个独立的LED。器件内置BCD B码译码器、多路复用扫描电路、段和位驱动器以及存储每位数字的8x8静态RAM。只需一个外部电阻即可设置所有LED的段电流。MAX7221兼容于SPI™、QSPI™以及MICROWIRE™接口,段驱动器带有摆率限制,以降低EMI。

  便利的4线串行接口可以连接所有通用µP。可对每位数字单独寻址和更新,无需重新写入整个显示器。MAX7219/MAX7221还允许用户为每位数字选择B码译码或非译码方式。

  器件具有150µA低功耗关断模式、模拟和数字亮度控制、允许用户显示1至8位数字的扫描限制寄存器以及强制点亮所有LED的测试模式。

  如需3V工作电压或字段闪烁的应用,请参考MAX6951数据资料。

  显示器

  MAX7219多级联驱动程序

  在使用多个7219级联时,只要在写入最后一片7219时作一特殊处理就可以了。

  /*----------------显示模块----------------------*/

  //级连的四个7219模块,以引出线在右边为准,自左至右为位3,2,1,0。每一个7219模块,自上至下,为a,b,。.g,h段

  // 字符表的排列为CharMap_X[a , b, c, d,e, f,g,h],

  //模板的排列model_xxxx[char3[a , b, c, d,e, f,g,h],char2[a , b, c, d,e, f,g,h],char1[a , b, c, d,e, f,g,h],char0[a , b, c, d,e, f,g,h]]

  //段数据的排列 Seg_data的排列与模板的排列相同。

  //7219控制寄存器

  #define ScanLimit 0x0b //扫描界限地址 #define ScanDigit 7 //0-7, 7全扫 #define DecodeMode 0x09 //译码模式地址 #define DecodeDigit 0x00 //0x00 不译码 0x01 只译字0 0x0f 译字0-3 0xff 全译码

  #define Intensity 0x0a // 亮度地址

  #define IntensityGrade 0x00 //0-f 16个档次 #define ShutDown 0x0c //电源工作模式地址 #define NormalOperation 1 //1 正常 0 掉电 #define DisplayTest 0x0f //测试模式地址 #define TestMode 1 //0 正常 1 测试 #define TestEnd 0 //0 正常 1 测试 #define No_op 0 //无操作寄存器 #define num_7219 4

  

  延时子程序

  ***********************************************************/

  ///////////////// 延时 =6.6*x +9.6 us

  void delay(unsigned int x) //22.1184Mhz x=1时16.2us ,x=2 23us, x=3 29.6us

  x=150 ~~=1ms { uint i;

  for(i=0;i《x;i++); }

  ///////////延迟Xms

  void delay_xms(uchar x) //22Mhz xms {

  int i,set; set=0;

  for(i=0;i《x;i++) { delay(150); //150 } }

  void InitMain (void) {

  TMOD=0x20;

  TH0=0xff; TL0=0xf4; EA=1; ES=1;

  TR1=1; }

  //max7219的驱动LED显示

  /************************** ******************************** */ /*------------------------------------------------- 向MAX7219写入字节(8位)

  --------------------------------------------------*/ void SendChar7219 (uchar ch)

  {

  uchar i,temp;

  nop;

  for (i=0;

  i《8;i++) {

  ps7219_pin_CLK=0;

  temp=ch&0x80;

  ch=ch《《1;

  if(temp) {

  ps7219_pin_DIN=1;

  }

  else

  {

  ps7219_pin_DIN=0;

  }

  ps7219_pin_CLK=1;

  _nop_();

  }

  第四片7219 ps7219_pin_LOAD=0;

  //封锁第一片锁存操作 WriteWord7219 (Addr,Seg_data[8-Addr]);

  //写第四片 ps7219_pin_CLK=1; WriteWord7219 (No_op,0);

  //跳过第一、二、三片7219 WriteWord7219 (No_op,0);

  WriteWord7219 (No_op,0);

  ps7219_pin_LOAD=1;

  // 锁存操作

  }

  /*------------------------------------------------- 写一屏

  /*-------------------------------------------------*/ void WriteOneScreen7219( )

  {

  char i;

  for (i=7;

  i》=0;

  i--)

  {

  WriteLine7219 (i+1);

  }

  }

  /*------------------------------------------------- MAX7219初始化

  -------------------------------------------------*/

  void InitDis7219 (void) {

  char i; for (i=num_7219; i》=0; i--)

  {

  WriteWord7219(ShutDown,NormalOperation);/*设置电源工作模式*/

  ps7219_pin_LOAD=1;

  //锁存操作 WriteWord7219(ScanLimit,ScanDigit);

  /*设置扫描界限*/ ps7219_pin_LOAD=1;

  //锁存操作

  WriteWord7219(DecodeMode,DecodeDigit);

  /*设置译码模式*/ ps7219_pin_LOAD=1;

  //锁存操作 WriteWord7219(Intensity,IntensityGrade);

  /*设置亮度*/ ps7219_pin_LOAD=1;

  //锁存操作 delay_xms(10);

  //延迟10ms

  WriteWord7219 (DisplayTest,TestEnd);

  //正常工作 ps7219_pin_LOAD=1; //锁存操作

  }

  }

  void main()

  {

  InitDis7219 ();

  delay_xms(50);

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分