⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 数字电压报警表.c

📁 这是一个有c51单片机和0809构成的数字电压表
💻 C
字号:
#include "at89x51.h"                       //头文件
unsigned char tab[]={0xFC,0x60,0xDA,0xF2, 0x66,0xB6,0xBE,0xE0,               
                     0xFE,0xF6};         //段代码表
unsigned char tabbit[]={0xfe,0xfd,0xfb,0xf7};   //位代码
unsigned char bitcode=0,digital[4]={0,0,0,0};   // 数码管显示组
unsigned char outcode=0,dispcount=0,tempcount=0;
unsigned int timecount=0,voltcode=0,
           	 tempdate1=0,tempdate2=0,tempdate3=0;
float volt=0;
sbit START=P3^2;sbit EOC=P3^4;sbit OE=P3^3;
void delay()
{
unsigned char m,n;
for(m=0;m<200;m++)
for(n=0;n<200;n++);
}
void t0(void) interrupt 1 using 1
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
if(volt<=0.1){timecount++;if(timecount==12000){timecount=0;P1=0x00;}}
if(volt>0.1&&timecount<12000) {timecount=0;P1=tab[digital[bitcode]];}
P2=tabbit[3-bitcode];
bitcode++;
if(bitcode==4) {bitcode=0;}
}
//主程序
void main(void)
{
P3_7=0;
TMOD=0x01;                 //定时器0,方式1定时初值5ms
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
EA=1;                        //打开中断,打开定时计数器1,启动定时器1
ET0=1;
TR0=1;
while(1)
{
START=0;                     //通过指令周期给ADC0809一个启动高点平
START=1;
START=0;
while(EOC==0)                      //转换结束
{
OE=1;                              //允许数据输出 
outcode=P0;                         //转换值赋给outcode
volt=outcode/255.0*5.0;               //将最终处理数据赋给voit
voltcode=(int)(volt*1000);
if(!dispcount)
{
digital[3]=(voltcode/1000)&0xfe;
digital[2]=voltcode%1000/100;
digital[1]=voltcode%100/10;
digital[0]=voltcode%10;  
}
}
if(P3_5==0) {delay();if(P3_5==0)delay();
            {tempcount++;if(tempcount==4){tempcount=0;}}
switch(tempcount)
{
case 1:tempdate1=voltcode;break;
case 2:tempdate2=voltcode;break;
case 3:tempdate3=voltcode;break;
}
}
if(P3_6==0){delay();if(P3_6==0)delay();
           {dispcount++;if(dispcount==4){dispcount=0;}}
switch(dispcount)
{
case 1:digital[3]=(tempdate1/1000)&0xfe;
       digital[2]=tempdate1%1000/100;
       digital[1]=tempdate1%100/10;
       digital[0]=tempdate1%10;     
       break;		    
case 2:digital[3]=(tempdate2/1000)&0xfe;
       digital[2]=tempdate2%1000/100;
       digital[1]=tempdate2%100/10;
       digital[0]=tempdate2%10;    
       break;		    
case 3: digital[3]=(tempdate3/1000)&0xfe;
        digital[2]=tempdate3%1000/100;
        digital[1]=tempdate3%100/10;
        digital[0]=tempdate3%10;
        break;		         
}
}
if(volt>=5.0){P3_7=1;delay();delay();delay();delay();delay();}
else {P3_7=0;}
}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -