找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1253|回复: 0
打印 上一主题 下一主题
收起左侧

msp430f149 DHT11程序

[复制链接]
跳转到指定楼层
楼主
ID:203361 发表于 2017-5-22 09:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "12864.h"


//uchar key;

//*************************************************************************
//放到主函数里初始化,在Display(); 里写入12864画面上不动的汉字或字符
//1.显示字符或汉字调用这个函数 DisplayCgrom(uchar addr,uchar *hz);
//举例 DisplayCgrom(0x81,"工频参数测量");
//     DisplayCgrom(0x90,"U=");
//2.显示数字调用这些函数,特殊的没有再自己添加
//Dispaly_three_point1_number(uchar addr,uint num_display);    //        1.25格式
//Dispaly_four_point1_number(uchar addr,uint num_display);     //        2.345格式
//Dispaly_three_point2_number(uchar addr,uint num_display);    //        32.5格式
//Dispaly_four_point2_number(uchar addr,uint num_display);     //       17.56格式
//Dispaly_four_point3_number(uchar addr,uint num_display);     //       234.5格式

//Dispaly_six_point2_number(uchar addr,uint num_display);  

//Display_two_number(uchar addr,uint num_display);                //       435
//Display_three_number(uchar addr,uint num_display);              //       435
//Display_four_number(uchar addr,uint num_display);               //       4356
//Display_five_number(uchar addr,uint num_display);               //       7445
//举例 Dispaly_four_point1_number(0x8a,result[0]);
/*************************************************************************
        LCD_init();                                   //液晶参数初始化设置
        LCD_clear();                                  //清屏      
        Display();                                    //默认不动的参数显示
**************************************************************************/







uchar num[]={"0123456789 :.-"};



//*************************************************************************
//                        初始化IO口子程序
//*************************************************************************
void Port_init()
{

        
  P5DIR = 0xFF;     
  P3DIR|=  BIT0 + BIT1 + BIT2;

}


/*------------------检查忙位-----------------------------*/
void chk_busy()
{  RS_CLR;
   RW_SET;
   EN_SET;
   P5DIR=0x00;
   while(P5IN&0x80);
   EN_CLR;
   P5DIR=0xff;
}
//***********************************************************************
//        显示屏命令写入函数
//***********************************************************************


void LCD_write_com(unsigned char com)
{        chk_busy();
        RS_CLR;
        RW_CLR;
        EN_SET;
        DataPort = com;
        EN_CLR;
}
//***********************************************************************
//        显示屏数据写入函数
//***********************************************************************

void LCD_write_data(unsigned char data)
{       chk_busy();
        RS_SET;
        RW_CLR;
        EN_SET;
        DataPort = data;        
        EN_CLR;
}
//***********************************************************************
//        显示屏清空显示
//***********************************************************************

void LCD_clear(void)
{
        LCD_write_com(0x01);
        
}

void Dispaly_three_point1_number(uchar addr,uint num_display)         //        1.25格式
{        

   LCD_write_com(addr);        //显示位置

   LCD_write_data(num[num_display/100%10]);
   LCD_write_data(num[12]);                              //"."
   LCD_write_data(num[num_display/10%10]);
   LCD_write_data(num[num_display%10]);

}

void Dispaly_four_point1_number(uchar addr,uint num_display)         //        2.345格式
{        

   LCD_write_com(addr);        //显示位置

   LCD_write_data(num[num_display/1000%10]);                                    
   LCD_write_data(num[12]);                              //"."
   LCD_write_data(num[num_display/100%10]);  
   LCD_write_data(num[num_display/10%10]);
   LCD_write_data(num[num_display%10]);


}
void Dispaly_three_point2_number(uchar addr,uint num_display)         //        32.5格式
{        

   LCD_write_com(addr);        //显示位置

   LCD_write_data(num[num_display/100%10]);
   LCD_write_data(num[num_display/10%10]);
   LCD_write_data(num[12]);                              //"."
   LCD_write_data(num[num_display%10]);


}

void Dispaly_four_point2_number(uchar addr,uint num_display)         //        17.56格式
{        

   LCD_write_com(addr);        //显示位置

   LCD_write_data(num[num_display/1000%10]);
   LCD_write_data(num[num_display/100%10]);
   LCD_write_data(num[12]);                              //"."
   LCD_write_data(num[num_display/10%10]);
   LCD_write_data(num[num_display%10]);


}

void Dispaly_four_point3_number(uchar addr,uint num_display)         //        234.5格式
{        

   LCD_write_com(addr);        //显示位置

   LCD_write_data(num[num_display/1000%10]);
   LCD_write_data(num[num_display/100%10]);   
   LCD_write_data(num[num_display/10%10]);
   LCD_write_data(num[12]);                              //"."  
   LCD_write_data(num[num_display%10]);


}
void Dispaly_six_point2_number(uchar addr,ulong num_display)         //        234.5格式
{        

   LCD_write_com(addr);        //显示位置


   LCD_write_data(num[num_display/100000%10]);
   LCD_write_data(num[num_display/10000%10]);  
   LCD_write_data(num[12]);                              //"."  
   LCD_write_data(num[num_display/1000%10]);
   LCD_write_data(num[num_display/100%10]);   
   LCD_write_data(num[num_display/10%10]);   
   LCD_write_data(num[num_display%10]);


}
void Display_two_number(uchar addr,uint num_display)
{

  LCD_write_com(addr);        //显示位置

  LCD_write_data(num[num_display/10%10]);
  LCD_write_data(num[num_display%10]);

}
void Display_three_number(uchar addr,uint num_display)
{

  LCD_write_com(addr);        //显示位置

  LCD_write_data(num[num_display/100%10]);
  LCD_write_data(num[num_display/10%10]);
  LCD_write_data(num[num_display%10]);

}

void Display_four_number(uchar addr,uint num_display)
{

  LCD_write_com(addr);        //显示位置

  LCD_write_data(num[num_display/1000%10]);
  LCD_write_data(num[num_display/100%10]);  
  LCD_write_data(num[num_display/10%10]);
  LCD_write_data(num[num_display%10]);

}

void Display_five_number(uchar addr,uint num_display)
{

  LCD_write_com(addr);        //显示位置

  LCD_write_data(num[num_display/10000%10]);
  LCD_write_data(num[num_display/1000%10]);  
  LCD_write_data(num[num_display/100%10]);
  LCD_write_data(num[num_display/10%10]);
  LCD_write_data(num[num_display%10]);

}




//***********************************************************************
//函数名称:DisplayCgrom(uchar hz)显示CGROM里的汉字
//***********************************************************************
void DisplayCgrom(uchar addr,uchar *hz)
{
        LCD_write_com(addr);

        while(*hz != '\0')
        {
                LCD_write_data(*hz);
                hz++;
        }

}
//****************************************************************
//函数名称:Display()显示测试结果
//****************************************************************
void Display(void)
{        

       DisplayCgrom(0x81,"生产环境监测");
       DisplayCgrom(0x90,"温湿度实时显示");



}

//***********************************************************************
//        显示屏初始化函数
//***********************************************************************

void LCD_init(void)
{

  Port_init();

  LCD_write_com(FUN_MODE);                        //显示模式设置
  LCD_write_com(FUN_MODE);                        //显示模式设置
  LCD_write_com(DISPLAY_ON);                        //显示开
  LCD_write_com(CLEAR_SCREEN);                        //清屏
  LCD_write_com(CURSE_ADD);

}







//***********************************************************************
//以下是绘图功能函数的定义
//***********************************************************************


//***********************************************************************
//清整个GDRAM空间
//***********************************************************************

void clrgdram()
{
  unsigned char x,y;
  for(y=0;y<64;y++)
   for(x=0;x<16;x++)
   {  LCD_write_com(0x34);
      LCD_write_com(y+0x80);        //行地址
      LCD_write_com(x+0x80);     //列地址
      LCD_write_com(0x30);
      LCD_write_data(0x00);
      LCD_write_data(0x00);
   }
}

//***********************************************************************
//读GDRAM一个字节信息
//***********************************************************************
uchar LCD_ReadByte(void)
{

  uchar value;
  chk_busy();
   RS_SET;
   RW_SET;
   EN_CLR;
   EN_SET;
   P5DIR=0x00;
   value=P5IN;
   EN_CLR;
   P5DIR=0xff;

  return value;



}
//***********************************************************************
//画点函数mode=0,清除点;mode=1,点亮指定点;mode=2,当前点的状态取反;
//***********************************************************************
void Draw_point(uchar x,uchar y,uchar mode)
{

uchar ReadOldH,ReadOldL;  
LCD_write_com(0x34);  //扩充指令集  
LCD_write_com(0x36); //绘图显示开

LCD_write_com(y-(y/32)*32+0x80);       //列地址   
LCD_write_com(x/16+(y/32)*8+0x80);     //行地址  
LCD_ReadByte();  
ReadOldH=LCD_ReadByte();
ReadOldL=LCD_ReadByte();



LCD_write_com(y-(y/32)*32+0x80);        //列地址
LCD_write_com(x/16+(y/32)*8+0x80);      //行地址  



switch(x%16/8%2)
{

case 0:

  switch(mode)
  {
  case 0: ReadOldH&=~(0x80>>(x%16%8));break;
  case 1: ReadOldH|=0x80>>(x%16%8);break;   
  case 2: ReadOldH^=0x80>>(x%16%8);break;   
  }


LCD_write_data(ReadOldH);
LCD_write_data(ReadOldL);  

break;

case 1:


   switch(mode)
  {
  case 0: ReadOldL&=~(0x80>>(x%16%8));break;
  case 1: ReadOldL|=0x80>>(x%16%8);break;   
  case 2: ReadOldL^=0x80>>(x%16%8);break;   
  }

LCD_write_data(ReadOldH);
LCD_write_data(ReadOldL);   

break;




}





LCD_write_com(0x30);
}


/*

void point(uchar X,uchar Y,uchar Color)
{
  uchar Tier,Tier_bit;
  uchar ReadOldH,ReadOldL;
  uchar Row;
  LCD_write_com(0x34);
  LCD_write_com(0x36);
  Tier=X>>4;            //Tier/=16;
  Tier_bit=X&0x0f;       //Tier%=16;
  if(Y<32)
   Row=Y;


  else
  {
     Row=Y-32;
     Tier+=8;
  }


     LCD_write_com(Row+0x80);    //行地址
     LCD_write_com(Tier+0x80);     //列地址
     LCD_ReadByte();
      ReadOldH=LCD_ReadByte();
      ReadOldL=LCD_ReadByte();
      LCD_write_com(Row+0x80);
      LCD_write_com(Tier+0x80);


if(Tier_bit<8)
{
   switch(Color)
   {

   case 0:ReadOldH&=(~(0x01<<(7-Tier_bit)));break;
   case 1:ReadOldH|=(0x01<<(7-Tier_bit));break;  
   case 2:ReadOldH^=(0x01<<(7-Tier_bit));break;  
   default:break;

   }

   LCD_write_data(ReadOldH);
   LCD_write_data(ReadOldL);

}

  else
  {
switch(Color)
   {

   case 0:ReadOldL&=(~(0x01<<(15-Tier_bit)));break;
   case 1:ReadOldL|=(0x01<<(15-Tier_bit));break;  
   case 2:ReadOldL^=(0x01<<(15-Tier_bit));break;  
   default:break;

   }

   LCD_write_data(ReadOldH);
   LCD_write_data(ReadOldL);


  }   



   LCD_write_com(0x30);   
}

*/

//***********************************************************************
//显示正弦函数图像
//***********************************************************************
void Display_sin_function(float T,uchar A)
{

  float x,y;
  uchar x1,y1;
  float k;
  k=2*10/T;
  for(x=0;x<127;x+=1)
  {
    delay_ms(50);
    y=sin(0.314*x*k);
    x1=(uchar)(x);
    y1=(uchar)(31-(A*y+0.5));
    Draw_point(x1,y1,1);


  }
}

void Display_coordinate(uchar x,uchar y)    //set coordinate origin
{

   uchar i,j;


   for(j=0;j<64;j++)      
   Draw_point(x,j,1);

   for(i=0;i<128;i++)      
   { Draw_point(i,y,1);}         

}




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表