问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

20分!给个51单片机图像液晶程序

发布网友 发布时间:2022-04-23 09:11

我来回答

2个回答

热心网友 时间:2023-10-09 04:35

#include <reg52.h>

#define uint unsigned int
#define uchar unsigned char
#define x1 0x80
#define x2 0x88
#define y 0x80
#define comm 0
#define dat 1

sbit cs = P0^0;
sbit std = P0^1;
sbit sclk = P0^2;
sbit psb = P0^3; //H=并口; L=串口;
sbit rst = P0^4; //Reset Signal 低电平有效

void wr_lcd (uchar dat_comm,uchar content);
void delay (uint us);

uchar code tab1[]={
"本系列中文模块内"
"任意位置反白显示"
"置二级字库,可在"
"使用更方便更灵活"
};

uchar code tab31[]={
"金鹏科技有限公司"
"Golden Palm TECH"
};
uchar code tab32[]={
/*-- 调入了一幅图像:F:\梁\画图\HOCO12832.bmp --*/
/*-- 宽度x高度=128x32 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x18,0x0C,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
0x01,0xFF,0x80,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x13,0x10,0x03,0xFE,0x00,
0x03,0xFF,0xC0,0x00,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x3F,0x30,0x1F,0xFF,0xC0,
0x03,0xFF,0xE0,0x00,0x00,0x00,0x00,0x8C,0x03,0xF0,0x00,0x7F,0xE0,0x7C,0x01,0xE0,
0x03,0xFF,0xF0,0x00,0x00,0x00,0x01,0x36,0x06,0xC0,0x00,0x5F,0xC0,0xFF,0xFC,0x60,
0x01,0xFF,0xF0,0x00,0x00,0x00,0x02,0x1B,0x0F,0x80,0x00,0xFF,0x01,0xFE,0x0F,0x30,
0x00,0xEF,0xF0,0x00,0x00,0x00,0x02,0x6D,0x9F,0x00,0x00,0x3E,0x03,0xFF,0xF1,0x90,
0x00,0xFF,0xF8,0x00,0x00,0x00,0x04,0x36,0xFE,0x00,0x01,0xFF,0x07,0xFF,0xFC,0x90,
0x00,0xEF,0xFF,0xFF,0x80,0x00,0x04,0xDB,0x7E,0x00,0x03,0xFF,0x87,0xFF,0xFC,0xD0,
0x00,0x0F,0xFF,0xFF,0xC0,0x00,0x04,0x6D,0xFC,0x00,0x07,0xFF,0x8F,0xFF,0xFE,0x50,
0x00,0x0F,0xFF,0xFF,0xE0,0x00,0x04,0x36,0xFC,0x10,0x07,0xFF,0x8F,0xFF,0xFE,0x90,
0x00,0x0F,0xFF,0xFF,0xE0,0x00,0x04,0x1B,0xF8,0x10,0x07,0xFF,0xCF,0xFF,0xFE,0x80,
0x00,0x0F,0xFF,0xFF,0xF0,0x00,0x04,0x0F,0xF8,0x10,0x07,0xFF,0xFF,0xFF,0xFA,0x00,
0x00,0x07,0xFF,0xFF,0xF0,0x00,0x04,0x07,0xF0,0x10,0x07,0xFF,0xFF,0xFF,0xFA,0x00,
0x00,0xFF,0xFF,0xFF,0xF8,0x00,0x02,0x03,0xF0,0x20,0x07,0xFF,0xFF,0xFF,0xBA,0x00,
0x00,0xFD,0xFF,0xFF,0xFC,0x00,0x02,0x03,0xF0,0x20,0x03,0xFF,0xFF,0xDF,0xB8,0x00,
0x00,0xC1,0xC0,0x3F,0xFC,0x00,0x01,0x01,0xE0,0x40,0x00,0xFF,0xFF,0xDF,0xB0,0x00,
0x00,0x81,0xC0,0x3F,0xCE,0x00,0x00,0x81,0xE0,0x80,0x00,0x7F,0xFF,0xDF,0xA0,0x00,
0x00,0x81,0x80,0x1D,0xCF,0x00,0x00,0x41,0xE1,0x00,0x00,0x3F,0xFF,0x9B,0x00,0x00,
0x01,0x83,0x80,0x1F,0xC7,0x80,0x00,0x21,0xE2,0x00,0x00,0x1F,0xFD,0xB6,0x00,0x00,
0x01,0xC3,0x00,0x0E,0xE6,0x80,0x00,0x19,0xEC,0x00,0x00,0x07,0xFE,0x20,0x00,0x00,
0x00,0xC3,0x00,0x07,0x67,0x40,0x00,0x07,0xF0,0x00,0x00,0x03,0x3E,0x00,0x00,0x00,
0x00,0x02,0x00,0x03,0xE7,0xA0,0x00,0x00,0x00,0x00,0x00,0x02,0x8E,0x00,0x00,0x00,
0x00,0x06,0x00,0x03,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x00,
0x00,0x06,0x00,0x07,0x03,0x00,0x77,0x46,0x74,0x24,0x80,0x06,0x04,0x00,0x00,0x00,
0x00,0x1C,0x00,0x06,0x00,0x00,0x55,0x45,0x54,0x57,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x1C,0x00,0x0E,0x00,0x00,0x45,0x45,0x74,0x57,0x80,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1C,0x00,0x00,0x55,0x45,0x44,0x74,0x80,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x38,0x00,0x00,0x77,0x76,0x47,0x54,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

uchar code tab5[]={
/*-- 调入了一幅图像:F:\梁\画图\COCK.bmp --*/
/*-- 宽度x高度=128x64 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x80,0x00,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0C,0x43,0x01,0x80,0x00,0x7F,0xFF,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x19,0xFF,0x07,0x00,0x07,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x3F,0xFC,0x1E,0x00,0x1F,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xBF,0xFF,0xFC,0x00,0x7F,0xFC,0x00,0x7F,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xFF,0xFF,0xF0,0x00,0xFF,0xC0,0x00,0x0F,0xE0,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xFC,0x01,0xF0,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xDF,0xFF,0xC0,0x07,0xFF,0xFF,0xFF,0x80,0xF0,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x0F,0xFF,0xFF,0xFF,0xE0,0x38,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0xFF,0xF8,0x00,0x1F,0xFF,0xF0,0x03,0xF8,0x38,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0xFF,0xE0,0x00,0x3F,0xFF,0xFF,0xC0,0x7C,0x18,0x00,0x00,0x00,
0x00,0x00,0x00,0x04,0x7F,0xF0,0x00,0x3F,0xFF,0xFF,0xF8,0x1E,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xFF,0xF8,0x00,0x7F,0xFF,0xFF,0xFE,0x0F,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0xFF,0xFC,0x00,0xFF,0xFF,0xFF,0xFF,0x87,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0xFF,0xFE,0x00,0xFF,0xFF,0xFF,0xFF,0x83,0x88,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0xFF,0xFE,0x01,0xFF,0xFF,0xFF,0xFF,0xC3,0x88,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0xFF,0xFE,0x01,0xFF,0xFF,0xFF,0xFF,0xE1,0x88,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xE1,0x88,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xF1,0x88,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xF3,0x08,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0xFF,0xF2,0x10,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0x8F,0xFF,0xFF,0xFF,0xFF,0xF0,0x20,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x70,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x70,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x70,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0x7F,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0x7F,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0x7E,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0x3E,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xCF,0xFF,0x3C,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xCF,0xFE,0x38,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0x8F,0xFE,0x38,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0x8F,0xFE,0x30,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x1F,0x7C,0x20,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x1E,0x78,0x00,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFE,0x1E,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xDA,0x3C,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xF2,0x30,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xF1,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x7C,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x78,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x72,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x40,0x04,0xD8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x02,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x02,0x40,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0C,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x38,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0xE2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

/*------------------初始化-----------------*/
void init_lcd (void)
{
rst=1;
psb=0;
wr_lcd (comm,0x30); /*30---基本指令动作*/
wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/
delay (100);
wr_lcd (comm,0x06); /*光标的移动方向*/
wr_lcd (comm,0x0c); /*开显示,关游标*/
}
/*---------------显示汉字或字符----------------*/
void chn_disp (uchar code *chn)
{
uchar i,j;
wr_lcd (comm,0x30);
wr_lcd (comm,0x80);
for (j=0;j<4;j++)
{
for (i=0;i<16;i++)
wr_lcd (dat,chn[j*16+i]);
}
}
/*-----------上半屏显示汉字或字符------------*/
void chn_disp1 (uchar code *chn)
{
uchar i,j;
wr_lcd (comm,0x30);
wr_lcd (comm,0x80);
j=0;
for (i=0;i<16;i++)
wr_lcd (dat,chn[j*16+i]);
wr_lcd (comm,0x90);
j=1;
for (i=0;i<16;i++)
wr_lcd (dat,chn[j*16+i]);
}
/*----------------显示图形-----------------*/
void img_disp (uchar code *img)
{
uchar i,j;
for(j=0;j<32;j++)
{
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j);
wr_lcd (comm,x1+i);
wr_lcd (comm,0x30);
wr_lcd (dat,img[j*16+i*2]);
wr_lcd (dat,img[j*16+i*2+1]);
}
}
for(j=32;j<64;j++)
{
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j-32);
wr_lcd (comm,x2+i);
wr_lcd (comm,0x30);
wr_lcd (dat,img[j*16+i*2]);
wr_lcd (dat,img[j*16+i*2+1]);
}
}
wr_lcd (comm,0x36);
}
/*-------------下半屏显示图形--------------*/
void img_disp1 (uchar code *img)
{
uchar i,j;
for(j=0;j<32;j++)
{
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j);
wr_lcd (comm,x2+i);
wr_lcd (comm,0x30);
wr_lcd (dat,img[j*16+i*2]);
wr_lcd (dat,img[j*16+i*2+1]);
}
}
wr_lcd (comm,0x36);
}
/*--------------显示点阵----------------*/
void lat_disp (uchar data1,uchar data2)
{
uchar i,j,k,x;
x=x1;
for(k=0;k<2;k++)
{
for(j=0;j<16;j++)
{
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j*2);
wr_lcd (comm,x+i);
wr_lcd (comm,0x30);
wr_lcd (dat,data1);
wr_lcd (dat,data1);
}
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j*2+1);
wr_lcd (comm,x+i);
wr_lcd (comm,0x30);
wr_lcd (dat,data2);
wr_lcd (dat,data2);
}
}
x=x2;
}
wr_lcd (comm,0x36);
}
/*-----------------------------------------------*/
//当data1=0xff,data2=0xff时,在x0,y0处反白显示16xl*yl.
void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl)
{
uchar i,j;
for(j=0;j<yl;j++)
{
for(i=0;i<xl;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y0+j);
wr_lcd (comm,x0+i);
wr_lcd (comm,0x30);
wr_lcd (dat,data1);
wr_lcd (dat,data2);
}
}
wr_lcd (comm,0x36);
}
/*--------------清DDRAM------------------*/
void clrram (void)
{
wr_lcd (comm,0x30);
wr_lcd (comm,0x01);
delay (180);
}
/*---------------------------------------*/
void wr_lcd (uchar dat_comm,uchar content)
{
uchar a,i,j;
delay (50);
a=content;
cs=1;
sclk=0;
std=1;
for(i=0;i<5;i++)
{
sclk=1;
sclk=0;
}
std=0;
sclk=1;
sclk=0;
if(dat_comm)
std=1; //data
else
std=0; //command
sclk=1;
sclk=0;
std=0;
sclk=1;
sclk=0;
for(j=0;j<2;j++)
{
for(i=0;i<4;i++)
{
a=a<<1;
std=CY;
sclk=1;
sclk=0;
}
std=0;
for(i=0;i<4;i++)
{
sclk=1;
sclk=0;
}
}
}
/*-----------------------------------*/
void delay (uint us) //delay time
{
while(us--);
}
void delay1 (uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<15;j++)
delay(1);
}
/*------------------主程序--------------------*/
void main ()
{
SP=0x5f;
init_lcd ();
while (1)
{
lat_disp (0x00,0x00);
chn_disp (tab1);
con_disp (0xff,0xff,0x8c,0x80,2,16);
delay1 (8000);
clrram();
lat_disp (0xcc,0xcc);
delay1 (8000);
lat_disp (0x00,0x00);
chn_disp1 (tab31);
img_disp1 (tab32);
delay1 (8000);
clrram();
lat_disp (0xff,0x00);
delay1 (8000);
img_disp (tab5);
delay1 (8000);
}
}

