注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
xcj_roger的个人空间 https://home.eeworld.com.cn/space-uid-99744.html [收藏] [复制] [分享] [RSS]
日志

【戒子猪】超声波测距,用手机屏幕显示

已有 1355 次阅读2010-12-30 15:04 |

赋闲在家,我来瞎捣捣传说中的超声波和5110的手机显示屏幕,  显示一下下温度和测量到的距离啦,

上图::::::

这个是做好的温度(左边)和距离(右边)的显示值啦,,

比较难看,将就一下吧 ,虾米也初学。。。。


图片

 

这两圆圆的圈圈就是传说中的超声波发生器啦 。。。。。。。

图片

 

晒一下偶的实验板, 跳线连了很多 ,主要是连超声波和5110屏的啦 ,

图片



把源程序贴上:(瞎捣了要3天)

#include "5110_LCD.h"
#include "18b20.h"
#include "stdio.h"
#include "wave.h"

uchar flag;


void Conut(void);

/***********************/
void main(void)
{
 unsigned char k;
 float temp;
 char String[10];
 res=0;
 for(k=0;k<250;k++);
 res=1;    
   LCD_init();  //初始化LCD模块
 LCD_clear(); //清屏幕
 init_ds18b20();  

 


 LCD_print_CNstring(0,0,"戒子猪工作室");

// LCD_print_CN(0,1,"戒");
// LCD_print_CNstring(0,2,"戒子猪");
 LCD_print_CNstring(0,3,"温度");
 LCD_print_CNstring(50,3,"距离");
 //LCD_print_string(12,3,":");
// LCD_print_CNstring(0,4,"技术支持");
 
 TMOD=0x01;
 TH0=0;
 TL0=0;
 ET0=1;
 EA=1;
 
 while(1)
 { 
  StartModule();
  while(!Echo);
  TR0=1;
  while(Echo);
  TR0=0;
  Conut();
  delayms(80);
  
  
  
  
  temp=get_Temp();
  sprintf(String,"%0.1fC",temp);
  LCD_print_string(0,5,String);
  //delay_1ms();delay_1ms();delay_1ms();delay_1ms();delay_1ms();
  }


// while(1);
}

 

/********************************************************/
     void zd0() interrupt 1    //T0中断用来计数器溢出,超过测距范围
  {
 flag=1; //中断溢出标志

  }

 

void Conut(void)
{
// uchar disbuff[10];
 unsigned char S;
  uint time;
  time=TH0*256+TL0;
  TH0=0;
  TL0=0;
 
  S=(time*1.7)/100;     //算出来是CM
  if((S>=700)||(flag==1)) //超出测量范围显示“-”
  { 
  flag = 0;
   LCD_print_string(50,5,"FAIL");
                       //显示M
  }
  else
  {
    //disbuff[0]=S%1000/100;
   // disbuff[1]=S%1000%100/10;
    //disbuff[2]=S%1000%10 %10;

  //sprintf(disbuff,"%0.1fcm",S);
  //LCD_print_string(50,5,disbuff);
  LCD_Disp_Int(50,5,S);
  }
}

 


#include "5110_LCD.h"
#include "6X8.h"
#include "chinese.h"

 

void delay_1ms(void)
{
 uint i;
 for(i=0;i<1000;i++); 
}

 


/*--------------------------------------------
LCD_write_byte: 使用SPI接口写数据到LCD
输入参数:dt:写入的数据;
command :写数据/命令选择;
编写日期:20101225
----------------------------------------------*/
void LCD_write_byte(uchar dat,uchar command)
{
 uchar i;
 sce=0;
 if(command==0)
 {
  dc=0;
 }
 else
 {
  dc=1;
 }
 
 
 for(i=0;i<8;i++)
 {
  if(dat&0x80)
  {
   sdin=1; 
  }
  else
  {
   sdin=0; 
  }
  sclk=0;
  dat=dat<<1;
  
  sclk=1;
 } 
 dc=1;
 sce=1;
 sdin=1;
}


/*---------------------------------------
LCD_init: 5110LCD初始化
编写日期:20101225
-----------------------------------------  */

