找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

12864显示温度问题

[复制链接]
admin 发表于 2012-9-2 21:54:28 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS=P1^0;
sbit LCD_RS = P0^0; //寄存器选择输入
sbit LCD_RW = P0^1; //液晶读/写控制
sbit LCD_EN = P0^2; //液晶使能控制
uint temp;
uint table[2];
//////////////////////////////////////////////////////////////////////////////////
void delay(uint ms)
{
uint i,j;
for (j=0;j<ms;j++)
for (i=0;i<120;i++);
}

void delayus(uint us)
{
uint i,j;
for (j=0;j<us;j++)
for (i=0;i<12;i++);
}
/////////////////////////////////////////////////////////////////////////////////////
void dsreset(void)
{
DS=0;
delayus(10);
DS=1;
delayus(10);
}

bit tmpreadbit(void)
{ bit dat;
DS=0;
DS=1;
dat=DS;
delayus(1);
return (dat);
}

uchar tmpread(void)
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
dat=(j<<7)|(dat>>1);
}
return(dat);
}

void tmpwritebyte(uchar dat)
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb)
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
else
{
DS=0;
i=8;while(i>0)i--;
DS=1;
i++;

}
}
}

void tmpchange(void)
{
dsreset();
delay(1);
tmpwritebyte(0xcc);
tmpwritebyte(0x44);
}

uint tmp()
{
float tt;
uchar a,b;
dsreset();
delay(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmpread();
b=tmpread();
temp=b;
temp<<=8;
temp=temp|a;
tt=temp*0.0625;
temp=tt*10+0.5;
return temp;
}

void readrom()
{
uchar sn1,sn2;
dsreset();
delay(1);
tmpwritebyte(0x33);
sn1=tmpread();
sn2=tmpread();
}
//////////////////////////////////////////////////////////////////

bit lcd_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayus(1);
result = (bit)(P2&0x80);
LCD_EN = 0;
return(result);
}


void lcd_wcmd(uchar cmd)
{
while(lcd_busy());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
delayus(1);
P2 = cmd;
delayus(1);
LCD_EN = 1;
delayus(1);
LCD_EN = 0;
}


void lcd_wdat(uchar dat)
{
while(lcd_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
delayus(1);
P2 = dat;
delayus(1);
LCD_EN = 1;
delayus(1);
LCD_EN = 0;
}


void lcd_position(uchar X,uchar Y)
{
uchar pos;
if (X==0)
{X=0x80;}
else if (X==1)
{X=0x90;}
else if (X==2)
{X=0x88;}
else if (X==3)
{X=0x98;}
pos = X+Y ;
lcd_wcmd(pos);
}


void lcd_init()
{
lcd_wcmd(0x34); //扩充指令操作
delay(5);
lcd_wcmd(0x30); //基本指令操作
delay(5);
lcd_wcmd(0x0C); //显示开,关光标
delay(5);
lcd_wcmd(0x01); //清除LCD的显示内容
delay(5);
}

void display(uchar x,uchar y,uchar *p)
{
lcd_position(x,y);
while(*p != '\0')
{
lcd_wdat(*p);
p++;
}; }



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

void main()
{

lcd_init();
delay(10);
display(0,0,"温度为:");
while(1)
{
tmpchange();
table[0]=tmp();
delay(5);

display(0, 4, table);



delay(10);
}
}

不知道这个程序有什么问题,无法显示温度?好像显示程序有点问题!该显示温度的地方出现乱码!
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-29 11:47 , Processed in 0.050027 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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