四位数数字温度计,Digital thermometer
关键字:温度计,单片机,89S51,AD590
#include #include unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f}; unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}; unsigned char dispbuf[8]={10,10,10,10,10,10,0,0}; unsigned char dispcount; unsigned char getdata; unsigned long temp; unsigned char i; bit sflag; sbit ST=P3^0; sbit OE=P3^1; sbit EOC=P3^2; sbit CLK=P3^3; sbit LED1=P3^6; sbit LED2=P3^7; sbit SPK=P3^5; void main(void) { ST=0; OE=0; TMOD=0x12; TH0=0x216; TL0=0x216; TH1=(65536-4000)/256; TL1=(65536-4000)%6; TR1=1; TR0=1; ET0=1; ET1=1; EA=1; ST=1; ST=0; getdata=148; while(1) { ; } } void t0(void) interrupt 1 using 0 { CLK=~CLK; } void t1(void) interrupt 3 using 0 { TH1=(65536-4000)/256; TL1=(65536-4000)%6; if(EOC==1) { OE=1; getdata=P0; OE=0; temp=(getdata*2350); temp=temp/128; if(temp<2732) { temp=2732-temp; sflag=1; } else { temp=temp-2732; sflag=0; } i=3; dispbuf[0]=10; dispbuf[1]=10; dispbuf[2]=10; if(sflag==1) { dispbuf[7]=11; } else { dispbuf[7]=10; } dispbuf[3]=0; dispbuf[4]=0; dispbuf[5]=0; dispbuf[6]=0; while(temp/10) { dispbuf[i]=temp; temp=temp/10; i++; } dispbuf[i]=temp; ST=1; ST=0; } P1=dispcode[dispbuf[dispcount]]; P2=dispbitcode[dispcount]; dispcount++; if(dispcount==8) { dispcount=0; } }
|