void LCD_init(void)
{
 res=0;
 delay_1ms();
 res=1;
 sce=0;
 delay_1ms();
 sce=1;
 delay_1ms();
  LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式
 LCD_write_byte(0xc8, 0); // 设置偏置电压
 LCD_write_byte(0x06, 0); // 温度校正
 LCD_write_byte(0x13, 0); // 1:48
 LCD_write_byte(0x20, 0); // 使用基本命令
 LCD_clear();         // 清屏
 LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示
 sce=0; 
}

/*-------------------------------------------
LCD_set_XY: 设置LCD坐标函数
输入参数:X:0-83  Y:0-5
编写日期:20101225
---------------------------------------------*/
void LCD_setXY(uchar X,uchar Y)
{
 LCD_write_byte(0x40|Y,0); 
 LCD_write_byte(0x80|X,0); 
}

/*------------------------------------------
LCD_clear: LCD清屏函数
编写日期:20101225
--------------------------------------------*/
void LCD_clear(void)
{
 uchar t;
 uchar k;
 LCD_setXY(0,0);
 for(t=0;t<6;t++)
 {
  for(k=0;k<84;k++)
  {
   LCD_write_byte(0x00,1); 
  } 
 } 
 
}

/*---------------------------------------------
LCD_print_char: 显示6(宽)*8(高)点阵列数字字母符号等半角类
输入参数:c:显示的字符;
编写日期:20101225
-----------------------------------------------*/
void LCD_print_char(uchar c)
{
 uchar i;
 
 c-=32;
 

 for(i=0;i<6;i++)
 {
  LCD_write_byte(font6x8[c][i],1); 
 } 
 
 
 
}

/*---------------------------------------------
LCD_print_string: 显示英文字符串函数
输入参数:*s:英文字符串的指针;
 X,Y:显示字符串的位置,x 0-83   y,0-5
编写日期:20101225
-----------------------------------------------*/
void LCD_print_string(uchar X,uchar Y,char *s)
{
 LCD_setXY(X,Y);
 while(*s)
 {
  LCD_print_char(*s);
  s++; 
  
 }
 
 
}

/*---------------------------------------------
LCD_print_CN: 显示中文字符函数
输入参数:*s:英文字符串的指针;
 X,Y:显示字符串的位置,x 0-83   y,0-5
编写日期:20101225
-----------------------------------------------*/
void LCD_print_CN(uchar X,uchar Y,uchar *s)
{
 uchar  j , len , i , k , w ;
 len = sizeof(HzLib)/sizeof(HzLib[0]);
 for(j=0;j<len;j++)
 {
   if((HzLib[j].Index[0]==s[0])&&(HzLib[j].Index[1]==s[1]))break; 
 } 
 
  LCD_setXY(X,Y);
 for(i=0;i<2;i++)
        { 
       if(i)
    {
      LCD_setXY(X,Y+1);
    }
              for (k=0;k<12;k++)
         {
           w=HzLib[j].Msk[k+12*i]; 
           LCD_write_byte(w,1); 
      }   
    }
 
}

 /*---------------------------------------------
LCD_print_CNstring: 显示中文字符函数
输入参数:*s:英文字符串的指针;
 X,Y:显示字符串的位置,x 0-83   y,0-5
编写日期:20101225
-----------------------------------------------*/
void LCD_print_CNstring(uchar X,uchar Y,uchar *s)
{
  while(1)
  {
     if(*s==0)return;
  else if(*s>0x80)
  {
   LCD_print_CN(X,Y,s);
      X += 12;
   s += 2;
  }
  else
  {
    LCD_print_string(X,Y,s);
       X += 6;
   s += 1;
  }
  }
}

 /*---------------------------------------------
LCD_Disp_Int(): 显示十进制数字
输入参数:val:预显示的数字;
 X,Y:显示字符串的位置,x 0-83   y,0-5
编写日期:20101225
----------------------------------------------- */
void LCD_Disp_Int(unsigned char x,unsigned char y,unsigned int val)
{
 unsigned char temp[5];
 temp[0]=(val%1000)/100+48;
 temp[1]=(val%100)/10+48;
 temp[2]=(val%10)+48;
 temp[3]='c';
 temp[4]='m';
 LCD_print_string(x,y,temp);
}
 




最后把偶的LOGO贴上来 ,,,

图片

发表评论 评论 (1 个评论)
回复 小赛跑跑 2010-12-30 16:06
图片呢?

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章