热心网友 时间:2023-10-09 04:35

******************************************************************************************************************************/
/* smally 2008.5.20 南阳师范学院*/

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs=P2^7;
sbit lcden=P2^6;
sbit rtscl=P2^1;
sbit rtsda=P2^2;
sbit da_18b20=P2^0;
uchar code table[]="0123456789";
uchar table1[8];
uchar convert_begin;
uint t_click,tp;
//*****************************************/
//1602操作相关函数
//*****************************************/
void wait() //上电后延时操作,等待各芯片准备好 //avoid error
{
uint i=60000;
while(i>0)i--;
}
void delay() // 操作之间的时间间隔
{
uchar i=200;
while(i>0)i--;
}
void write_com(uchar com) //写命令到1602
{
lcdrs=0;
P0=com;
lcden=1;
delay();
lcden=0;
}
void write_dat(uchar dat) //写数据到1602
{
lcdrs=1;
P0=dat;
lcden=1;
delay();
lcden=0;
}

void init_1602() //初始化1602
{
lcden=0;
write_com(0x01);delay();
write_com(0x80);delay();
write_com(0x38);delay();
write_com(0x0c);delay();
write_com(0x06);delay();
}
//**********************************************
//over
//**********************************************

//********************************************/
//ds1307相关操作函数//传送与接收数据都是先高位
//********************************************/
void rt_delay() //操作延时,等待信号稳定
{
uchar i=10;
while(i>0)i--;
}
void init_1307() //初始化1307
{
rtscl = 1; rt_delay(); rtsda = 1; rt_delay();
}
void start_1307() // 开始信号
{
rtsda = 1; rtscl = 1; rt_delay(); rtsda = 0; rt_delay();
}
void stop_1307() // 结束信号
{
rtsda = 0; rtscl = 1; rt_delay(); rtsda = 1; rt_delay();
}
void write_1307(uchar d ) //写1307
{
uchar i,j; rtscl = 0;
for(i = 0;i < 8; i++)
{
rtsda = (d >> 7);
rtscl = 1;
rt_delay();
d = d << 1;
rtscl = 0;
}
rtsda = 1;
rtscl = 1;
while((rtsda == 1) && (j < 255))j++;
rtscl=0;
}
uchar read_1307(uchar b) //读1307
{
uchar d ,i;
rtsda = 1; rtscl = 0;
for(i = 0; i < 8; i++)
{
rtscl = 1;
rt_delay();
d = d << 1;
d = d | rtsda;
rtscl=0;
}
rtsda = b;
rt_delay();
rtscl = 0;
rtscl = 1;
return d;
}
read_8byte_1307()
{
uchar i;
start_1307( );
write_1307( 0xd0 );
write_1307( 0x00 );
stop_1307( );
for(i = 0;i < 8; i++)
{
start_1307();
write_1307(0xd1);
table1[i]=read_1307(1);
stop_1307();
}
}
//**********************************************
//over
//**********************************************

