📄 ad_92201.c
字号:
#include <AT89X51.H>
#include<intrins.h>
#include<absacc.h>
#define uchar unsigned char
#define ulong unsigned long
#define uint unsigned int
unsigned char code dispcode[]={ 0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x40,0x00,0xbf,0x86,
0xdb,0xcf,0xe6,0xed,
0xfd,0x87,0xff,0xf};
//unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit clk=P2^1;
sbit din=P2^0;
sbit k0=P2^4;
sbit k1=P2^5;
sbit k2=P2^6;
sbit k3=P2^7;
sbit ACC_7=ACC^7;
sbit adclk=P3^2;
bit flag,k4=1;
uchar n,h,j;
uint q,i,temp,sum;
float m;
uchar zhongliang[8],k;
uint s_dat[10];
uchar shijian[8]={0,0,16,0,0,16,0,0};
uchar lu,x,y,cuo=0,hour1,w=0,m1=0,n; //定义相关变量
int i1;
uchar dis;
char second;
char minite;
char hour;
uint tcnt,tcnt2;
uchar ms,a=0,c;
jizhong()
{
a=1;
for(;;)
{
for(j=0;j<10;j++)
{
adclk=0;
adclk=1;
_nop_();
_nop_();
// _nop_();
adclk=0;
P1=0xff;
n=P1;
P0=0xff;
h=P0;
h=_cror_(h,4);
h=h&0x0f;
s_dat[j]=n*16+h;
}
for(;;)
{
flag=1;
for(j=0;j<9;j++)
{
if(s_dat[j]>s_dat[j+1])
{
temp=s_dat[j];
s_dat[j]=s_dat[j+1];
s_dat[j+1]=temp;
flag=0;
}
if(_testbit_(flag))
break;
}
}
for(j=1;j<9;j++)
sum+=s_dat[j];
m=sum/8;
m=m/4095;
sum=(uint)(m*200000);
zhongliang[0]=16;
zhongliang[1]=16;
zhongliang[2]=16;
q=10000;
for(i=3;i<7;i++)
{
zhongliang[i]=sum/q;
sum%=q;
q/=10;
}
zhongliang[7]=sum;
//dis();
/* for(j=0;j<10;j++);
for(i=0;i<20000;i++);
for(j=0;j<8;j++)
{
n=dispcode[dat[j]];
if(j==5)
n=n+0x80;
for(k=0;k<8;k++)
{
ACC=n;
din=ACC_7;
clk=1;
n=_crol_(n,1);
clk=0;
}
}
for(i=0;i<10000;i++);*/
}
}
delay(int t) //延时子程序
{
int s,e;
for(s=0;s<t;s++)
for(e=0;e<100;e++);
}
yijian() //一键是否按下子程序
{
char q=0;
if(k0==0)
{
delay(2);
if(k0==0)
{
q=1;
while(1) if(k0==1) break;
}
}
return q;
}
erjian() //二键是否按下子程序
{
char q=0;
if(k1==0)
{
delay(2);
if(k1==0)
{
q=1;
while(1) if(k1==1) break;
}
}
return q;
}
sanjian() //三键是否按下子程序
{
char q=0;
if(k2==0)
{
delay(2);
if(k2==0)
{
q=1;
while(1) if(k2==1) break;
}
}
return q;
}
tiaoshi() //调时间子程序
{
// if(w==1)
// goto loop;
k4=0; //停止计时
for(i1=7;i1>0;i1=i1-3) //对时、分、秒进行循环
{
while(1)
{
if(erjian()==1) //二键按下,加1
{
if(i1==7) //调整时间部分
{
hour++; //小时加1
if(hour==24)
hour=0;
}
if(i1==4) //调整分钟部分
{
minite++; //分钟加1
if(minite==60)
minite=0;
}
if(i1==1) //调整秒钟部分
{
second++; //秒加1
if(second==60)
second=0;
}
}
if(sanjian()==1) //三键按下,减1
{
if(i1==7)
{
hour--;
if(hour<0)
hour=23;
}
if(i1==4)
{
minite--;
if(minite<0)
minite=59;
}
if(i1==1)
{
second--;
if(second<0)
second=59;
}
}
if(yijian()==1) break; //一键按下,移到下一位
}
if(yijian()==1) break; //跳出循环,显示时间
}
k4=1; //开始计时
// loop:1;
}
void main() //主程序
{
TMOD=0x42; //初始化
TH0=0x06;
TL0=0x06;
TH1=7192;
TL1=7192;
TR0=1;
ET0=1;
ET1=1;
EA=1;
while(1)
{
if(yijian()==1) //一键按下,进入改时间程序
{
tiaoshi();
}
if(erjian()==1) //二键按下,进入计重程序
{
jizhong();
}
// if(sanjian()==1) //三键按下,进入改价格程序
// {
// gaijia();
// }
}
}
void t0(void) interrupt 1 using 1 //定时器0中断
{
ms++;
if(ms==8)
{
ms=0;
switch(a) //显示模块开关
{
case 0: for(j=0;j<10;j++)
for(i=0;i<20000;i++);
for(j=0;j<8;j++)
{
n=dispcode[shijian[j]];
for(k=0;k<8;k++)
{
ACC=n;
din=ACC_7;
clk=1;
n=_crol_(n,1);
clk=0;
}
}
break; //显示时间
case 1:
for(j=0;j<10;j++)
for(i=0;i<20000;i++);
for(j=0;j<8;j++)
{
n=dispcode[zhongliang[j]];
if(j==5)
n=n+0x80;
for(k=0;k<8;k++)
{
ACC=n;
din=ACC_7;
clk=1;
n=_crol_(n,1);
clk=0;
}
}
break; //显示重量
//default: break;
}
}
if(tcnt==4000)
{
tcnt=0;
if(k4==1)
{
second++;
if(second==60)
{
second=0;
minite++;
if(minite==60)
{
minite=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
shijian[0]=second%10;
shijian[1]=second/10;
shijian[3]=minite%10;
shijian[4]=minite/10;
shijian[6]=hour%10;
shijian[7]=hour/10;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -