📄 maichong.c
字号:
#include"reg51.h"
#include"absacc.h"
#include"stdio.h"
#include"math.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define LigCode XBYTE[0xffff]
#define LigSel XBYTE[0xdfff]
#define Keysel XBYTE[0xbfff]
uchar code BitTab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //位驱动码
uchar code DispTab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; //字形码
uchar idata Dispbuf[4];
uchar PluseArray[8][10];
uchar idata state;
uint idata keydelay;
uchar idata displaynum;
uint idata number;
uchar idata mod; //模式转换
uchar idata PluseNum;
uchar idata PluseState;//当输入脉冲显示状态
uchar idata fg;
typedef struct _model
{
uchar length;
uint time;
uchar member[10];
}Model;
Model idata model[8];
Model tempmodel;
void READKEY();
void display();
void PluseTranslate();
void Init();
/*void mDelay(unsigned int Delay) //延时子程序1ms
{ unsigned int i;
for(;Delay>0;Delay--)
{ for(i=0;i<124;i++)
{;}
}
} */
void Timer1()interrupt 3
{
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
if(state==0)
{
number++;
if(number>model[mod].time/2)
{
number=0;
PluseNum=PluseNum+1;
}
if(PluseNum==model[mod].length)
PluseNum=0;
}
}
void READKEY()
{
uchar keytmp;
uchar i;
LigSel=0xfe;
keytmp=Keysel;
keytmp&=0xff;
switch(keytmp)
{ case 0xff:
if(fg!=0)
fg=0;
break;
case 0xfe:
if(fg==0)
{
fg=1;
if(state>=1&&state<=10)
{
state=0;PluseState=1;number=0;PluseNum=0;
}
}
break;
case 0xf7: //加
if( fg==0)
{ fg=1;
if(state==0) //正常状态
{ mod++;
if(mod==20)
mod=1;
}
if(state==1)
{
tempmodel.time++;
if(tempmodel.time==10000)
{tempmodel.time=0;}
}
if(state==2)
{
tempmodel.length++;
if(tempmodel.length==255)
{tempmodel.length=0;}
}
if(state>=3&&state<=10)
{
PluseArray[state-3][PluseState-1]=1;
PluseState++;
if(PluseState==tempmodel.length+1)
{state=state+1;PluseState=1;}
if(state==11)
{
state=0;
PluseNum=0;
number=0;
PluseTranslate();
model[mod].time=tempmodel.time;model[mod].length=tempmodel.length;///////更新输出脉冲
for(i=0;i<20;i++)
{
model[mod].member[i]=tempmodel.member[i];
}
}
}
}
break;
case 0xfb: //减
if(fg==0)
{ fg=1;
if(state==0) ///正常状态
{ mod--;
if(mod==0)
mod=20;
}
if(state==1)
{tempmodel.time--;
if(tempmodel.time==0)
tempmodel.time=9999;
}
if(state==2)
{
tempmodel.length--;
if(tempmodel.length==0)
tempmodel.length=255;
}
if(state>=3&&state<=10)
{
PluseArray[state-3][PluseState-1]=0;
PluseState++;
if(PluseState==tempmodel.length+1)
{state=state+1;PluseState=1;}
if(state==11)
{
state=0;
PluseNum=0;
number=0;
PluseTranslate();
model[mod].time=tempmodel.time;model[mod].length=tempmodel.length;///////更新输出脉冲
for(i=0;i<20;i++)
{
model[mod].member[i]=tempmodel.member[i];
}
}
}
}
break;
case 0xfd: //调整
if(fg==0)
{ fg=1;
state++;
if(state==11)
{
state=0;
PluseNum=0;
number=0;
PluseTranslate();
model[mod].time=tempmodel.time;model[mod].length=tempmodel.length;///////更新输出脉冲
for(i=0;i<20;i++)
{
model[mod].member[i]=tempmodel.member[i];
}
}
if(state==1)
{
tempmodel.time=model[mod].time;tempmodel.length=model[mod].length; //用tempmodel装入当前结构体的值
for(i=0;i<20;i++)
{
tempmodel.member[i]=model[mod].member[i];
}
}
}
break;
}
}
void Getcode()
{ uchar temp;
uchar Displaynumber;
if(state==0)
{ Displaynumber=mod;
Dispbuf[0]=10;
Dispbuf[1]=10;
Dispbuf[2]=Displaynumber/10;
temp=Displaynumber%10;
Dispbuf[3]=temp;
}
if(state==1)
{ Displaynumber=tempmodel.time;
Dispbuf[0]=Displaynumber/1000;
temp=Displaynumber%1000;
Dispbuf[1]=temp/100;
temp=temp%100;
Dispbuf[2]=temp/10;
temp=temp%10;
Dispbuf[3]=temp;
}
if(state==2)
{
Displaynumber=tempmodel.length;
Dispbuf[0]=10;
Dispbuf[1]=Displaynumber/100;
temp=Displaynumber%100;
Dispbuf[2]=Displaynumber/10;
temp=temp/10;
Dispbuf[3]=temp;
}
if(state>=3&&state<=10)
{ Displaynumber=PluseState;
Dispbuf[0]=state-2;
Dispbuf[1]=10;
Dispbuf[2]=PluseState/10;
temp=PluseState%10;
Dispbuf[3]=temp;
}
}
void display()
{ uchar tmp;
displaynum++;
if(displaynum>3)
displaynum=0;
LigSel=BitTab[displaynum];
tmp=Dispbuf[displaynum];
LigCode=DispTab[tmp];
}
void PluseTranslate()
{uchar sum;
uchar i,j;
for(j=0;j<tempmodel.length;j++)
{for(i=0;i<8;i++)
sum+=PluseArray[i][j]*pow(2,i);
tempmodel.member[j]=sum;
}
}
void Init()
{uchar i,j;
for(j=1;j<10;j++)
{
model[j].length=10;
model[j].time=1000;
for(i=0;i<10;i++)
{
model[j].member[i]=0xdd;
}
}
}
void main()
{
P1=0xff;
fg=0;
mod=1;
state=0;
number=0;
mod=1;
keydelay=0;
Init();
TMOD=0x15;
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
//TH0=(65536-2000)/256;
//TL0=(65536-2000)%256;
TR1=1;
//TR0=1;
EA=1;
ET1=1;
//ET0=1;
while(1)
{ keydelay++;
if(keydelay>1000)
{ LigCode=0x00;
READKEY();
keydelay=0;
}
if(state==0)
{
P1=model[mod].member[PluseNum];
}
Getcode(); //取得显示数字
display(); //显示
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -