基于PIC单片机温度-脉搏-DS18B20温度-液晶12864显示

电子说

1.2w人已加入

描述


一、系统方案
1、上电初始化液晶第一行显示脉搏,第二行显示温度,第三行显示模式,第四行显示强度;按下K1按键可以选择模式,催眼模式或治疗模式。
2、治疗模块下,可以通过K2、K3修改强度。

单片机


二、硬件设计
原理图如下:

单片机


三、单片机软件设计
1、首先是系统初始化
//lcdrw = 0; //关闭  
   TRISE = 0x00; //输出口     
   PORTE = 0x00;
   TRISD = 0x00; // 输出口     
  
   TRISB = 0x0f; // 输入 
   TRISC = 0x00; // 输出
   TRISA=0x04;
   PORTA=0;

Lcd_Initial();     //LCD初始化 
Reset_DS18B20();

     T1CKPS0=1;           //定时器分频器8分频
 T1CKPS1=1;                //定时器分频器8分频
 TMR1CS=0;                 //TMR1工作于定时器方式
 TMR1L=(65536-100)%256;  //定时12500个时钟初始值
 TMR1H=(65536-100)/256;  //定时12500个时钟初始值
 GIE=1;     //总中断允许
 PEIE=1;    //外围功能模块中断允许
 TMR1IE=1;  //TMR1中断允许 
 TMR1ON=1;  //启动TMR1
 pwm(20);
2、液晶显示程序
/********************************************************************************************
* 函数名称:Lcd_Write_Command()
* 功    能:写指令代码
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Lcd_Write_Command(uchar temp)
{  
  port=temp;
  rs=0;
  rw=0;
  e=1;
  e=0;  
}
/********************************************************************************************
* 函数名称:Lcd_Write_Byte()
* 功    能:写数据
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Lcd_Write_Byte(uchar temp)
{  
  port=temp;
  rs=1;
  rw=0;
  e=1;
  e=0;  
}
3、按键程序
void key()
{
       if (RB0 == 0)//    
       {
        delay(10); //延时
         if (RB0 == 0)// 
           {
             while (RB0== 0);   
         mode=!mode;
         if(mode==0){ dangwei=2;pwm(20);}
          }
       }
      if (RB1 == 0)//    
       {
        delay(10); //延时
         if (RB1== 0)// 
           {
           while (RB1== 0);
                if(mode==1)  
                {
                    dangwei++;
                    if(dangwei>6)dangwei=1;
                    pwm(dangwei*10);
                    
                }
                }
           }
       
    if (RB2 == 0)//    
       {
        delay(10); //延时
         if (RB2 == 0)// 
           {
             while (RB2== 0);   
                  if(mode==1)  
                {
                    
                    if(dangwei>1)dangwei--;
                    pwm(dangwei*10);
                    
                }
          }
       }
   
}
 
4、核心算法程序
   while (1) 
   {
     
 
     
        Lcd_Character_16X16(0,0,8,data_shuju[2]); //显示温
    Lcd_Character_16X16(0,0,24,data_shuju[3]); //显示度
        Lcd_Character_16X8( 0,0,40, data_shuju1[10]);//显示:
       Lcd_Character_16X8( 0,0,48, data_shuju1[ad/100]);//显示:
         Lcd_Character_16X8( 0,0,56, data_shuju1[ad%100/10]);//显示:
        Lcd_Character_16X8( 0,0,64, data_shuju1[ad%10]);//显示:
        
       
        
        
        Lcd_Character_16X16(0,2,8,data_shuju[0]); //显示温
    Lcd_Character_16X16(0,2,24,data_shuju[1]); //显示度
        Lcd_Character_16X8( 0,2,40, data_shuju1[10]);//显示:
       Lcd_Character_16X8( 0,2,48, data_shuju1[temp/10]);//显示:
       Lcd_Character_16X8( 0,2,56, data_shuju1[temp%10]);//显示:
      
            Lcd_Character_16X16(0,4,8,data_shuju[4]); //显示温
    Lcd_Character_16X16(0,4,24,data_shuju[5]); //显示度
        Lcd_Character_16X8( 0,4,40, data_shuju1[10]);//显示:
        if(mode==0)
        {
           Lcd_Character_16X16(0,4,48,data_shuju[6]); //显示温
    Lcd_Character_16X16(0,4,64,data_shuju[7]); //显示度  
        
        }
        else
        {
              Lcd_Character_16X16(0,4,48,data_shuju[8]); //显示温
    Lcd_Character_16X16(0,4,64,data_shuju[9]); //显示度  
        
            
        }
     
              Lcd_Character_16X16(0,6,8,data_shuju[10]); //显示温
    Lcd_Character_16X16(0,6,24,data_shuju[11]); //显示度
        Lcd_Character_16X8( 0,6,40, data_shuju1[10]);//显示
       Lcd_Character_16X8( 0,6,48, data_shuju1[dangwei]);//显示:
        
   ad=get_ad();
    key();
 
    temp=DS18B20_Get();
   if((ad>alarm)||(temp>th))  TMR1ON=1;
   else { TMR1ON=0;RC7=1;}
 
  
   }
四、proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
 

单片机


审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分