📄 2543.c
字号:
//6号管 开始显示
dis_7219(0x01,thou); //千位
for(tune=0;tune<0xff;tune++){}
dis_7219(0x05,hun); //百位
for(tune=0;tune<0xff;tune++){}
dis_7219(0x07,ten); //十位
for(tune=0;tune<0xff;tune++){}
dis_7219(0x03,entries);
for(tune=0;tune<0xff;tune++){}
}
/*-----------------------------------------------------------*/
void t0int(void) interrupt 0 using 3
{
data uchar thou ,hun,ten,entries, tune;
EA=0;
if(grain>=0)
{
grain=grain-1;
//digitally_dis(grain,1);
thou=grain/1000;
hun= (grain-thou*1000 )/100;
ten = (grain-thou*1000- hun* 100)/10;
entries= grain-thou*1000- hun* 100-ten*10;
//6号管 开始显示
dis_7219(0x01,thou); //千位
for(tune=0;tune<0xff;tune++){}
dis_7219(0x05,hun); //百位
for(tune=0;tune<0xff;tune++){}
dis_7219(0x07,ten); //十位
for(tune=0;tune<0xff;tune++){}
dis_7219(0x03,entries);
for(tune=0;tune<0xff;tune++){}
EA=1;
}
if (grain==0)
{
count=1;
// digitally_dis(10,1);
}
delay(1);
}
/*-----------------------------------------------------------*/
void tra_buff(char da) //~~传送数据
{
bit cf;
ACC=da;
cf=P;
//取校验位 偶校验
//abit7=P; 7位数据
// cf=~cf;
ab=da;
abit7=cf;
SBUF=ab;
//rst_wdog();
}
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*-----------------------------------------------------------------------*/
void main(void)
{
data uchar i,addr,channel,j,addrw,key,addrd;
idata uchar zzj;
idata int xx[30],wght ,wghtj;
long int t;
bit set,al,read,alarm,flag;
data union{
uchar ch[2];
uint i;
}u;
zj:
while(1){
P1=0;
delay(5);
P1=1;
delay(5);}
dis_set();
grain=0x0a;
ii=grain; //记住设定值 //reset grain initial num
dis_7219(0x01,0x00); //initial 1000 grain
dis_7219(0x05,0x00);
dis_7219(0x07,0x01);
dis_7219(0x03,0x00);
dis_7219(0x04,0x82);
delay(20);
//reset
zzj=0; //求平均 计数器
addrd=3; // 待显示地址 计数器
addr=2; //5045内地址
flag=0; //系统运行标志
EA=1;
EX0=1;
TMOD=0X20;
SCON=0x50;
TH1=0xf3;
SBUF=0;
TR1=1;
al=1;//+、-控制使能
channel=0; //P1&0xf8;/*turn off output*/
SP=0xef;
set=0; //set read 转换控制标志
//wrsr_cmd(0); //1.4s reset key=5;
while(1) //主程序
{
key=keyscan();
// rst_wdog();
switch(key){
case 0:
// delay(1); //red light
// dis_7219(0x04,0x80); //green light
if ( flag==1){
for(i=0;i<30;i++)
{
xx[i]=ad_2543(channel);
}
for(i=0;i<30;i++) //处理数据 排序
{
for(j = 0; j < 30- i; j++)
{
if (xx[j]>xx[j+1])
{
t = xx[j];
xx[j] = xx[j + 1];
xx[j+1] = t;
}
}
}
t=0;
for (i=0;i<30;i++)
{
t=t+xx[i];
}
wght=t/30;//1g ->0.44 无物体时wght=44
if (wght<50)wght=50;
wght=wght-50;
t=wght/0.44;
zzj=zzj+1; //5个t取平均
xx[zzj]=t;
if (zzj==5)
{
//zzj=0;////////////实验附值 实验后改之 否则键盘不好使
flag=0; //停止采样
t=0;
for(i=1;i<5;i++)
t=t+xx[i];
for(i=0;i<5;i++)
xx[i]=0;
t=t/4;
if (t<0)t=0;
digitally_dis(t,6);
u.i=t; //存第一组数据
addr=addr+1;
wrsr_cmd(0);
byte_write(addr,u.ch[0]);
addr=addr+1;
byte_write(addr,u.ch[1]);
addrw=addr;
}
}
//报警报警报警报警报警报警报警报警报警报警报警报警报警报警报警报警报警报警报警报警报警报警
for(i=0;i<10;i++)
{
xx[i]=ad_2543(channel);
}
for(i=0;i<10;i++) //处理数据
{
for(j = 0; j < 10- i; j++)
{
if (xx[j]>xx[j+1])
{
t = xx[j];
xx[j] = xx[j + 1];
xx[j+1] = t;
}
}
}
t=0;
for (i=3;i<8;i++)
{
t=t+xx[i];
}
wght=t/5;//1g ->0.44 无物体时wght=44
wght=wght-50;
t=wght/0.44;
if(t>3000)
alarm=1; //报警条件报警条件报警条件报警条件报警条件报警条件报警条件报警条件报警条件
if (alarm==1)
for (j=0;j<2;j++)
{
dis_7219(0x04,0x02); //red light
delay(2);
t=0;
dis_7219(0x04,0x80); //green light
delay(2);
}
break;
case 1: //读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读
led1=1;
led2=0;
led3=0;
led4=0;
set=~set;
al=1; //使能+-键
if(set)
{
dis_7219(0x04,0x00); //red light
addrd=5;
u.ch[0]=byte_read(addr-1);
u.ch[1]=byte_read(addr);
t=u.i;
digitally_dis( t,1);
delay(5) ; //防止两次读键盘 抖动
}
if (!set)
{
if (count==1)
{
count=0;//2次计数开始标志
//grain=0x0a;
}
dis_7219(0x04,0x02); //red light
grain=ii;
digitally_dis(ii,1);
delay(5) ;
EA=1;
}
break;
case 2:
if (al==1)
{
led1=0;
led2=1;
led3=0;
led4=0;
if(set==1)
{
addrd=addrd-1;
if( addrd==0)
{
addrd=5;
}
switch(addrd)
{
case 1: wrsr_cmd(0);
u.ch[0]=byte_read(9);
u.ch[1]=byte_read(10); break;//no key
case 2: wrsr_cmd(0);
u.ch[0]=byte_read(7);
u.ch[1]=byte_read(8); break;
case 3: wrsr_cmd(0);
u.ch[0]=byte_read(5);
u.ch[1]=byte_read(6); break;
case 4: wrsr_cmd(0);
u.ch[0]=byte_read(3);
u.ch[1]=byte_read(4); break;
case 5: wrsr_cmd(0);
u.ch[0]=byte_read(1);
u.ch[1]=byte_read(2); break;
default:break;
}
t=u.i;
delay(5) ;
digitally_dis(0x00,1);
digitally_dis(t,1);
}
if(set==0)
{
grain=grain-1;
ii=grain;
if (ii<=0)
{
ii=0x0a;
}
digitally_dis( ii,1);
delay(5) ;
EA=1;
}
}
break;
case 3:
if (al==1)
{
led1=0;
led2=0;
led3=1;
led4=0;
if (set==1)
{ ///地址+/地址+/地址+/地址+/地址+/地址+/地址+/地址+/地址+/地址+/地址+
addrd=addrd+1;
if( addrd==6)
{
addrd=1;
}
switch(addrd)
{
case 1: wrsr_cmd(0);
u.ch[0]=byte_read(9);
u.ch[1]=byte_read(10); break;//no key
case 2: wrsr_cmd(0);
u.ch[0]=byte_read(7);
u.ch[1]=byte_read(8); break;
case 3: wrsr_cmd(0);
u.ch[0]=byte_read(5);
u.ch[1]=byte_read(6); break;
case 4: wrsr_cmd(0);
u.ch[0]=byte_read(3);
u.ch[1]=byte_read(4); break;
case 5: wrsr_cmd(0);
u.ch[0]=byte_read(1);
u.ch[1]=byte_read(2); break;
default:break;
}
t=u.i;
delay(5) ;
digitally_dis(0x00,1);
digitally_dis(t,1);
}
if(set==0)
{
grain=grain+1;
ii=grain;
digitally_dis(ii,1);
delay(5) ;
}
}
break;
//运行//运行//运行//运行//运行//运行//运行//运行//运行//运行//运行//运行//运行//运行//运行//运行//运行//运行
case 4:
al=0;
EA=0;//防止程序进中断
led1=0;
led2=0;
led3=0;
led4=1;
read=0;
//set=1;
alarm=0;
dis_7219(0x04,0x80);
digitally_dis(0x00,1);
flag=1;
zzj=0;
if(addr>10)addr=0;
break;
case 5:
//while(1); wave 对5045 的reset 没反应
delay(20);
key=keyscan();
if( key==5)
goto zj;//reset
read_Nbyte(xx,1,10);
for(i=10;i>=1;i--)
{
tra_buff(xx[i-1]);
}
break;
default:
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -