⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 八位串行led显示驱动器max7219 7211应用程序应用程序.txt

📁 八位串行LED显示驱动器MAX7219 7211应用程序应用程序
💻 TXT
字号:

分享]八位串行LED显示驱动器MAX7219 7211应用程序.ASM
程序清单:
ORG  0000H
MAX7219:DIN  BIT P1.1 ;定义变量
  CLK  BIT P1.2
  LOAD    BIT P1.1
  LED_BF  EQU 50H   ;显示数据首址
  AJMP MAIN
MAIN: MOV  SP.#70H
  LCALL PROCESS  ;设置MAX7219初始值
  LCALL DISPLAY  ;显示
WAIT;      ;其他程序省略
  
  SJMP  WAIT
  ;MAX7219初始化子程序
PROCECC :MOV A,#0BH
  MOV  B,#07H
  LCALL W_7219
  MOV A,#09H
  MOV B,#00H
  LCALL W_7219
  MOV A,##0AH
  MOV B,#09H
  LCALL W_7219
  MOV A,#0CH
  MOV B,#01H
  LCALL W_7219
  RET
  ;MAX7219显示子程序
DISPLAY:MOV R0,#LED_BF  
  MOV R4,#01H
  MOV R3,#08H
C_DISP:MOV A,@R0
  MOV B,A
  MOV A,R4
  LCALL W_7219
  INC R0
  INC R4
  DJNZ R3,C_DISP
  RET
W_7219:CLR LOAD
  LCALL SD_7219
  MOV A,B
  LCALL SD_7219
  SETB LOAD
  RET
  
SD_7219:MOV R6,#08H
C_SD:NOP
  CLR CLK
  RLC A
  MOV DIN,C
  NOP
  SETB CLK
  DJNZ R6,C_SD
  RET



7219显示程序
#include
#define uchar unsigned char
sbit DIN=P0^7;
sbit LOAD=P0^1;
sbit CLK=P0^2;
void display(uchar addr, uchar dat)
{
uchar i,ADS;
LOAD=0;
CLK=0;
ADS=addr;
for(i=8;i>0;i--)
  { 
   DIN=ADS&0x80;
   ADS0;i--)
  {
   DIN=ADS&0x80;
   ADS<<=1;
   CLK=1;
   CLK=0;
   }
   LOAD=1;
}
void main(void)
{
        display(0x0f,0x0);/*不测试*/
display(0x0A,0x05);/*亮度选择*/
display(0x09,0xff);/*译码选择*/
display(0x0B,0x06);/*扫描LED的个数*/
display(0x0C,0x01);/*启动*/
        while(1)
        {
         display(1,0x7);
         display(2,0x6);
         display(3,0x5);
         display(4,0x4);
         display(5,0x01);
         display(6,0x01);
         display(7,0x01);
         display(8,0x01);
         }
}


MAX197程序
[ 2005-9-12 21:50:25 | By: 菠菜 ]
#i nclude <at89x52.h>
#i nclude <intrins.h>
#i nclude<absacc.h>
#i nclude "key.h"
#i nclude "led.h"
extern uchar key;//存键值
extern bit key_flag;//键按下标志
extern uchar led_buf[];//显示缓冲区
#define nop8() {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}

#define IN_0_5_BASE    1.220703  //  5/4096,量程为0-5v每单位电压大小
#define IN_0_10_BASE   2.441406  //  10/4096 0-10v
#define IN_N5_5_BASE   2.441406  //  10/4096 -5v-5v
#define IN_N10_10_BASE 4.882813   // 20/4096 -10v-10v
                         //_cs HBEN  
#define ADCCOM  XBYTE[0x7fff]  //0   1  控制命令字地址
#define ADLO  XBYTE[0x3fff]  //0   0   低8位地址,
#define ADHI  XBYTE[0x7Fff]  //0   1     高四位地址
                         //内部时钟 内部采样 0 to 5  通道0 
uchar channel=0;        //PD1 PD0 ACQMOD RNG BIP A2 A1 A0
uchar volatile bdata command_byte=0x40;  //0   1     0    0   0   0  0  0
sbit PD1=command_byte^7; 
sbit PD0=command_byte^6;
sbit ACQMOD=command_byte^5;
sbit RNG=command_byte^4;
sbit BIP=command_byte^3;
//###################################################
//sbit _WR=P3^6;
//sbit _RD=P3^7;
//sbit CS=P2^7;     //引脚连接
//sbit HBEN=P2^6;
//###################################################
                 
void main(void)
{
 uchar msb,lsb;
 uint volatile data volt;
 uchar input_mode;
 CS=HBEN=1;
 key_init();
 led_buf[7]=channel;
 led_buf[6]=12+((uchar)BIP<<1)+(uchar)RNG; 
 //BIP RNG INPUT RANGE (V) 显示
 // 0   0    0 to 5    a
 // 0   1    0 to 10   b
 // 1   0     ±5    c
 // 1   1     ±10    d                               
 led_update();
 while(1)
 {
   
  if(_testbit_(key_flag))
  {
   if(read_key())//读按键
   {
    if(key==KEY_B)
    {
     ADCCOM=command_byte+channel;
     nop8();//等待8us让其完成转换
     ADCCOM=command_byte+channel; //让其测三次之后就可以得到稳定的电压了。
     nop8();//等待8us让其完成转换
     ADCCOM=command_byte+channel;
     nop8();//等待8us让其完成转换
     msb=ADHI&0x0f;
     lsb=ADLO;
     volt=msb*256+lsb; 
     lclear(0,5);
     input_mode=((uchar)BIP<<1)+(uchar)RNG;//由量程来确定如何处理数据
     switch(input_mode)
     {
      case 0:
       volt*=IN_0_5_BASE;
       break;
      case 1:
       volt*=IN_0_10_BASE;
       break;
      case 2:
       volt*=IN_N5_5_BASE;
       if(volt>5000)//如是为负电压
       {
        led_buf[0]=LED_NEG;
        volt=10000-volt; 
       }
       else
        led_buf[0]=LED_BLANK;//显示负号
       break;
      case 3:
       volt*=IN_N10_10_BASE;
       if(volt>10000)//如是为负电压
       {
        led_buf[0]=LED_NEG;
        volt=20000-volt; 
       }
       else
        led_buf[0]=LED_BLANK;//显示负号
       break;
      
     }
     if(volt>9999)
      lprinti(volt,0x35,1);//格式输出
     else
     {
      lprinti(volt,0x34,2);//格式输出
     }
     led_update(); 
    }
    else if(key==KEY_C)//按键选择量程为0-5v
    {
     BIP=0;
     RNG=0;
    }
    else if(key==KEY_D)//按键选择量程为0-10v
    {
     BIP=0;
     RNG=1;
    }
    else if(key==KEY_E)//按键选择量程为-5-5v
    {
     BIP=1;
     RNG=0;
    }
    else if(key==KEY_F)//按键选择量程为-10-10v
    {
     BIP=1;
     RNG=1;
    }
    else if(key<KEY_8)//选择通道0~7
    {
     channel=key;
     led_buf[7]=channel;//通道送显
    }
    led_buf[6]=12+((uchar)BIP<<1)+(uchar)RNG;//量程送显
    led_update();
   }
  }
 }
}

阅读全文(160) | 回复(0) | 引用通告(0) | 编辑 





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -