最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

51单片机温度计protius仿真程序 LCD显示温度

来源:动视网 责编:小OO 时间:2025-09-25 16:32:23
文档

51单片机温度计protius仿真程序 LCD显示温度

#include#include#defineuintunsignedint#defineucharunsignedchar//#definedisdataP0//#definediscanP2sbitWENDU=P3^7;sbitrs=P2^0;sbitrw=P2^1;sbitlcden=P2^2;sbitALR=P1^0;uintTemp=0,n=0;//--------------------------------constuchartable[]="Welcome!";constuc
推荐度:
导读#include#include#defineuintunsignedint#defineucharunsignedchar//#definedisdataP0//#definediscanP2sbitWENDU=P3^7;sbitrs=P2^0;sbitrw=P2^1;sbitlcden=P2^2;sbitALR=P1^0;uintTemp=0,n=0;//--------------------------------constuchartable[]="Welcome!";constuc
#include

#include

#define uint unsigned int

#define uchar unsigned char

//#define disdata P0

//#define discan  P2

sbit WENDU=P3^7;

sbit rs    =P2^0;

sbit rw=P2^1;

sbit lcden=P2^2;

sbit ALR=P1^0;

uint Temp=0,n=0;

//--------------------------------

const uchar table[]="Welcome !"     ;

const uchar table1[]="Fre Is :";

const uchar WAR[]="WARNING !";

const uchar alarm1[]="Too HIGH TEM !";

const uchar alarm2[]="Too LOW  TEM !";

////温度小数部分查表

//uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};

//uchar code dis_7[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40} ;

//uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7};

//uchar data temp_data[2]={0xff,0xff};

//uchar data display[5]={0xff,0xff,0xff,0xff,0xff};

uchar data temp_data[2]={0x00,0x00};

////延时函数

void delay(uint ms)

{

        uint i,j;

for(i=0;i       {

for(j=0;j<1141;j++);

       }

}

void delay1(uint t)

{

    for (;t>0;t--);

}

void write_com(uchar com)

{

  

   rs=0;

   rw=0;

    P0=com;     //写地址

   lcden=1;

   delay(1);

   lcden=0;

}

//---------------------------

void write_data(uchar dat)

   rs=1;

   rw=0;

    P0=dat;         //写数据

   lcden=1;

   delay(1);

   lcden=0;

}

//----------------------------

ow_reset(viod)

{

 char presence=1;

   while(presence)

   {

      while(presence)

      {

       WENDU=1;

       _nop_();

       _nop_();

       WENDU=0;

       delay1(50);

       WENDU=1;

       delay1(6);

       presence=WENDU;

      }

   delay1(45);

   presence=~WENDU;

  }

 WENDU=1;

}

////写字节

void write_byte(uchar val)

{

 uchar i;

for(i=8;i>0;i--)

   {

    WENDU=1;

    _nop_();

    _nop_();

    WENDU=0;

    _nop_();

    _nop_();

    _nop_();

    _nop_();

    _nop_();

    _nop_();

    WENDU=val&0x01;

    delay1(6);

    val=val/2;

   }

 WENDU=1;

 delay1(1);

}

//////////////////

uchar read_byte(void)

{

 uchar i;

 uchar value=0;

for(i=8;i>0;i--)

   {

    WENDU=1;

    _nop_();

    _nop_();

value>>=1;

    WENDU=0;

    _nop_();

    _nop_();

    _nop_();

    _nop_();

    WENDU=1;

    _nop_();

    _nop_();

    _nop_();

    _nop_();

      if(WENDU)

       value|=0x80;

    delay1(6);

   } 

   WENDU=1;

   return(value);

}

/////读字节 暂存

 void init()

{

    write_com(0x38);

    delay(5);

    write_com(0x01);

    delay(5);

    write_com(0x0c);

    delay(5);

    write_com(0x06);

    delay(5);

}

//--------------------------

 void lcd_dis1()

 {

    uint i;

    lcden=0;

    init();

     write_com(0x80+0);

for(i=0;i<9;i++)

         {

         write_data(table[i]);

         }

          write_com(0x80+0x40);

for(i=0;i<8;i++)

         {

          write_data(table1[i]); 

         }

           

 }

//---------------------------

 void lcd_dis2()

 {

    uint i;

     write_com(0x80+0);

for(i=0;i<9;i++)

         {

         write_data(WAR[i]);

         }

          write_com(0x80+0x42);

for(i=0;i<14;i++)

         {

          write_data(alarm1[i]); 

         }

           

 }

 //--------------------------

 void lcd_dis3()

 {

    uint i;

    lcden=0;

    init();

     write_com(0x80+0);

for(i=0;i<9;i++)

         {

         write_data(WAR[i]);

         }

          write_com(0x80+0x42);

for(i=0;i<14;i++)

         {

          write_data(alarm2[i]); 

         }

           

 }

//---------------------------

work_temp()

{

 uint T1=0,T2=0,T3=0,T4=0,Temp1,T5;

 read_temp();    

if(temp_data[1]>128)              //负数时进行取补

   {

    temp_data[1]=~(temp_data[1]);

    temp_data[0]=~(temp_data[0])+1;

        n=1;

   }    

    

   

 T5=temp_data[0]&0x0f;                                   //低字节,取小数                                 //小数放最低位

Temp=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4); //整数部分  高字节取第四位,低字节取高四位

 T1=48+Temp/100;                                        //取整数最高位放在数码管最高位

 T2=48+(Temp%100)/10;                                        //    下面依次存放整数部分

 T4=48+Temp%10;        

////////////////////////////

      write_com(0x80+0x48);         

      write_data(0);        

      write_com(0x80+0x49);

      write_data(48);

      write_data(T1);  

      write_data(T2);

      write_data(T3);

      write_data(T4);

      write_data(46);

      write_data(48); 

if (Temp>=37)

       {  ALR=1;

         lcden=0;

           init();

         lcd_dis2();

         delay(200);

         lcd_dis1();

       }

if((n)&&(Temp>=21))

        {  ALR=1;

         lcden=0;

           init();

         lcd_dis3();

         delay(200);

         lcd_dis1();

       }

}             

read_temp()

{

 ow_reset();

 write_byte(0xcc);

 write_byte(0xbe);

 temp_data[0]=read_byte();

 temp_data[1]=read_byte();           //读两个字节暂存

 ow_reset();

 write_byte(0xcc);

 write_byte(0x44); 

 //work_temp();               

}        

//////////////      主函数

void main()

{

        

      ALR=0;

     lcd_dis1();

     while(1)

     {       ALR=0;

         work_temp();

         if(n)

         {    n=0;

            write_com(0x80+0x48);         

            write_data(45);    

         }

     }

   }

文档

51单片机温度计protius仿真程序 LCD显示温度

#include#include#defineuintunsignedint#defineucharunsignedchar//#definedisdataP0//#definediscanP2sbitWENDU=P3^7;sbitrs=P2^0;sbitrw=P2^1;sbitlcden=P2^2;sbitALR=P1^0;uintTemp=0,n=0;//--------------------------------constuchartable[]="Welcome!";constuc
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top