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

📄 led2.c

📁 自编频率测试程序
💻 C
字号:
#include<reg51.h>
//#include<stdio.h>
#include<absacc.h>
#include<intrins.h>

#define uchar unsigned char 
#define uint unsigned int
#define nop();	{_nop_();_nop_();_nop_();_nop_();};
// 延时函数
void delayms(uchar a);
//LCD显示函数
void  lcm_w_8byte(uchar wbyte);
void  lcm_w_serial(bit di,uchar send);
void  lcm_w_word(uchar *str);
void  lcm_init();
//开关S1测试函数
void switchs1test();
//电压测试函数
void volttest();
//灯测试
void lighttest();

//I2C函数声明
void write_ltc3219(uchar rom_address,uchar regdata);
//void read_i2c(uchar rom_address,uchar bytes);
uchar ad(void);
void start(void);
void stop(void);
uchar wait_ack(void);
void ack(void);
void no_ack(void);
void write_8bit(uchar ch);
uchar read_8bit(void);
void timer0(void);
//特殊寄存器
uint num_start_timer0=65536-50000*20/12;
uchar send_th0,send_tl0;
uchar frequencytime=0;
sbit  s1=P2^2;

sbit  scl=P2^3;
sbit  sda=P2^4;
sbit  led1=P1^0;
sbit  led2=P1^1;
sbit  led3=P1^2;
sbit  led4=P1^3;
sbit  led5=P1^4;
sbit  led6=P1^5;
sbit  led7=P1^6;
sbit  led8=P1^7;
sbit  sid=P3^0;//串口LCD数据线
sbit  sclk=P3^1;//串口LCD时钟线
sbit  begin=P3^2;
sbit  eoc=P3^3;
sbit  adcstart=P3^4;
sbit jixieshou=P3^5;
sbit enable=P3^6;
sbit diancitie=P3^7;
sbit oe=P2^5;
sbit s2=P2^7;
sbit s3=P2^6;
sbit frequency0=P1^0;
sbit frequency1=P1^1;
sbit frequency2=P1^2;
sbit frequency3=P1^3;
sbit frequency4=P1^4;
sbit frequency5=P1^5;
sbit frequency6=P1^6;
sbit frequency7=P1^7;
uchar * ByteToStr(uchar n);
//I2c应答标示
bit flag=0;
bit stopfrequency;
uchar *ptr;
void timer_init();
uint frequencynum=0;
uchar idata parameter_buff[11]={1,1,1,1,1,1,1,1,2,2,2,};
uchar *string;
void display(uchar x,uchar num);
//主函数
void main()
	{	
		s2=0;s3=1;
		oe=0;
		jixieshou=0;
		diancitie=0;
		adcstart=0;
		enable=0;
		eoc=1;
		P0=0xff;
		lcm_init();	
		while(1)
		{

		if(begin==0)
		{
 	write_ltc3219(0x00,0x0f);//写寄存器0
	write_ltc3219(0x01,0xff);//写寄存器1
	write_ltc3219(0x0a,0x00);//写寄存器10
		s2=1;s3=1;
		stopfrequency=1;
		frequencynum=0;
		timer_init();
//第0个频率检测
		TR0=1;
		while(stopfrequency)
		{
			if(frequency0==1)
			{while(frequency0==1&&stopfrequency==1);
				frequencynum++;
			}
		}
		TR0=0;
		display(0x80,frequencynum/1000);
		display(0x81,frequencynum%1000/100);
		display(0x82,frequencynum%100/10);
		display(0x83,frequencynum%10);
		frequencynum=0;
//第1个频率检测
		stopfrequency=1;
		TR0=1;
		while(stopfrequency)
		{
			if(frequency1==1)
			{while(frequency1==1&&stopfrequency==1);
				frequencynum++;
			}
		}
		TR0=0;
		display(0x84,frequencynum/1000);
		display(0x85,frequencynum%1000/100);
		display(0x86,frequencynum%100/10);
		display(0x87,frequencynum%10);		frequencynum=0;
//第2个频率检测
		stopfrequency=1;		TR0=1;
		while(stopfrequency)
		{
			if(frequency2==1)
			{while(frequency2==1&&stopfrequency==1);
				frequencynum++;
			}
		}
		TR0=0;
		display(0x90,frequencynum/1000);
		display(0x91,frequencynum%1000/100);
		display(0x92,frequencynum%100/10);
		display(0x93,frequencynum%10);		frequencynum=0;
//第3个频率检测
		stopfrequency=1;		TR0=1;
		while(stopfrequency)
		{
			if(frequency3==1)
			{while(frequency3==1&&stopfrequency==1);
				frequencynum++;
			}
		}
		TR0=0;
		display(0x94,frequencynum/1000);
		display(0x95,frequencynum%1000/100);
		display(0x96,frequencynum%100/10);
		display(0x97,frequencynum%10);		frequencynum=0;
//第4个频率检测
		stopfrequency=1;		TR0=1;
		while(stopfrequency)
		{
			if(frequency4==1)
			{while(frequency4==1&&stopfrequency==1);
				frequencynum++;
			}
		}
		TR0=0;
		display(0x88,frequencynum/1000);
		display(0x89,frequencynum%1000/100);
		display(0x8a,frequencynum%100/10);
		display(0x8b,frequencynum%10);		frequencynum=0;
//第5个频率检测
		stopfrequency=1;		TR0=1;
		while(stopfrequency)
		{
			if(frequency5==1)
			{while(frequency5==1&&stopfrequency==1);
				frequencynum++;
			}
		}
		TR0=0;
		display(0x8c,frequencynum/1000);
		display(0x8d,frequencynum%1000/100);
		display(0x8e,frequencynum%100/10);
		display(0x8f,frequencynum%10);		frequencynum=0;
//第6个频率检测
		stopfrequency=1;		TR0=1;
		while(stopfrequency)
		{
			if(frequency6==1)
			{while(frequency6==1&&stopfrequency==1);
				frequencynum++;
			}
		}
		TR0=0;
		display(0x98,frequencynum/1000);
		display(0x99,frequencynum%1000/100);
		display(0x9a,frequencynum%100/10);
		display(0x9b,frequencynum%10);		frequencynum=0;

//第7个频率检测
		stopfrequency=1;		TR0=1;
		while(stopfrequency)
		{
			if(frequency7==1)
			{while(frequency7==1&&stopfrequency==1);
				frequencynum++;
			}
		}
		TR0=0;
		display(0x9c,frequencynum/1000);
		display(0x9d,frequencynum%1000/100);
		display(0x9e,frequencynum%100/10);
		display(0x9f,frequencynum%10);		frequencynum=0;
		s2=1;
		s3=1;
 	write_ltc3219(0x00,0x0f);//写寄存器0
	write_ltc3219(0x01,0x00);//写寄存器1
	write_ltc3219(0x0a,0xff);//写寄存器10
		} 
		}
	}
void delayms(uchar a)
{
	uchar j;
	while(a=a-1)
	 for(j=0;j<125;j++);
}
void lcm_w_8byte(uchar wbyte)
{
	uchar i;
	sclk=0;
	for(i=0;i<8;i++)
	{
		sid=(bit)(wbyte&0x80);
		sclk=1;
		delayms(1);
		sclk=0;
		wbyte<<=1;
		//delayms(2);
	}
}
void  lcm_w_serial(bit di,uchar send)
{
	uchar startdata,hdata,ldata;
	if(di==0)
		startdata=0xf8;//write instruction
	else
		startdata=0xfa;// write data
	 hdata=send&0xf0;
	 ldata=(send<<4)&0xf0;
	 lcm_w_8byte(startdata);
 	 lcm_w_8byte(hdata);
 	 lcm_w_8byte(ldata);
    delayms(20);
}
void  lcm_w_word(uchar *str)
{
	while(*str!='\0')
		lcm_w_serial(1,*str++);
		*str=0;
}
void  lcm_init()
{
	delayms(100);
	lcm_w_serial(0,0x30);//基本指令集
	lcm_w_serial(0,0x0c);
	lcm_w_serial(0,0x01);
	delayms(100);
}
void switchs1test()
{	uchar times=0;
	jixieshou=1;
	while(times<5&&s1!=0)
	{
	delayms(200);
	times++;
	}
	if(s1==0)
	{		
	lcm_w_serial(0,0x85);
	lcm_w_word("  通过");
	}
	else
	{
	lcm_w_serial(0,0x85);
	lcm_w_word("未通过");	
	}
	jixieshou=0;
}
void volttest()
{		uint adctempall=0x0000;
//		uchar adctemp=0x00;
		diancitie=1;
 		 delayms(200);  delayms(200);  delayms(100);
		adctempall=adctempall+ad();
		adctempall=adctempall+ad();
		adctempall=adctempall+ad();
		adctempall=adctempall+ad();	
		adctempall=adctempall+ad();
		adctempall=adctempall+ad();
		adctempall=adctempall+ad();
		adctempall=adctempall+ad();
		adctempall=adctempall+ad();	
		adctempall=adctempall+ad();
		adctempall=adctempall/10;
		if(adctempall>0xa8&&adctempall<0xb7)
		{
		lcm_w_serial(0,0x95);
		lcm_w_word("  通过");
		}
		else
		{
		lcm_w_serial(0,0x95);
		lcm_w_word("未通过");
		}
	

//	adcstart=0;
}
uchar ad()
{ uchar temp=0x00;

  adcstart=1;

  adcstart=0;
  while(eoc);

  while(!eoc);
	_nop_();	_nop_();	_nop_();	_nop_();
  enable=1;
	_nop_();	_nop_();	_nop_();	_nop_();
  temp=P0;
 	delayms(1);
  enable=0;
  return temp;
}
void lighttest()
{ bit pass=0;
	write_ltc3219(0x00,0x0f);//写寄存器0
	write_ltc3219(0x01,0xff);//写寄存器1
	write_ltc3219(0x0a,0x55);//写寄存器10
	write_ltc3219(0x0b,0x00);//写寄存器11
	delayms(200);delayms(200);delayms(200);delayms(200);delayms(200);	
	write_ltc3219(0x0a,0xaa);//写寄存器10
	if(led1==0)
	{lcm_w_serial(0,0x98);	lcm_w_word("1V");}
	else
	{lcm_w_serial(0,0x98);	lcm_w_word("1X");}
	if(led3==0)
	{lcm_w_serial(0,0x9a);	lcm_w_word("3V");}
	else
	{lcm_w_serial(0,0x9a);	lcm_w_word("3X");}
	if(led5==0)
	{lcm_w_serial(0,0x9c);	lcm_w_word("5V");}
	else
	{lcm_w_serial(0,0x9c);	lcm_w_word("5X");}	
	if(led7==0)
	{lcm_w_serial(0,0x9e);	lcm_w_word("7V");}
	else
	{lcm_w_serial(0,0x9e);	lcm_w_word("7X");}
	pass=!led1&!led3&!led5&!led7;
	write_ltc3219(0x0b,0x00);//写寄存器11
	delayms(200);delayms(200);delayms(200);delayms(200);delayms(200);


	if(led2==0)
	{lcm_w_serial(0,0x99);	lcm_w_word("2V");}
	else
	{lcm_w_serial(0,0x99);	lcm_w_word("2X");}
	if(led4==0)
	{lcm_w_serial(0,0x9b);	lcm_w_word("4V");}
	else
	{lcm_w_serial(0,0x9b);	lcm_w_word("4X");}
	if(led6==0)
	{lcm_w_serial(0,0x9d);	lcm_w_word("6V");}
	else
	{lcm_w_serial(0,0x9d);	lcm_w_word("6X");}
	if(led8==0)
	{lcm_w_serial(0,0x9f);	lcm_w_word("8V");}
	else
	{lcm_w_serial(0,0x9f);	lcm_w_word("8X");}
	pass=pass&!led2&!led4&!led6&!led8;
 	write_ltc3219(0x0a,0xff);//写寄存器10
	if(pass==1)
	{lcm_w_serial(0,0x8d);	lcm_w_word("  通过");}
	else
	{lcm_w_serial(0,0x8d);	lcm_w_word("未通过");}
}
void start(void)
{
	sda=1;nop();
	scl=1;
	nop();
	sda=0;
	nop();
	scl=0;nop();

}
void stop(void)
{
	scl=0;//nop();
	sda=0;
	nop();
	scl=1;
	nop();
	sda=1;nop();
}
void ack(void)
{
	sda=0;nop();
	scl=1;
	nop();
	scl=0;nop();
	sda=1;
	
}
void no_ack()
{
	sda=1;nop();
	scl=1;
	nop();
	scl=0;nop();
}
void test_ack()
{
	sda=1;//nop();
	scl=1;
	nop();
	flag=0;
	if(sda==1)
	flag=1;
	scl=0;nop();
}
void write_8bit(uchar send)
{	
	uchar temp;
	for(temp=8;temp!=0;temp--)
	{

		sda=(bit)(send&0x80);
		scl=1;
		nop();
		scl=0;
		send=send<<1;
	}	
}
uchar read_8bit(void)
{
	uchar temp;
	uchar receive=0x00;
	for(temp=8;temp!=0;temp--)
	{
		scl=1;//nop();
		receive=receive<<1;
		receive=receive|(uchar)sda;
//		nop();
		scl=0;//nop();
	}
	return(receive);
}
void write_ltc3219(uchar rom_address,uchar regdata)
{
	start();
	write_8bit(0x36);
	test_ack();
	if(flag==1)
		return ;
	write_8bit(rom_address);
	test_ack();
	if(flag==1)
		return ;
	write_8bit(regdata);
	test_ack();
	if(flag==1)
		return ;
	stop();
	
}
void timer0(void)  interrupt 1 using 1
{

	 TH0=send_th0;
	 TL0=send_tl0;
	 frequencytime++;
	if(frequencytime>=10)
	{
	frequencytime=0;
	stopfrequency=0;
	}
}
void timer_init()
{ 	TR0=0;
	TMOD=0x01;	
	send_th0=num_start_timer0/256;
	send_tl0=num_start_timer0%256;
	TH0=send_th0;
	TL0=send_tl0;
	ET0=EA=1; 
}
uchar * ByteToStr(uchar n)
{
uchar str[4];
 uchar * pStr;
 pStr = str;
 if (n>99)
 {
   *pStr = n/100;
   n %= 100;
   *pStr += '0';
   pStr ++ ;
   *pStr = n/10;
   n %= 10;
   *pStr += '0';
   pStr ++ ;
 }
 if (n>9)
 {
  *pStr = n/10;
  n %= 10;
  *pStr += '0';
  pStr ++ ;
 }
 if (n<10)
 {
  *pStr = n + '0';
  pStr ++;
 }
 *pStr = 0;
 return str;
}
void display(uchar x,uchar num)
{
	switch(num)
	{
	case 0:	
	lcm_w_serial(0,x);
	lcm_w_word("0");
	break;
	case 1:	
	lcm_w_serial(0,x);
	lcm_w_word("1");
	break;
	case 2:	
	lcm_w_serial(0,x);
	lcm_w_word("2");
	break;
	case 3:	
	lcm_w_serial(0,x);
	lcm_w_word("3");
	break;
	case 4:	
	lcm_w_serial(0,x);
	lcm_w_word("4");
	break;
	case 5:	
	lcm_w_serial(0,x);
	lcm_w_word("5");
	break;
		case 6:	
	lcm_w_serial(0,x);
	lcm_w_word("6");
	break;
		case 7:	
	lcm_w_serial(0,x);
	lcm_w_word("7");
	break;
		case 8:	
	lcm_w_serial(0,x);
	lcm_w_word("8");
	break;
		case 9:	
	lcm_w_serial(0,x);
	lcm_w_word("9");
	break;
	}
}

⌨️ 快捷键说明

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