📄 led2.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 + -