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

📄 czz_led.c.c

📁 max8279显示程序
💻 C
字号:
#include<absacc.h>
#include<reg52.h>
#include<math.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

 sbit LOAD=P1^6;/*max7219*/
 sbit DIN=P1^5;/*max9219*/
 sbit SCK=P1^7;/*max7219时钟*/
uchar data tt[10];
uchar idata ZH_ADD;
uchar sbufjsq=0;
bit SB=0;
sbit ZK_YK=P1^1;
sbit CH1=P1^3;
sbit CH2=P1^4;
sbit ZZ_YZ=P1^0;
sbit  CON=P3^4;
sbit RES=P3^5;

  /*向7219写1个字节*/
 void byte(uint data1)
{
uchar data i;
LOAD=0;
SCK=0;
for(i=0;i<16;i++)
 {
 SCK=0;
 _nop_();
 DIN=(bit)(data1&0x8000);
 _nop_();
 SCK=1;
 data1<<=1;
 }
 LOAD=1;
 _nop_();
 _nop_();
 _nop_();
 SCK=0;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 SCK=1;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 LOAD=0;
 SCK=0;
 DIN=0;

 }
 /*MAX7219初始化
 //字模0,1,2,3,4,5,6,7,8,9,A,E,U,-*/
 uchar code s0[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x77,0x4f,0x3e,0x01};
 void max7219_int()
 {

 LOAD=0;
 SCK=0;
 DIN=0;
 byte(0x0f00);
 byte(0x0900);/*不译码*/
 byte(0x0a02);/*显示亮度0-15*/
 byte(0x0b06);/*扫描范围0-7*/
 byte(0x0c01);/*0关闭 1正常*/
}
void int10()
{
uint data j;
 uchar code *ip=s0;
        for(j=1;j<8;j++)
         {
         byte((j<<8)|0xff);
         }

        for(j=0;j<5000;j++);


        for(j=1;j<8;j++)
        {
        byte((j<<8)|0x7e);
        }

 }


 /*写显示数据IP为数据首址,共写7个*/
 void max7219_disp()
{
void sbuf_out();
uchar code *ip=s0;

max7219_int();
                if(tt[2]<20)/*显示模拟量*/
                {
                if(ZK_YK==1)
                byte(0x0301);
                else
                byte(0x0349);
                ip=s0;
                      if(tt[2]==4||tt[2]==5) //显示速度
                      {

                      byte(0x013e);
                      byte(0x0200|*(ip+(tt[2]-3)));
                      }
                      else if(tt[2]>=0&&tt[2]<=3)
                      {
                      byte(0x0177);//显示电流
                      byte(0x0200|*(ip+tt[2]+1)); //显示通道号
                      }
                      if(tt[2]==0||tt[2]==1)
                      {
                      byte(0x400|(*(ip+tt[3])));
                      byte(0x500|(*(ip+tt[4])));
                      byte(0x600|(*(ip+tt[5])));
                      }
                      else if(tt[2]==2||tt[2]==3)
                      {
                      byte(0x400|(*(ip+tt[3])));
                      byte(0x500|(*(ip+tt[4]))|0x80);
                      byte(0x600|(*(ip+tt[5])));
                      }
                      else if(tt[2]==4||tt[2]==5)
                      {
                      byte(0x400|(*(ip+tt[3]))|0x80);
                      byte(0x500|(*(ip+tt[4])));
                      byte(0x600|(*(ip+tt[5])));
                      }
                 }


                byte(0x0700|tt[6]); //显示上下左右


//}
if(tt[2]>=20&&tt[2]<80)/*显示运行故障*/
{
ip=s0;
tt[2]=tt[2]-19;
byte(0x014f);
byte(0x024f);
byte(0x0301);
byte(0x0400|*(ip+tt[2]/100));
tt[2]=tt[2]%100;
byte(0x0500|*(ip+tt[2]/10));
byte(0x0600|*(ip+tt[2]%10));
byte(0x0700);
}
else if(tt[2]==80)/*开机显示,正在初始化-0000-*/
{
byte(0x0101);
byte(0x027e);
byte(0x037e);
byte(0x047e);
byte(0x057e);
byte(0x0601);
}
else if(tt[2]==81)/*开机显示,等待键盘命令-1111-*/
{
if(ZK_YK==1){byte(0x0101);byte(0x0601);}
else{byte(0x0149);byte(0x0649);}
byte(0x0230);
byte(0x0330);
byte(0x0430);
byte(0x0530);

}
}

 /*串口初始化:波特率9600*/
void sbuf_init()
{

         SCON=0x40;
         TMOD=0x21;/*定时器1为波特率发生器,T0为定时器*/
         TH0=0x3c;
         TL0=0xaf;
         TH1=0xfa;
         TL1=0xfa;
         EA=1;
         ES=1;
         ET0=1;
         ET1=0;
         TR0=1;
         TR1=1;
         REN=1;

}
/*定时器0中断*/
uchar data time=0;
 void timer0() interrupt 1 using 2
 {
         TH0=0x3c;
         TL0=0xaf;
         TR0=1;
         time++;

         if(time>=150){TR0=0;time=0;}
 }

/*串口接收中断,*/

void sbuff() interrupt 4 using 1
{
time=0;
TR0=1;

       RI=0;
       if(ZH_ADD==SBUF&&sbufjsq==0)
       {
       tt[0]=SBUF;
       sbufjsq++;
       }
       else if(ZH_ADD==SBUF&&sbufjsq==1)
       {
       tt[1]=SBUF;
       sbufjsq++;
       }
       else if(sbufjsq==2&&SBUF!=0xfa)
       {
       tt[2]=SBUF;
       sbufjsq++;
       }
       else if(sbufjsq==3&&SBUF!=0xfa)
       {
       tt[3]=SBUF;
       sbufjsq++;
       }
       else if(sbufjsq==4&&SBUF!=0xfa)
       {
       tt[4]=SBUF;
       sbufjsq++;
       }
       else if(sbufjsq==5&&SBUF!=0xfa)
       {
       tt[5]=SBUF;
       sbufjsq++;
       }
       else if(sbufjsq==6&&SBUF!=0xfa)
       {
       tt[6]=SBUF;
       sbufjsq++;
       }
       else if(sbufjsq==7&&SBUF==0xfa)
       {
       SB=1;
       sbufjsq=0;

       //sbuf_out();
       }
}


void main()
{
bit ZK_YK0=0;
uchar jjj;
sbuf_init();
int10();
while(1)
{
if(ZK_YK!=ZK_YK0)//以下是站控遥控状态转换
{
ZK_YK0=ZK_YK;
if(ZK_YK==1)
{
CON=0;
}
else
{
CON=1;
RES=0;
for(jjj=0;jjj<250;jjj++);
for(jjj=0;jjj<250;jjj++);
for(jjj=0;jjj<250;jjj++);
RES=1;
}
}
if(ZZ_YZ==0)
ZH_ADD=0xaa;/*左站*/
else if(ZZ_YZ==1)
ZH_ADD=0xab;/*右站*/
 if(SB==1)
       {
       CH1=0;
         max7219_disp();
         tt[0]=0;
         tt[1]=0;
         tt[2]=0;
         tt[3]=0;
         tt[4]=0;
         tt[5]=0;
         tt[6]=0;
         tt[7]=0;
         SB=0;
         sbufjsq=0;
         CH1=1;
         }
        if(TR0==0)
        {
        byte(0x014f);
        byte(0x024f);
        byte(0x0301);
        byte(0x0430);
        byte(0x057e);
        byte(0x067e);
        byte(0x0700);
        }
}
}

⌨️ 快捷键说明

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