桂林电子科技大学毕业设计(论文)报告用纸 第23 页
unsigned char i=0; unsigned char dat; for (i=0;i<8;i++) {
DQ =1; _nop_();
DQ = 0; _nop_(); DQ = 1;
for(time=0;time<2;time++) ; dat>>=1; if(DQ==1) dat|=0x80; else dat|=0x00;
for(time=0;time<8;time++) ; } return(dat); }
void WriteOneChar(unsigned char dat) 个字节数据 入口参数:dat
{
unsigned char i=0;
for (i=0; i<8; i++) { DQ =1; _nop_(); DQ=0; DQ=dat&0x01; for(time=0;time<10;time++) DQ=1; for(time=0;time<1;time++);
dat>>=1;
23
函数功能:向DS18B20写入一
// ; 桂林电子科技大学毕业设计(论文)报告用纸 第24 页
}
for(time=0;time<4;time++) ; 4.4.3 DS1302时钟芯片模块程序设计
本设计中采用DS1302作为系统的时钟芯片,DS1302芯片内置年、月、星期、日、时、分、秒寄存器,通过读取各个时间寄存器的数据并将其输入LCD。可显示当前的时间日期。DS1302时钟芯片模块程序设计流程图如4-4所示。
图4-4 时钟芯片模块程序流程图
DS1302时钟芯片模块程序核心代码如下:
void Init_DS1302(void) //函数功能: 1302进行初始化设置 {
unsigned char flag; flag= ReadSet1302(0x81);
if(flag&0x80) {
WriteSet1302(0x8E,0x00); WriteSet1302(0x80,((40/10)<<4|(40)));
WriteSet1302(0x82,((5/10)<<4|(5))); WriteSet1302(0x84,((0/10)<<4|(0)));
24
桂林电子科技大学毕业设计(论文)报告用纸 第25 页
}
WriteSet1302(0x86,((11/10)<<4|(11))); WriteSet1302(0x88,((3/10)<<4|(3))); WriteSet1302(0x8c,((14/10)<<4|(14))); WriteSet1302(0x90,0xa5); WriteSet1302(0x8E,0x80);
}
void DisplaySecond(unsigned char x) {
unsigned char i,j; }
void DisplayMinute(unsigned char x) {
unsigned char i,j; }
i=x/10; j=x;
Write_Address(1,2); Write_Data(digit1[i]); Write_Data(digit1[j]); delay(1); i=x/10; j=x;
Write_Address(1,4); Write_Data(digit1[i]); Write_Data(digit1[j]); delay(1);
//函数功能:显示秒
//函数功能:显示分钟
void DisplayHour(unsigned char x) //函数功能:显示小时 {
unsigned char i,j;
25
桂林电子科技大学毕业设计(论文)报告用纸 第26 页
}
i=x/10; j=x;
Write_Address(1,0); Write_Data(digit1[i]); Write_Data(digit1[j]); delay(1);
void DisplayDay(unsigned char x) //函数功能:显示日 {
unsigned char i,j; }
void DisplayMonth(unsigned char x) //函数功能:显示月 {
unsigned char i,j; }
void DisplayYear(unsigned char x) //函数功能:显示年 {
unsigned char i,j;
i=x/10; j=x; i=x/10; j=x;
Write_Address(0,2) ; Write_Data(digit1[i]); Write_Data(digit1[j]); delay(1); i=x/10; j=x;
Write_Address(0,4); Write_Data(digit1[i]); Write_Data(digit1[j]); delay(1);
26
桂林电子科技大学毕业设计(论文)报告用纸 第27 页
}
Write_Address(0,0); Write_Data(digit1[i]); Write_Data(digit1[j]); delay(1);
4.4.4 LCD12864显示模块程序设计
本设计采用LCD12864显示各个功能模块所测得数据,先在LCD上设置显示年、月、日、时、分、秒、T:、V:、路程:字符,然后在显示页面的指定位置输入各个功能模块的数据。LCD12864显示模块设计流程图如4-5所示。
图4-5 LCD显示模块设计流程图
LCD12864显示模块程序核心代码如下: unsigned char Strinr0[]={\年 月 日%unsigned char Strinr1[]={\时 分 秒%unsigned char Strinr2[]={\℃ V: %unsigned char Strinr3[]={\路程 : %unsigned
Number[]={ '0','1','2','3','4','5','6','7','8','9','.'};
void WriteData_LCD12864 (unsigned char X,unsigned char Y,unsigned char Data) //函数功能:对LCD指定位置写入数据
{
27
char