📄 myprojc.c
字号:
#include <reg52.h>
#include <asc5x8e.h>
typedef unsigned char BYTE;
sbit CS1=P2^5;
sbit CS2=P2^6;
sbit RST=P2^7;
sbit RS=P2^2 ;
sbit RW=P2^1;
sbit E=P2^0;
BYTE X=0;
BYTE Y=0;
sbit DQ=P3^5; //ds18b20总线
BYTE xdata *p8255;
char icmd[2]={0x28,0x02};
char temp[9]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
void recvdata(BYTE icmd[] );
void sendbyte(BYTE icnt);
void delay(BYTE ms,BYTE us);
void display() ; //显示数据
void reset(void);
void ready();
void delay(BYTE ms,BYTE us)
{
BYTE m,n,k;
for(m=0;m<ms;m++)
for(n=0;n<us;n++)
for(k=0;k<250;k++);
}
void display() //显示数据
{
*p8255=icmd[0];
delay(5,250);
*p8255=icmd[1];
delay(5,250);
}
bit Busy()
{
bit busy;
RS=0;
RW=1;
E=1;
busy=(bit)(P0&0x80);
E=0;
return busy ;
}
void WRI(BYTE cmd)
{
while(Busy());
RS=0;
RW=0;
E=0;
P0=cmd ;
E=1;
delay(1,5);
E=0;
}
void WRD(BYTE dat)
{
while(Busy());
RS=1;
RW=0;
E=0;
P0=dat ;
E=1;
delay(1,5);
E=0;
}
void SetPos(BYTE s,BYTE posX,BYTE posY)
{
if(s==0)
{
CS1=1;
CS2=0;
}
else if(s==1)
{
CS1=0;
CS2=1;
}
WRI(posY|0x40);
WRI(posX|0xB8);
}
void Clr(BYTE s)
{
BYTE i,j;
for(i=0;i<8;i++)
{
SetPos(s,i,0);
for(j=0;j<64;j++)
WRD(0x00);
}
}
void Rst()
{
RST=0;
RST=1;
}
void ExChange()
{
BYTE tmpL,tmpH;
if(icmd[1]&0xf8)
temp[0]=0xd;//负号
else
temp[0]=0xb;//正号
tmpH=icmd[1]&0x07;
tmpH=tmpH<<4;
tmpL=icmd[0]&0xf0;
tmpL=tmpL>>4;
tmpH=tmpH|tmpL;
temp[1]=tmpH/100+0x10;
tmpH=tmpH%100;
temp[2]=tmpH/10+0x10;
tmpH=tmpH%10;
temp[3]=tmpH+0x10;
temp[4]=0xE;
tmpH=icmd[0]&0x0f;
tmpH*=10;
tmpL=tmpH&0xf0;
temp[5]=(tmpL>>4)+0x10;
tmpH=tmpH&0x0f;
tmpH*=10;
tmpL=tmpH&0xf0;
temp[6]=(tmpL>>4)+0x10;
tmpH=tmpH&0x0f;
tmpH*=10;
tmpL=tmpH&0xf0;
temp[7]=(tmpL>>4)+0x10;
tmpH=tmpH&0x0f;
tmpH*=10;
tmpL=tmpH&0xf0;
temp[8]=(tmpL>>4)+0x10;
tmpH=tmpH&0x0f;
}
void main()
{
int i,j;
Rst();
Clr(2);
WRI(0xC0);
WRI(0x3F);
p8255=0x9ffb;
*p8255=0x81;
p8255=0x9ff8;
DQ=0x01;
while(1)
{
ready();
display();
ExChange();
SetPos(0,0,0);
for(i=0;i<9;i++)
for(j=0;j<6;j++)
WRD(nAsciiDot[temp[i]*6+j]);
}
}
void ready()
{
reset();
sendbyte(0xcc); //跳过匹配
sendbyte(0x44); //启动转化
//delay(20,250); //延时550毫秒
reset();
sendbyte(0xcc); //跳过匹配
sendbyte(0xbe); //读取数据
recvdata(icmd); //接收数据
}
void reset(void)
{
BYTE i=600;
DQ=0x01;
DQ=0x00;
while(i--); //延时30微秒
DQ=0x01;
while(DQ);
i=200;
while(i--); //延时200微秒
DQ=0x01;
}
void sendbyte(BYTE icnt) //发送数据
{
BYTE i,m;
for(i=0;i<8;i++)
{
DQ=0x01;
DQ=0x00;
for(m=0;m<5;m++); //延时大约10微秒
icnt=icnt>>1;
DQ=CY;
for(m=0;m<30;m++); //延时60微秒
DQ=0x01;
}
}
void recvdata(BYTE icmd[] ) //接收数据
{
BYTE i,j,m=4,icm=0x00,icnt=0x00;
for(i=0;i<8;i++)
{
DQ=0x01;
DQ=0x00;
DQ=0x01;
icm>>=1;
if(DQ)
icm|=0x80;
for(m=0;m<25;m++);
}
icmd[0]=icm;
for(j=0;j<8;j++)
{
DQ=0x01;
DQ=0x00;
DQ=0x01;
icnt>>=1;
if(DQ)
icnt|=0x80;
for(m=0;m<25;m++); //延时60微秒
}
icmd[1]=icnt;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -