|
10黑幣
#include"stc8g.h"
#include "intrins.h"
#define key_S 50
#define key_L key_S*120
#define key_I key_S*100
unsigned char T0RH=0; //T0重載值的高字節(jié)
unsigned char T0RL=0; //T0重載值的低字節(jié)
unsigned char i=0; //數(shù)碼管位緩沖變量
unsigned char j1=0; //數(shù)碼管位的顯示值
unsigned char j2=0;
unsigned char j3=0;
unsigned char j4=0;
unsigned char x=0; //按鍵按下次數(shù)
unsigned char x1=0; //計(jì)數(shù)值變量,定時(shí)器用
unsigned char x2=0; //標(biāo)志位
unsigned int x3=0;
unsigned int x4=0;
unsigned char x5=0;
unsigned int js=0; //數(shù)碼管顯示的值
unsigned int js1=0;
//unsigned int js2=0;
unsigned char js3=0;
unsigned char code duan[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
bit q1=1;
bit q2=1;
//bit q3=1;
bit q4=1;
sbit out=P3^3; //out 輸出
sbit pa=P1^0; //a 數(shù)碼管段
sbit pb=P1^1; //b
sbit pc=P1^2; //c
sbit pd=P1^3; //d
sbit pe=P1^4; //e
sbit pf=P1^5; //f
sbit pg=P1^6; //g
sbit ph=P1^7; //.
sbit p1=P3^4; //1 數(shù)碼管位
sbit p2=P3^5; //2
sbit p3=P3^6; //3
sbit p4=P3^7; //4
sbit ru=P5^4;
sbit sw1=P5^5; //按鍵接口
sbit sw2=P3^1;
sbit sw3=P3^0;
sbit sw4=P3^2;
void s0();
void s1();
void s2();
void s3();
void s4();
void s5();
void s6();
void s7();
void s8();
void s9();
void s10();
void s11();
void s12();
void s13();
void s14();
void s15();
void ssmg();
void xuaze(unsigned char j);
void xianshi1(unsigned int);
void keyaction();
void cun();
/*掉電存儲(chǔ)*/
void IapIdle();
char IapRead(int addr);
void IapProgram(int addr,char dat);
void IapErase(int addr);
/***************************************/
void delayms(unsigned int k)
{
unsigned int i,j;
for(i=k;i>0;i--)
for(j=110;j>0;j--);
}
void ConfigTimer0(unsigned int ms)
{
unsigned long tmp; //臨時(shí)變量
tmp=11059200/12; //定時(shí)器計(jì)數(shù)頻率
tmp=(tmp*ms)/1000; //計(jì)算所需的計(jì)數(shù)值
tmp=65536-tmp; //計(jì)算定時(shí)器重載值
tmp=tmp+2; //補(bǔ)償中斷響應(yīng)延時(shí)造成的誤差
T0RH=(unsigned char)(tmp>>8); //定時(shí)器重載值拆分為高低字節(jié)
T0RL=(unsigned char)tmp;
TMOD&=0xf0; //清零T0的控制位
TMOD|=0x01; //配置T0為模式1
TH0=T0RH; //加載T0重載值
TL0=T0RL;
ET0=1; //使能T0中斷
TR0=1; //啟動(dòng)T0
}
void QL()
{
if(js<=1)js=1;
if(js1<=1)js1=1;
if(js3>=33) js3=0;
}
void tm0_isr() interrupt 1 using 1
{
TH0=T0RH; //重新加載重載值
TL0=T0RL;
ssmg();
x4++;
switch(js3)
{
case 0:if(ru==0)out=0;else out=1;break;
case 1:if(ru==0){out=~out;}break;
/* case 2:if(x1==0){x1=1;j1=duan[14];j2=duan[14];j3=duan[14];j4=duan[14];QL();}
if(x1==1){x1=2;js3=IapRead(3);QL();}
if(x1==2){if(x4>=1000){x4=0;js--;if(js==0)
{js=0;x4=0;x1=5;out=0;js=IapRead(1);QL();}}}
break;
case 3:if(x1==0){x1=1;j1=duan[14];j2=duan[14];j3=duan[14];j4=duan[14];QL();}
if(x1==1){x1=2;js3=IapRead(3);QL();}
if(x1==2){if(x4>=1000){x4=0;js--; if(js==0)
{js=0;x4=0;x1=3;out=0;js=IapRead(1);QL();}}}
if(x1==3){if(x4>=1000){x4=0;js1--;if(js1==0)
{js1=0;x4=0;x1=0;out=1;js1=IapRead(2);QL();}}}
break; */
}
}
void keyscan()
{
static unsigned int time=0;
if(!sw1||!sw2||!sw3)
{
time++;
if(time>key_L)//長(zhǎng)按有效
time=key_I;//連+/-間隔
if(time==key_S)//短按消抖
{
if(!sw1){x1++;if(x1>3){x1=0;if(x1==0)cun();}}
}
if(time==key_S||time==key_L)//短按消抖或長(zhǎng)按連+/-
{
if(!sw2 && x1!=0){if(x1==1){js3=(js3+1)%33;}
if(x1==2){js=(js+1)%1000;}
if(x1==3){js1=(js1+1)%1000;}}
if(!sw3 && x1!=0){if(x1==1){js3--;if(js3==-1)js3=32;}
if(x1==2){if(js>0){js--;if(js==0)js=1;}}
if(x1==3){if(js1>0){js1--;if(js1==0)js1=1;}}}
if((!sw2)&&(!sw3)&&(x1!=0)){js=5;js1=5;js3=0;}
}
}
else time=0;
}
void cun()
{ if(js<=1) js=1;
if(js1<=1) js1=1;
if(js3>=33) js3=0;
IapErase(0);
IapProgram(1,js);
IapProgram(2,js1);
IapProgram(3,js3);
}
void main()
{
EA=1;
ConfigTimer0(1);
P1M0=0x00;
P1M1=0x00;
P3M0=0xff;
P3M1=0x00;
P5M0=0x00;
P5M1=0x00;
js=IapRead(1);
js1=IapRead(2);
js3=IapRead(3);
QL();
while(1)
{
keyscan();
if(x1==0){j1=duan[14];j2=duan[14];j3=duan[14];j4=duan[14];}
if(x1==1){xianshi1(js3);j3=duan[14];j4=duan[15];}
if(x1==2){xianshi1(js);j4=duan[11];}
if(x1==3){xianshi1(js1);j4=duan[12];}
delayms(1);
}
}
void IapIdle()
{
IAP_CONTR=0;
IAP_CMD=0;
IAP_TRIG=0;
IAP_ADDRH=0x80;
IAP_ADDRL=0;
}
char IapRead(int addr)
{
char dat;
IAP_CONTR=0x80;
IAP_TPS=12;
IAP_CMD=1;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
IAP_TRIG=0x5a;
IAP_TRIG=0xa5;
_nop_();
dat=IAP_DATA;
IapIdle();
return dat;
}
void IapProgram(int addr,char dat)
{
IAP_CONTR=0x80;
IAP_TPS=12;
IAP_CMD=2;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
IAP_DATA=dat;
IAP_TRIG=0x5a;
IAP_TRIG=0xa5;
_nop_();
IapIdle();
}
void IapErase(int addr)
{
IAP_CONTR=0x80;
IAP_TPS=12;
IAP_CMD=3;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
IAP_TRIG=0x5a;
IAP_TRIG=0xa5;
_nop_();
IapIdle();
}
void s0(){pa=0;pb=0;pc=0;pd=0;pe=0;pf=0;pg=1;}
void s1(){pb=0;pc=0;pa=1;pg=1;pd=1;pe=1;pf=1;}
void s2(){pa=0;pb=0;pg=0;pe=0;pd=0;pf=1;pc=1;}
void s3(){pa=0;pb=0;pg=0;pc=0;pd=0;pf=1;pe=1;}
void s4(){pb=0;pg=0;pc=0;pf=0;pa=1;pd=1;pe=1;}
void s5(){pa=0;pg=0;pc=0;pd=0;pf=0;pe=1;pb=1;}
void s6(){pa=0;pg=0;pc=0;pd=0;pf=0;pe=0;pb=1;}
void s7(){pa=0;pb=0;pc=0;pf=1;pe=1;pd=1;pg=1;}
void s8(){pa=0;pb=0;pg=0;pc=0;pd=0;pf=0;pe=0;}
void s9(){pa=0;pb=0;pg=0;pc=0;pd=0;pf=0;pe=1;}
void s10(){pa=1;pb=1;pc=1;pf=1;pe=1;pd=1;pg=1;}
void s11(){pa=1;pb=1;pc=0;pf=0;pe=0;pd=0;pg=0;ph=1;}
void s12(){pa=1;pb=1;pc=1;pf=1;pe=0;pd=0;pg=0;ph=1;}
void s13(){pa=1;pb=1;pc=1;pf=1;pe=1;pd=1;pg=1;ph=0;}
void s14(){pa=1;pb=1;pc=1;pf=1;pe=1;pd=1;pg=0;ph=1;}
void s15(){pa=0;pb=0;pc=1;pf=0;pe=0;pd=1;pg=0;ph=1;}
void xuaze(unsigned char j)
{
if(j==0){s0();}
else if(j==1){s1();}
else if(j==2){s2();}
else if(j==3){s3();}
else if(j==4){s4();}
else if(j==5){s5();}
else if(j==6){s6();}
else if(j==7){s7();}
else if(j==8){s8();}
else if(j==9){s9();}
else if(j==10){s10();}
else if(j==11){s11();}
else if(j==12){s12();}
else if(j==13){s13();}
else if(j==14){s14();}
else if(j==15){s15();}
}
/*數(shù)碼管顯示函數(shù),調(diào)用在主函數(shù)中*/
void xianshi1(unsigned int sec)
{
j1=duan[sec%10];
j2=duan[sec/10%10];
j3=duan[sec/100%10];
}
/*數(shù)碼管掃描函數(shù),放到中斷中,中斷時(shí)間要是1ms*/
void ssmg()
{
s10();
switch(i)
{
case 0:p1=1;p2=0;p3=0;p4=0;i++;s10();xuaze(j1);break;
case 1:p1=0;p2=1;p3=0;p4=0;i++;s10();xuaze(j2);break;
case 2:p1=0;p2=0;p3=1;p4=0;i++;s10();xuaze(j3);break;
case 3:p1=0;p2=0;p3=0;p4=1;i=0;s10();xuaze(j4);break;
default:break;
}
}
|
最佳答案
查看完整內(nèi)容
回帖中的附件《數(shù)碼管時(shí)鐘》有處理小數(shù)點(diǎn)在不同位置出現(xiàn)的方法。
http://www.zg4o1577.cn/bbs/dpj-193732-1.html
|