|
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num=0,n=0;
int juli=0;
uint sudu=0,s=0,d=0;
sbit lcden=P1^5; //使能端
sbit lcdrs=P1^6; //液晶數(shù)據(jù)命令選擇端1
sbit beep=P1^3;
//uchar code table[]={"0123456789"};
void int0_init(void); //函數(shù)聲明
/***************************************************
* 外部中斷0初始化子函數(shù)
* 下降沿觸發(fā),開啟INT0中斷,開總中斷
****************************************************/
void delayms(int x)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<110;j++); //1ms延時
}
void delayus(int t)
{
while(t--); //1us延時
}
//液晶
void write_com(uchar com)
{
lcdrs=0;
P2=com;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
P2=date;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void init()
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void int0_init(void)
{
IT0 = 1; //下降沿觸發(fā)
EX0 = 1; //開啟INT0中斷
EA = 1; //開啟總中斷
}
void display()
{
write_com(0x80);
write_data('V');
write_data('=');
// write_data(0x30+sudu/10000);
write_data(0x30+sudu%10000/1000);
write_data(0x30+sudu%10000%1000/100);
write_data(0x30+sudu%10000%1000%100/10);
write_data(0x30+sudu%10);
write_data('c');
write_data('m');
write_data('/');
write_data('s');
write_com(0x80+0x40);
write_data('S');
write_data('=');
write_data(0x30+juli/10000);
write_data(0x30+juli%10000/1000);
write_data(0x30+juli%1000/100);
write_data(0x30+juli%1000%100/10);
write_data(0x30+juli%10);
write_data('c');
write_data('m');
// write_data(' ');
// write_data(0x30+i/1000);
// write_data(0x30+i%1000/100);
// write_data(0x30+i%1000%100/10);
// write_data(0x30+i%10);
}
//主函數(shù)
void main(void)
{
TMOD=0X01;
EA=1;
ET0=1;
TH0=0xb8;
TL0=0x00;
TR0=0;
int0_init(); //外部中斷0初始化
init();
while(1)
{
display();
if(sudu>220) {beep=0;}
if(sudu<220) {beep=1;}
} //原地踏步
}
/***************************************************
* 中斷響應(yīng)子函數(shù)
* 響應(yīng)外部中斷0,LED翻轉(zhuǎn),中斷標(biāo)志位自動清零
****************************************************/
void int0_process() interrupt 0
{
n++;
d++;
juli=2*d;
TR0=1;
IE0=0;
}
void time0() interrupt 1
{
TH0=0xb8;//裝初值
TL0=0x00;//裝初值
num++;
if(num==25)
{
num=0;
sudu=2*n;
n=0;
}
} |
|