//**********************************************
//18b20操作相关函数
//**********************************************
void reset_time_18b20() //延时640us
{
uint i;
i=80;
while(i>0)i--;
}

void wrbyte(uchar b) //写一个字节
{
uchar i,j;
bit btmp;
for(j=1;j<=8;j++)
{
btmp=b&0x01;
b=b>>1;
if(btmp)
{
da_18b20=0;
i++;i++;
da_18b20=1;
i=40; //写1时,15us内拉高数据线,总时间时隙不低于60us
while(i>0)i--;
}
else
{
da_18b20=0;
i=40; //写0时,拉低至少60us
while(i>0)i--;
da_18b20=1;
}
}
}

bit rdbit() //读取18b20的一位
{
uchar i;
uchar b;
da_18b20=0;
i++;i++;i++;i++;i++;
da_18b20=1;
i=10; //上升沿15us后读有效
while(i>0)i--;
b=da_18b20;
i=30;
while(i>0)i--; ///总时间不低于60us
return(b);
}

uchar rdbyte() //读取18b20的一字节
{
uchar i,j,byte;

for(i=1;i<=8;i++)
{
j=rdbit();
byte=(j<<7)|(byte>>1);
}

return(byte);
}

uchar init_18b20() //初始化18b20
{
uint j=0;
da_18b20=0;
reset_time_18b20();
da_18b20=1;
while((da_18b20==1)&&(j<250))j++;
if(da_18b20) return 0;
else
{
while(!da_18b20);
return 1;
}
}

void restore()
{
if(t_click==0)
{
if(init_18b20())
{
ET0=0;
while(ET0); //////////操作命令时关闭中断,以免影响时序
wrbyte(0xcc);//////////skip rom命令
wrbyte(0x44);//////////convert 命令
ET0=1; //////////操作命令后再打开中断
convert_begin=1;
}
}
}

void read_18b20()
{
uchar tplsb,tpmsb;
if(t_click>100)
{
convert_begin=0;t_click=0;
if(init_18b20())
{
ET0=0;
while(ET0); //////////操作命令时关闭中断,以免影响时序
wrbyte(0xcc);//////////skip rom命令
wrbyte(0xbe);//////////读暂存器
tplsb=rdbyte();
tpmsb=rdbyte();
ET0=1; //////////操作命令后再打开中断
tp=tpmsb*256+tplsb;
}
}
}
//**********************************************
//over
//**********************************************

//**********************************************
//1602显示函数
//**********************************************

void display()
{
uint nian;
write_com(0x80);delay();
write_dat('D');delay();write_dat('a');delay();
write_dat('t');delay();write_dat(':');delay();
//显示日期信息
nian=table1[7]/16*10+table1[7]%16;
write_dat('2');delay();
write_dat(table[(table1[6]/100)]);delay();
write_dat(table[(table1[6]%100/10)]);delay();
write_dat(table[(table1[6]%10)]);delay();
//间隔符号'-'
write_dat('-');delay();
//显示月份
write_dat(table[table1[5]/16%2]);delay();
write_dat(table[table1[5]%16]);delay();
//间隔符号'-'
write_dat('-');delay();
//显示日期
write_dat(table[table1[4]/16%4]);delay();
write_dat(table[table1[4]%16]);delay();
//星期
write_dat(' ');delay();
write_dat(table[table1[3]%16]);delay();
//LCD第二行
write_com(0x80+0x40);delay();
write_dat('T');delay();write_dat('i');delay();
write_dat('m');delay();write_dat(':');delay();
//显示小时
write_dat(table[table1[2]/16%4]);delay();
write_dat(table[table1[2]%16]);delay();
//间隔符号'-'
write_dat('-');delay();
//显示分钟
write_dat(table[table1[1]/16%8]);delay();
write_dat(table[table1[1]%16]);delay();
//间隔符号'-'
write_dat('-');delay();
//显示秒
write_dat(table[table1[0]/16%8]);delay();
write_dat(table[table1[0]%16]);delay();
//显示温度
write_dat(' ');delay();
if((tp>>11)==0)
{write_dat('+');delay();
write_dat(table[(tp>>4)/10]);delay();
write_dat(table[(tp>>4)%10]);delay();
}
else
{write_dat('-');delay();
write_dat(table[((~(tp-1))>>4)/10]);delay();
write_dat(table[((~(tp-1))>>4)%10]);delay();
}

}

//**********************************************
//over
//**********************************************

//**********************************************

//main主函数

//**********************************************
void main()
{
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256; //定时器初始化
EA=1;
ET0=1;
TR0=1;

wait(); //上电前预热
init_1602();
init_1307();
if(init_18b20())
{
ET0=0;
while(ET0); //////////操作命令时关闭中断,以免影响时序
wrbyte(0xcc);//////////skip rom命令
wrbyte(0x4E);//////////写暂存器命令
wrbyte(0x01);//////////设置上限温度
wrbyte(0x00);//////////设置下限温度
wrbyte(0x1f);//////////设置分辨率TM/R1/R0/1/1/1/1/1
wrbyte(0x43);//////////复制暂存器
ET0=1; //////////操作命令后再打开中断

}
start_1307();
write_1307(0xd0);
write_1307(0x00);
write_1307(0x00);
write_1307(0x59);
write_1307(0x12);
write_1307(0x05);
write_1307(0x03);
write_1307(0x07);
write_1307(0x09);
stop_1307();
while(1)
{
restore();
read_18b20();
read_8byte_1307();
display();
}
}

//****************************************************************

//over

//***************************************************************

//***************************************************************

//中断服务子程序

//***************************************************************

void time0() interrupt 1 using 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
if(convert_begin)t_click++;
}
//****************************************************************

//over

//****************************************************************

//**********************************************that's alll*******************************************************************//

参考资料:smally(南阳师范学院)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
PCR有哪些分类? 不鸣则已 一鸣惊人的三个星座 电动车加装蓝牙音箱怎么接线 怎么把QQ同步助手卸载掉?简直就是垃圾,什么没操作就直接给安装上了,怎... 怎么把QQ同步助手卸载掉?简直就是流氓软件。什么东西没经过我点‘’同 ... excel表如何将相间隔的不同两行组合在一起,成为一行? excel工作表如何对行各自组合 考科目一自己去还是驾校统一去 科目一是自己考还是在驾校 社保转移后,新单位没要转移单,只要了身份证,是不是就可以办理了 什么是社保转移 tcl电视a71c系列的耗能等级是3级,能效指数(EEL-LCD)为1.3,可以吗 忠象的金枕头老树树熟榴莲好吃吗? 康佳lLED65Ⅹ81S电视屏坏了是买新还是换屏? 忠象金枕头榴莲怎么样啊? 先锋LED 43B800S电视机怎么连接手机投屏 猫山王榴莲和金枕头榴莲哪个贵? 先锋LED 43B800S电视机怎么连接手机投屏? 康佳led43x81s质量怎样 干尧榴莲和金枕头榴莲哪个好吃? 猫山王榴莲和金枕头榴莲哪个更好吃? 如何挑选金枕榴莲? 金枕头榴莲和猫山王榴莲哪个更正宗? “金枕头榴莲”与“干尧榴莲”区别是什么? 怎样辨别金枕头榴莲? 怎么更改绑定淘宝支付宝的手机号码啊? 支付宝绑定的手机号码可以换吗? 淘宝号绑定的手机号怎么更换? 手机号注册的淘宝帐号并绑定了支付宝,换号后如何更改绑定号码? 手机丢了怎么解绑支付宝和淘宝绑定的电话号码? 我以前的号码不用了,但是我支付宝和淘宝都是以前的手机号码注册的,而且是绑定的,怎么才能更换手机号码 电脑屏幕分辨率怎么调最合适? 马来西亚金枕头榴莲是委托安徽制造商制作的吗? hkc s2235i-led是多少寸 显示器分辨率 康佳电视led55x89o0s左下角有安全模式四个字怎么消除 显示器分辨率调到最佳显示不清楚是怎么回事 Acer 宏碁 液晶显示器 四大系列 X V S G 每个系列对应的都有什么特点? 摆线针轮减速机 XLED64-187-4 这个型号的含义是什么? 我电脑显示器是22.1英寸的,分辨率应设成多少为佳? 先锋液晶led-43b800s价格多少 电脑显示器为什么分辩率越高字体越小呢? ...要求用3个LED管显示其测距,精确到小数点后2位如,X.XX米。 哪些方面影响白光LED的颜色一致性,特别是当 CIE-X 的跨度只有 0.01时,颜色依然不均匀是为什么? 为什么当调到电脑显示器的最佳分辨率后,显示的内容会变得特别小 单片机TA89S52,通过单片机控制一个LED灯泡亮灭,具体情况见补充,请给个具体C程序 房东的责任和义务 我的显示器最佳分辨率是1024*768的而我的显卡支持的分辨率却很高。如果我把电脑分辨率设置为显卡支持的最 出租房出事房东有责任吗 如何用89S52和ADC0804采集数据并在LED上显示 你们觉得显示器分辨率太高好不好?