#include<reg52.h>
#include<intrins.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define DAC0832 XBYTE[0X7FFF] //DAC0832在系統中的地址為0X7FFF
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7; //聲明數碼管鎖存器
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2; //聲明3個按鍵
sbit dacs=P3^2;
sbit dawr=P3^6; //聲明da端口
sbit beep=P2^4;
uchar t,num,flag;
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77, 0x7c,
0x39,0x5e, 0x79,0x71}; //編碼數碼管字符
void delay(uint y) //延時ms子函數
{
uint i,j;
for(i=y;i>0;i--)
for(j=120;j>0;j--);
}
void delayus(uint b) //延時μS子函數
{
while(b--)
_nop_();
}
void display(uchar numdis)
{
uchar shi,ge;
shi=numdis/10 ;
ge=numdis%10; //分離個位 十位
dula=1;
P1=table[shi];
dula=0;
wela=1;
P1=0xfe;
delay(5);
wela=0;
P1=0x00;
delay(10); //送十位數據
dula=1;
P1=table[ge];
dula=0;
wela=1;
P1=0xfd;
delay(5);
wela=0;
P1=0x00;
delay(10); //送個位數據
}
void init() //初始化函數
{
TMOD=0X01;
TH0=(65336-50000)/256;
TL0=(65336-50000)%256; //50ms 中斷一次
EA=1;
ET0=1;
}
void keyscan()
{
if(key1==0) //按下k1,自動加一
{
delay(10);
if(key1==0)
{
while(key1)
{beep=1;} //當一直按下,蜂鳴器響
flag=1;
TR0=1;
while(!key1);
}
}
if(key2==0) //按下k2,自動減一
{
delay(10);
if(key2==0)
{
while(key2)
{beep=1;} //當一直按下,蜂鳴器響
flag=0;
TR0=1;
while(!key2);
}
}
if(key3==0) // 按下k3,暫停
{
delay(10);
if(key3==0)
{
while(key3)
{beep=1;} //當一直按下,蜂鳴器響
TR0=0;
while(!key2);
}
}
}
void main()
{
init(); //初始化函數
while(1)
{
dacs=0;
dawr=0;
P0=0;
keyscan();
display(num);
DAC0832 =num;
delayus(10);
}
}
void T0_time()interrupt 1
{
TH0=(65336-500)/256;
TL0=(65336-500)%256; //重裝初值
t++;
if(t==20) //20次為1s
{
if(flag ==1)
{
num++;
if(num==99)
num=0;
}
if(flag==0)
{
num--;
if(num==0)
num=99;
}
}
}
|