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

📄 waterheater12_25sourcefile.c

📁 这是基于89C51单片机的实用热水器监视器源程序
💻 C
字号:
#include<pic1684.h>

unsigned char num;
unsigned int  i=0,p=0;
unsigned char One,Ten;
const unsigned Code[13]=//0   1    2    3    4    5    6    7    8     9   OFF   SPEAKER  LED //
                        {0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff,  0x75,  0xbf };
void Send(unsigned char One_1,unsigned char Ten_1,unsigned char bai_1);//发送要显示的数据、报警 
void Delay(unsigned int Sec);//延时Sec秒

main(void)
{  
  TRISA=0x10;     //PORTA_RA0:RA3口为输出,RA4口为模拟A/D输入,
  TRISB=0xff;     //RB口输入,
  RA3=0;
while(1)
{ 
   i=0;
   //下面Code模拟A/D
   TRISA=0x00;            //PORTA口为输出
   RA4=0; Delay(10);      //RA4为低并保持
   RA4=1; TRISA=0x10;     //RA4为高,并置为输入
while(RA4!=1)             //从 RA4=0到RA4=1计数
{
   i++;
   if(i>99)break;
}      
    i=99-i;             //负温度系数温度传感器转换
    Ten=i/10%10;        //将计数值转化为水温值的十位显示编码表(数组Code[])的下标值。
    One=i%10;           //将计数值转化为水温值的个位显示编码表(数组Code[])的下标值。
   
    Send(Code[One],Code[Ten],Code[12]);     //根据下标值从常数表中提取编码,发送给移位寄存器(Code[12]=0xbf,LED亮 SPEAKER不响)
    Delay(15);                              //延时3秒

p++;//循环次数累加
     num=PORTB;//读取PORTB口
     for(i=7;i>=0;--i)                     //逐个查询PORTB各脚是否为低电平
        {if((num>>i)%2==0)break;}          //为低退出并记录i的值,对应水位值
 if(i==255)i=0;
    i=i*10;
    Ten=i/10%10;        //将数值转化为水位值的十位显示编码表的下标值。
    One=i%10;            //将数值转化为水位值的个位显示编码表的下标值。
    
    Send(Code[One],Code[Ten],Code[10]);     //根据下标值从常数表中提取编码,发送给移位寄存器(Code[10]=0xff,LED不亮 SPEAKER不响)
    Delay(5);                               //延时3秒

if(p>=10)       //每循环10次数,嘀--嘀响一次
    {
    unsigned int n;
    p=0;
    Send(Code[One],Code[Ten],Code[11]);    //Code[11]=0x75,LED不亮 SPEAKER响
    for(n=0;n<=0x0ed8;n++){;}
    Send(Code[One],Code[Ten],Code[10]);    //Code[10]=0xff,LED不亮 SPEAKER不响
    for(n=0;n<=0x2dff;n++){;}
    Send(Code[One],Code[Ten],Code[11]);    //Code[11]=0x75,LED不亮 SPEAKER响
    for(n=0;n<=0x0ed8;n++){;}
    Send(Code[One],Code[Ten],Code[10]);    //Code[10]=0xff,LED不亮 SPEAKER不响
}
if(Ten>=7)    //水位数值超过7,嘀--响一次
 {
   Send(Code[One],Code[Ten],Code[11]); //Code[11]=0x75,LED不亮 SPEAKER响
   Delay(20);
   Send(Code[One],Code[Ten],Code[10]); //Code[10]=0xff,LED不亮 SPEAKER不响
  } 
}

}

void Send(unsigned char One,unsigned char Ten,unsigned char bai)   //发送要显示的数据、报警                                  
{
unsigned char j;
unsigned char l;
for(l=0;l<=7;l++)//发送个位编码
{
    RA0=(One>>l)%2; RA1=0;
    for(j=0;j<2;j++){}
    RA1=1;for(j=0;j<2;j++){}RA1=0;
}       
for(l=0;l<=7;l++)//发送十位编码
{
    RA0=(Ten>>l)%2;RA1=0;
    for(j=0;j<2;j++){}
    RA1=1;for(j=0;j<2;j++){}RA1=0;
}      
for(l=0;l<=7;l++)//发送LED,SPEAKER控制位编码
{
    RA0=(bai>>l)%2;RA1=0;
    for(j=0;j<2;j++){}
    RA1=1;for(j=0;j<2;j++){}RA1=0;
}     
}
void Delay(unsigned int Sec)     //延时Sec秒
{
unsigned int m,n;
for(m=0;m<=Sec;m++)
     {for(n=0;n<=0x1fff;n++){;}}
}

⌨️ 快捷键说明

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