|
赋闲在家,我来瞎捣捣传说中的超声波和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);
}