?? 復件 new.c
字號:
write_com(Col_Add+0);
for(j=64;j<128;j++)
{
write_data(img[k*128+j]);
}
}
}
/*******************************************************************************/
void Disp_Chinese(unsigned char pag,unsigned char col, char code *hzk)
{ //指定位置顯示漢字16*16
unsigned char j=0,i=0;
for(j=0;j<2;j++)
{
write_com(Page_Add+pag+j);
write_com(Col_Add+col);
for(i=0;i<16;i++)
{
write_data(hzk[16*j+i]);
}
}
}
/*******************************************************************************/
void Disp_Digit(unsigned char pag,unsigned char col, unsigned char code *hzk)
{ //指定位置顯示字母或數字8*16
unsigned char j=0, i=0;
for(j=0;j<2;j++)
{
write_com(Page_Add+pag+j);
write_com(Col_Add+col);
for(i=0;i<8;i++)
{
write_data(hzk[8*j+i]);
}
}
}
/********************************************************************************/
void Init_lcd(void)//初始化LCD屏
{
Lcd_Rst=0;
Delay12864(100);
Lcd_Rst=1;
Delay12864(100);
Mcs=1; Scs=1;
Delay12864(100);
write_com(Disp_Off);
write_com(Page_Add+0);
write_com(Start_Line+0);
write_com(Col_Add+0);
write_com(Disp_On);
}
/*******************************************************************************/
void Init_DS18B20(void)//初始化ds1820
{
unsigned char x=0;
DQ = 1; //DQ復位
Delay(8); //稍做延時
DQ = 0; //單片機將DQ拉低
Delay(80); //精確延時 大于 480us
DQ = 1; //拉高總線
Delay(14);
x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
Delay(20);
}
/******************************************************************************/
unsigned char ReadOneChar(void)//讀一個字節
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 給脈沖信號
dat>>=1;
DQ = 1; // 給脈沖信號
if(DQ)
dat|=0x80;
Delay(4);
}
return(dat);
}
/******************************************************************************/
void WriteOneChar(unsigned char dat)//寫一個字節
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
Delay(5);
DQ = 1;
dat>>=1;
}
}
/******************************************************************************/
unsigned int ReadTemperature(void)//讀取溫度
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉換
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器
a=ReadOneChar(); //讀低8位
b=ReadOneChar(); //讀高8位
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5; //放大10倍輸出并四舍五入
return(t);
}
/******************************************************************************/
//1302驅動程序
void clock_out(unsigned char dd)
{
unsigned char i;
ACC=dd;
for(i=8;i>0;i--)
{
clock_dat=a0;
clock_clk=1;
clock_clk=0;
ACC=ACC>>1;
}
}
/******************************************************************************/
unsigned char clock_in(void)
{
unsigned char i;
for(i=8;i>0;i--)
{
ACC=ACC>>1;
a7=clock_dat;
clock_clk=1;
clock_clk=0;
}
return(ACC);
}
/******************************************************************************/
unsigned char read_clock(unsigned char ord)
{
unsigned char dd=0;
clock_Rst=0;
clock_clk=0;
clock_Rst=1;
clock_out(ord);
dd=clock_in();
clock_Rst=0;
clock_clk=1;
return(dd);
}
/******************************************************************************/
void write_clock(unsigned char ord, unsigned char dd)
{
clock_Rst=0; clock_clk=0;
clock_Rst=1;
clock_out(ord);
clock_out(dd);
clock_Rst=0;
clock_clk=1;
}
/******************************************************************************/
void Disp(void)//顯示和閃爍函數
{
unsigned int i=0;
unsigned char a=0,b=0,c=0,f=0;
/*i=ReadTemperature();//讀溫度并送顯 如果加了這一溫度程序,那么時間相差走得很慢,那位高手給小弟指導一下
a=i/100; 我的郵箱是qings_yu@asustek.com.cn或者yqs89@163.com 謝謝
Mcs=1;Scs=0;
Disp_Digit(5,40,zero+a*16);
b=i/10-a*10;
Mcs=1;Scs=0;
Disp_Digit(5,48,zero+b*16);
c=i-a*100-b*10;
Mcs=0;Scs=1;
Disp_Digit(5,0,zero+c*16);*/
if(sec==1) //秒閃爍標志位
{
if(flag==1)
{
d=read_clock(0x81);//讀秒
d=((d&0x70)>>4)*10+(d&0x0f);
e=d;
d=d/10;
e=e%10;
Mcs=0;Scs=1;
Disp_Digit(3,40,zero+d*16);//送顯示
Disp_Digit(3,48,zero+e*16);
}
else
{
Mcs=0;Scs=1;
Disp_Digit(3,40,space); //顯示空格
Disp_Digit(3,48,space);
}
}
else
{
d=read_clock(0x81);//讀秒
d=((d&0x70)>>4)*10+(d&0x0f);
e=d;
d=d/10;
e=e%10;
Mcs=0;Scs=1;
Disp_Digit(3,40,zero+d*16);
Disp_Digit(3,48,zero+e*16);
}
if(min==1) //分鐘閃爍標志位
{
if(flag==1)
{
d=read_clock(0x83);//讀分鐘
e=d;
d=d>>4;
e=e&0x0f;
Mcs=0;Scs=1;
Disp_Digit(3,16,zero+d*16);
Disp_Digit(3,24,zero+e*16);
}
else
{
Mcs=0;Scs=1;
Disp_Digit(3,16,space); //顯示空格
Disp_Digit(3,24,space);
}
}
else
{
d=read_clock(0x83);//讀分鐘
e=d;
d=d>>4;
e=e&0x0f;
Mcs=0;Scs=1;
Disp_Digit(3,16,zero+d*16);
Disp_Digit(3,24,zero+e*16);
}
if(hour==1) //小時閃爍標志位
{
if(flag==1)
{
d=read_clock(0x85);//讀小時
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(3,56,zero+d*16);
Mcs=0;Scs=1;
Disp_Digit(3,0,zero+e*16);
}
else
{
Mcs=1;Scs=0;
Disp_Digit(3,56,space); //顯示空格
Mcs=0;Scs=1;
Disp_Digit(3,0,space);
}
}
else
{
d=read_clock(0x85);//讀小時
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(3,56,zero+d*16);
Mcs=0;Scs=1;
Disp_Digit(3,0,zero+e*16);
}
if(year==1) //年閃爍標志位
{
if(flag==1)
{
d=read_clock(0x8d);//讀年
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(1,8,two);
Disp_Digit(1,16,zero);
Disp_Digit(1,24,zero+d*16);
Disp_Digit(1,32,zero+e*16);
}
else
{
Mcs=1;Scs=0;
Disp_Digit(1,24,space); //顯示空格
Disp_Digit(1,32,space);
}
}
else
{
d=read_clock(0x8d);//讀年
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(1,8,two);
Disp_Digit(1,16,zero);
Disp_Digit(1,24,zero+d*16);
Disp_Digit(1,32,zero+e*16);
}
if(mon==1) //月閃爍標志位
{
if(flag==1)
{
d=read_clock(0x89);//讀月
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(1,56,zero+d*16);
Mcs=0;Scs=1;
Disp_Digit(1,0,zero+e*16);
Disp_Chinese(1,8,yue);
}
else
{
Mcs=1;Scs=0;
Disp_Digit(1,56,space); //顯示空格
Mcs=0;Scs=1;
Disp_Digit(1,0,space);
}
}
else
{
d=read_clock(0x89);//讀月
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(1,56,zero+d*16);
Mcs=0;Scs=1;
Disp_Digit(1,0,zero+e*16);
Disp_Chinese(1,8,yue);
}
if(day==1) //日閃爍標志位
{
if(flag==1)
{
d=read_clock(0x87);//讀日
e=d;
d=d>>4;
e=e&0x0f;
Mcs=0;Scs=1;
Disp_Digit(1,24,zero+d*16);
Disp_Digit(1,32,zero+e*16);
Disp_Chinese(1,40,ri);
}
else
{
Mcs=0;Scs=1;
Disp_Digit(1,24,space); //顯示空格
Disp_Digit(1,32,space);
}
}
else
{
d=read_clock(0x87);//讀日
e=d;
d=d>>4;
e=e&0x0f;
Mcs=0;Scs=1;
Disp_Digit(1,24,zero+d*16);
Disp_Digit(1,32,zero+e*16);
Disp_Chinese(1,40,ri);
}
if(weekk==1) //星期閃爍標志位
{
if(flag==1)
{
d=read_clock(0x8b);//讀星期
Mcs=1;Scs=0;
Disp_Chinese(3,40,cone+(d-1)*32);//寫入星期的漢字
}
else
{
Mcs=1;Scs=0;
Disp_Chinese(3,40,spaces); //顯示空格
}
}
else
{
d=read_clock(0x8b);//讀星期
Mcs=1;Scs=0;
Disp_Chinese(3,40,cone+(d-1)*32);//寫入星期的漢字
}
}
/******************************************************************************/
void Disp2(void)//顯示和閃爍函數
{
if(Kgb==1) //開關閃爍標志位
{
if(flag==1)
{
if(Bell_Swh == 0)//0為關
{
Mcs=0;Scs=1;
Disp_Chinese(2,32,guan);//顯示關
}
else
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -