📄 12864 具有菜单显示的电子钟 温度计.txt
字号:
/****************************************************************************
左屏判忙
****************************************************************************/
void busyl(void)
{
CS1=1;
CS2=0;
DI=0;
RW=1;
P0=1;
ENABLE=1;
delayus(2);
while(BF);
ENABLE=0;
RW=0;
DI=0;
}
/****************************************************************************
左屏写指令
****************************************************************************/
void write_cmdl(unsigned char Commandaddr)
{
busyl();
DI=0;
RW=0;
ENABLE=1;
P0=Commandaddr;
ENABLE=0;
RW=0;
DI=0;
}
/****************************************************************************
左屏写数据
****************************************************************************/
void write_datal(unsigned char Dataaddr)
{
busyl();
DI=1;
RW=0;
ENABLE=1;
P0=Dataaddr;
ENABLE=0;
RW=0;
DI=0;
}
/****************************************************************************
右屏判忙
****************************************************************************/
void busyr(void)
{
CS1=0;
CS2=1;
DI=0;
RW=1;
P0=1;
ENABLE=1;
delayus(2);
while(BF);
ENABLE=0;
RW=0;
DI=0;
}
/****************************************************************************
右屏写指令
****************************************************************************/
void write_cmdr(unsigned char Commandaddr)
{
busyr();
DI=0;
RW=0;
ENABLE=1;
P0=Commandaddr;
ENABLE=0;
RW=0;
DI=0;
}
/****************************************************************************
右屏写数据
****************************************************************************/
void write_datar(unsigned char Dataaddr)
{
busyr();
DI=1;
RW=0;
ENABLE=1;
P0=Dataaddr;
ENABLE=0;
RW=0;
DI=0;
}
/****************************************************************************
LCD初始化
****************************************************************************/
void init_12864(void)
{
write_cmdl(0xc0);
write_cmdl(0x3f);
write_cmdr(0xc0);
write_cmdr(0x3f);
}
/****************************************************************************
LCD清屏
****************************************************************************/
void clear(void)
{
unsigned char i,j;
unsigned char Page,Row;
for(i=0;i<8;i++)
{
Page=i|0xb8;
write_cmdl(Page);
write_cmdr(Page);
Row=0x40;
write_cmdl(Row);
write_cmdr(Row);
for(j=0;j<64;j++)
{
write_datal(0x00);
write_datar(0x00);
}
}
}
/****************************************************************************
写入ASCII字符
****************************************************************************/
void write_ascii(unsigned char x,unsigned char y,unsigned char time,bit fanhei)
{
unsigned char i,j;
unsigned char k=0;
unsigned char fanheizi=0;
unsigned char Page,Row;
Page=x|0xb8;
if((y>=0)&&(y<8))
{
Row=(y*8)|0x40;
write_cmdl(Page);
write_cmdl(Row);
for(j=0;j<2;j++)
{
for(i=0;i<8;i++)
{
if(fanhei==1)
{
fanheizi=255-nAsciiDot[time*16+k];
}
else
{
fanheizi=nAsciiDot[time*16+k];
}
write_datal(fanheizi);
k++;
}
write_cmdl(Row);
write_cmdl(Page+1);
}
}
if((y>=8)&&(y<16))
{
y=y-8;
Row=(y*8)|0x40;
write_cmdr(Page);
write_cmdr(Row);
for(j=0;j<2;j++)
{
for(i=0;i<8;i++)
{
if(fanhei==1)
{
fanheizi=255-nAsciiDot[time*16+k];
}
else
{
fanheizi=nAsciiDot[time*16+k];
}
write_datar(fanheizi);
k++;
}
write_cmdr(Row);
write_cmdr(Page+1);
}
}
}
/****************************************************************************
写入星期
****************************************************************************/
void write_week(unsigned char x,unsigned char y,unsigned char weektime,bit fanhei)
{
unsigned char i,j;
unsigned char k=0;
unsigned char fanheizi=0;
unsigned char Page,Row;
Page=x|0xb8;
if((y>=0)&&(y<8))
{
Row=(y*8)|0x40;
write_cmdl(Page);
write_cmdl(Row);
for(j=0;j<2;j++)
{
for(i=0;i<16;i++)
{
if(fanhei==1)
{
fanheizi=255-characterweek[(weektime-1)*32+k];
}
else
{
fanheizi=characterweek[(weektime-1)*32+k];
}
write_datal(fanheizi);
k++;
}
write_cmdl(Row);
write_cmdl(Page+1);
}
}
if((y>=8)&&(y<16))
{
y=y-8;
Row=(y*8)|0x40;
write_cmdr(Page);
write_cmdr(Row);
for(j=0;j<2;j++)
{
for(i=0;i<16;i++)
{
if(fanhei==1)
{
fanheizi=255-characterweek[(weektime-1)*32+k];
}
else
{
fanheizi=characterweek[(weektime-1)*32+k];
}
write_datar(fanheizi);
k++;
}
write_cmdr(Row);
write_cmdr(Page+1);
}
}
}
/****************************************************************************
写入汉字
****************************************************************************/
void write_character(unsigned char x,unsigned char y,unsigned char *ptr,bit fanhei)
{
unsigned char i,j;
unsigned char number,k=0;
unsigned char cl,ch;
unsigned char fanheizi=0;
unsigned char Page,Row;
cl=ptr[0];
ch=ptr[1];
for(number=0;;number++)
{
if((cl==GB_16[number].Index[0])&&(ch==GB_16[number].Index[1]))
{
Page=x|0xb8;
if((y>=0)&&(y<8))
{
Row=(y*8)|0x40;
write_cmdl(Page);
write_cmdl(Row);
for(j=0;j<2;j++)
{
for(i=0;i<16;i++)
{
if(fanhei==1)
{
fanheizi=255-GB_16[number].Msk[k];
}
else
{
fanheizi=GB_16[number].Msk[k];
}
write_datal(fanheizi);
k++;
}
write_cmdl(Row);
write_cmdl(Page+1);
}
}
if((y>=8)&&(y<16))
{
y=y-8;
Row=(y*8)|0x40;
write_cmdr(Page);
write_cmdr(Row);
for(j=0;j<2;j++)
{
for(i=0;i<16;i++)
{
if(fanhei==1)
{
fanheizi=255-GB_16[number].Msk[k];
}
else
{
fanheizi=GB_16[number].Msk[k];
}
write_datar(fanheizi);
k++;
}
write_cmdr(Row);
write_cmdr(Page+1);
}
}
break;
}
}
}
/****************************************************************************
DS18B20初始化
****************************************************************************/
bit reset_ds18b20(void)
{
bit presence;
DQ=0;
delayus(70);
DQ=1;
delayus(3);
presence=DQ;
delayus(25);
return presence;
}
/****************************************************************************
读一字节温度值
****************************************************************************/
unsigned char read_ds18b20(void)
{
unsigned char i;
unsigned char value = 0;
for(i=8;i>0;i--)
{
value=value>>1;
DQ=0;
DQ=1;
delayus(1);
if(DQ)
{
value=value|0x80;
}
delayus(6);
}
return(value);
}
/****************************************************************************
写一字节命令
****************************************************************************/
void write_ds18b20(unsigned char value)
{
unsigned char i;
for(i=8;i>0;i--)
{
DQ=0;
DQ=value&0x01;
delayus(5);
DQ=1;
value=value>>1;
}
delayus(5);
}
/****************************************************************************
读出温度值
****************************************************************************/
unsigned char read_temp(void)
{
unsigned char i,count;
unsigned int temp_v;
unsigned int x;
unsigned char temp[2];
reset_ds18b20();
write_ds18b20(0xcc);
write_ds18b20(0x44);
reset_ds18b20();
write_ds18b20(0xcc);
write_ds18b20(0xbe);
temp[1]=read_ds18b20();
temp[0]=read_ds18b20();
tempflag=0;
if((temp[0]&0xf8)!=0x00)
{
tempflag=1;
temp[1]=~temp[1];
temp[0]=~temp[0];
temp_v=temp[1]+1;
temp[1]=temp_v;
if(temp_v>255)
{
temp[0]++;
}
}
x=((temp[0]&0x07)*256+temp[1])>>4;
temp[1]=temp[1]&0x0f;
temp[1]=divdisplay[temp[1]];
for(i=0;i<8;i++)
{
bcddis[i]=0;
}
i=0;
bcddis[0]=temp[1];
i++;
bcddis[1]=10;
i++;
while(x/10)
{
bcddis[i]=x%10;
x=x/10;
i++;
}
bcddis[i]=x;
i++;
count=i;
if(tempflag==1)
{
bcddis[i]=13;//-
}
else
{
bcddis[i]=12;//+
}
return count;
}
2007-6-23 21:03:00举报帖子
使用道具
LO单片机VE
等级:业余侠客
文章:65
积分:536
门派:无门无派
注册:2005年7月28日第 13 楼
--------------------------------------------------------------------------------
/****************************************************************************
时间设置
****************************************************************************/
void timereset(void)
{
bit BACK4=1;
clear();
write_character(0,2,"时",0);
write_character(0,4,"间",0);
write_character(0,10,"返",0);
write_character(0,12,"回",0);
write_character(2,4,"年",0);//写入 年月日星期等不变汉字
write_character(2,8,"月",0);
write_character(2,12,"日",0);
write_character(4,4,"星",0);
write_character(4,6,"期",0);
delayms(2000);
write_ascii(6,7,11,0);
readtime();
write_ascii(2,2,YEAR>>4,0);
write_ascii(2,3,YEAR&0x0f,0);
write_ascii(2,6,MONTH>>4,0);
write_ascii(2,7,MONT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -