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

📄 ledshow.c

📁 c51数码管显示
💻 C
字号:
#include"c8051f040.h"

void init_port(void);
void external_osc(void);
void send_byte(unsigned char out_byte); 
unsigned char receive_byte(void);
void wait_ms(unsigned int ms);
void short_delay(void);
void long_delay(void);
void writeZLG7289(unsigned char cmd,unsigned char dat);
unsigned char readZLG7289(unsigned char cmd);
unsigned char readZLG7289(unsigned char cmd);
void adc0_init();
void adc0_source(unsigned char source);
unsigned char temppage;

#define CMD_RESET 0xa4
#define CMD_TEST 0xbf
#define DECODE0 0x80
#define CMD_WRITE 0x80
#define CMD_BLINK 0x88
#define ADC0START temppage=SFRPAGE;SFRPAGE=0x00;AD0BUSY=1;SFRPAGE=temppage
#define CMD_READ 0x15
sfr16 ADC0VAL=0xbe;
sfr16 ADC0GT=0xc4;
sfr16 ADC0LT=0xc6;
sbit cs=P3^7;            //p3.7引脚连接cs
sbit clk=P3^5;              //p3.5引脚连接clk
sbit dat=P3^6;           //p3.6引脚连接dat
sbit key=P3^4;           //p3.4引脚连接key
//sbit key=P4^0;
bit isnewdata;

 float temperature[20];
float temp=0.0;

void main()
{unsigned int i,disp=0,dispH=0,dispL=0;
 unsigned char kk;
 external_osc();
 init_port();
 //adc0_init();
 //ADC0START;
// EA=1;
send_byte(CMD_RESET);   
while(1)
  {
  for(i=0;i<0x2000;i++);       //上电延时
   //send_byte(CMD_RESET);        //芯片复位
  // send_byte(CMD_TEST);         //芯片测试
  /* for(i=0;i<3;i++)
   {wait_ms(100);
   }
   */
 /*if(isnewdata)
  {kk=ADC0H*256;
   kk+=ADC0L;
   temp=kk/4096.0;
   temp*=2.43;
   temp-=0.776;
   temp/=0.00286;
   isnewdata=0;
   disp=(int)temp;
   dispH=disp|0xf0;
   dispH=dispH>>4;
   dispH|=0x80;
   dispL=disp|0x0f;
   dispL=dispL>>4;
   dispL|=0x80; 
   writeZLG7289(CMD_BLINK,0xff);   
   writeZLG7289(CMD_WRITE,dispL);
   writeZLG7289(CMD_WRITE+1,dispH);
   }
  ADC0START;
  */ 
  /* writeZLG7289(CMD_BLINK,0xff);   
   writeZLG7289(CMD_WRITE,0x80);
   writeZLG7289(CMD_WRITE+1,0x81);
   writeZLG7289(CMD_WRITE+2,0x82);
   writeZLG7289(CMD_WRITE+3,0x83);
  // writeZLG7289(CMD_BLINK,0xff);
   // kk=0;
	writeZLG7289(CMD_WRITE+4,0x84);
    writeZLG7289(CMD_WRITE+5,0x85);
    */
/*do
{  if(!key)
   {kk=readZLG7289(CMD_READ);
    writeZLG7289(CMD_WRITE,kk&0x0f);
    writeZLG7289(CMD_WRITE+1,kk&0xf0);
   }
}while(kk!=0xff);
*/	 
   }

}

void init_port(void)
{ SFRPAGE=CONFIG_PAGE;
  XBR2=0x40;                //0100  0000;      
  P3MDOUT=0x0f;           //0000 1111  P3口的4,5,6,7脚采用开漏方式输出
  P3MDIN|=0x10;
  P3=0xff;
 
}
//晶振采用11.0592MHz
void external_osc(void)
{int n;
  SFRPAGE=CONFIG_PAGE;
  OSCXCN=0x77;                  // 0111 0111   高字节的111表示晶振的二分之一  
 for(n=0;n<255;n++);      //延时
  while(( OSCXCN & 0x80)==0); //等待晶振的稳定
  CLKSEL |=0x01;   
}

//send_byte(unsigned char out_byte):串行方式下字节的发送.
void send_byte(unsigned char out_byte)
{
unsigned char i;
cs=0;
long_delay();
for(i=0;i<8;i++)
  {if(out_byte&0x80)
      {dat=1;
	  }
     else { dat=0;}
      clk=1;  
      short_delay();
      clk=0;
	  short_delay();
	  out_byte=out_byte*2;
  }
}

//receive_byte(void):串行方式下字节的接收方式.
unsigned char receive_byte(void)
{unsigned char i,in_byte;
 in_byte=0x00;
 dat=1;
 long_delay();
for(i=0;i<8;i++)
  {clk=1;
   short_delay();
   in_byte=in_byte*2;
   if(dat)
     {in_byte=in_byte|0x01;
	 }
     clk=0;
    	short_delay();     
     }
     dat=0;
return (in_byte);
}

void wait_ms(unsigned int ms)
{unsigned int i,j;
 for(i=0;i<ms;i++)
  {for(j=0;j<300;j++);}
}

void short_delay(void)
{int i;
for(i=0;i<30;i++);
}

void long_delay(void)
{int i;
for(i=0;i<0x50;i++);
}
//writeZLG7289(unsigned char cmd,unsigned char dat):写ZLG7289芯片.
//参数意义:  cmd---命令符,dat---要写入的数字 
void writeZLG7289(unsigned char cmd,unsigned char dat)
{ send_byte(cmd);
  send_byte(dat);
}

//readZLG7289(unsigned char cmd):发cmd命令后,ZLG7289返回的字节.
unsigned char readZLG7289(unsigned char cmd)
{ send_byte(cmd);
  return(receive_byte());
}

void adc0_source(unsigned char source)
{SFRPAGE=0x00;
 AMX0SL=source;
}

void adc0_init()
{SFRPAGE=0x00;
 ADC0CF=0x80;
 ADC0CN=0x80;     //ADC0模块使能
 REF0CN&=0x0f;
 REF0CN|=0x07;    //内部温度传感器工作
 adc0_source(9);
 EIE2|=0x02;      //开ADC0的中断
}

void ADC0_ISR()interrupt 15
{SFRPAGE=0x00;
 AD0INT=0;
 isnewdata=1;
}






⌨️ 快捷键说明

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