/******************************************************************************
Copyright 2007
All rights reserved.
文件名 :wenduji.c
模块名称:
功能概要:KS0108驱动的12864
取代版本:0.0.1
修改人 :pulan
完成日期:2007.07.08
升级说明:create
cpu: stc89c58 主频:11.0592Mhz
液晶型号: 生产厂家: 驱动芯片:
硬件连接:
---------------------------------------------------------------
|DB0-----P0.0 | DB4-----P0.4 | CS1-------P2.5 | DI--------P2.1 |
|DB1-----P0.1 | DB5-----P0.5 | CS2-------P2.4 | E---------P2.0 |
|DB2-----P0.2 | DB6-----P0.6 | RW--------P2.2 | Vo接10k电阻到地
|DB3-----P0.3 | DB7-----P0.7 | RST-------P2.3|
---------------------------------------------------------------
DS18B20 DQ-----P1.4
DS1302
******************************************************************************/
#include <reg51.h>
#include <stdio.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
//定义通信端口
sbit DQ = P1^4; //ds1820
sbit clock_clk = P3^5;//ds1302_clk
sbit clock_dat = P3^6;//ds1302_dat
sbit clock_rst = P3^7;//ds1302_rst
//lcd控制口
sbit cs1 = P2^5;
sbit cs2 = P2^4;
sbit rst = P2^3;
sbit rw = P2^2;
sbit di = P2^1;
sbit e = P2^0;
//为了编程方便定义的位变量
sbit a0 = ACC^0;
sbit a1 = ACC^1;
sbit a2 = ACC^2;
sbit a3 = ACC^3;
sbit a4 = ACC^4;
sbit a5 = ACC^5;
sbit a6 = ACC^6;
sbit a7 = ACC^7;
unsigned char x,y;
unsigned char *p[];
bit m="1";//闪烁指示位
unsigned char rec[7];//接收控制字缓冲
unsigned char num="0";//控制字序号
//汉字库及数字符号库
unsigned char code dang[32]={0x00,0x00,0x40,0x42,0x5C,0x48,0x40,0x40,0x7F,0x40,0x50,0x4E,0x44,0xC0,0x00,0x00,
0x00,0x00,0x20,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x7F,0x00,0x00};//当
unsigned char code qian[32]={0x08,0x08,0xE8,0xA8,0xA9,0xAE,0xEA,0x08,0x08,0xC8,0x0C,0x0B,0xEA,0x08,0x08,0x00,
0x00,0x00,0x7F,0x04,0x24,0x44,0x3F,0x00,0x00,0x1F,0x40,0x80,0x7F,0x00,0x00,0x00};//前
unsigned char code shi[32]={0x00,0x10,0x2C,0x24,0xA4,0x64,0x25,0x26,0x24,0x24,0xA4,0x24,0x34,0x2C,0x04,0x00,
0x40,0x40,0x48,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x4B,0x48,0x40,0x40,0x00};//室
unsigned char code wen[32]={0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,
0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00};//温
unsigned char code zero[16]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};//0
unsigned char code one[16]={0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};//1
unsigned char code two[16]={0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00};//2
unsigned char code three[16]={0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00};//3
unsigned char code four[16]={0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00};//4
unsigned char code five[16]={0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00};//5
unsigned char code six[16]={0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00};//6
unsigned char code seven[16]={0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00};//7
unsigned char code eight[16]={0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00};//8
unsigned char code nine[16]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00};//9
unsigned char code point[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00};//小数点
unsigned char code maohao[16]={0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00};//冒号
unsigned char code jian[32]={0x40,0x20,0x30,0xAC,0x23,0x24,0x28,0xB0,0x20,0x00,0xFC,0x00,0x00,0xFF,0x00,0x00,
0x00,0x21,0x22,0x2C,0x21,0x16,0x18,0x17,0x11,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00};//剑
unsigned char code zhi[32]={0x00,0x08,0x08,0x08,0x08,0x08,0x09,0x0A,0x0C,0x88,0x48,0x28,0x1C,0x08,0x00,0x00,
0x20,0x60,0x30,0x08,0x18,0x24,0x24,0x22,0x41,0x40,0x40,0x40,0x40,0x40,0x40,0x00};//之
unsigned char code wu[32]={0x10,0x48,0x54,0xD3,0x7E,0x52,0x7E,0x52,0x52,0x7E,0x52,0xFE,0x52,0x52,0x50,0x00,
0x00,0x88,0x46,0x2B,0x12,0x0A,0x06,0x00,0x1A,0x16,0x12,0xFF,0x12,0x12,0x12,0x00};//舞
unsigned char code nian[32]={0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00,
0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00};//年
unsigned char code yue[32]={0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x01,0x01,0x21,0x41,0x3F,0x00,0x00,0x00,0x00};//月
unsigned char code xing[32]={0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00,
0x00,0x48,0x46,0x41,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x49,0x41,0x40,0x00};//星
unsigned char code qi[32]={0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,
0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00};//期
unsigned char code cone[32]={0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//一
unsigned char code ctwo[32]={0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x00,
0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00};//二
unsigned char code cthree[32]={0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,
0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00};//三
unsigned char code cfour[32]={0x00,0xFE,0x02,0x02,0x02,0xFE,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,
0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x7F,0x00,0x00};//四
unsigned char code cfive[32]={0x00,0x02,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0xC2,0x82,0x02,0x00,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x30,0x20,0x00};//五
unsigned char code csix[32]={0x10,0x10,0x10,0x10,0x10,0x91,0x12,0x1E,0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x00,0x00,0x01,0x02,0x0C,0x78,0x30,0x00,0x00};//六
unsigned char code ri[32]={0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00};//日
unsigned char code sheshidu[32]={0x00,0x02,0x05,0xE2,0x18,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x1E,0x00,0x00,
0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x18,0x00,0x00};//摄氏度的符号
/******************************************************************************************
* 函数名称 :delay
* 功能描述 :延时函数
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void delay(int num)
{
while(num--);
}
/******************************************************************************************
* 函数名称 :lw
* 功能描述 :液晶显示器驱动函数
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void lw(unsigned char x,unsigned char y,unsigned char dd)//液晶显示器驱动函数
{
if (x<64)
{
cs1=cs2=0;
di=rw=0;cs1=1;cs2=0;P0=0xb8|y;e=1;delay(2);e=0;delay(2);
di=rw=0;cs1=1;cs2=0;P0=0x40|x;e=1;delay(2);e=0;delay(2);
di=1;rw=0;cs1=1;cs2=0;P0=dd;e=1;delay(2);e=0;delay(2);
}
else
{
cs1=cs2=0;x=x-64;
di=rw=0;cs1=0;cs2=1;P0=0xb8|y;e=1;delay(2);e=0;delay(2);
di=rw=0;cs1=0;cs2=1;P0=0x40|x;e=1;delay(2);e=0;delay(2);
di=1;rw=0;cs1=0;cs2=1;
P0=dd;e=1;delay(2);e=0;delay(2);
cs1=cs2=1;
}
P0=0xff;
}
/******************************************************************************************
* 函数名称 :lcd_init
* 功能描述 :lcd初始化
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void lcd_init(void)
{
unsigned char x,y;
rst=0;
rst=1;
e=di=rw=0;
cs1=cs2=1;
cs1=0;cs2=1;
di=rw=0;P0=0x3f;e=1;delay(2);e=0;delay(2);
cs1=0;cs2=1;
di=rw=0;P0=0xc0;e=1;delay(2);e=0;delay(2);
cs1=cs2=0;
cs1=1;cs2=0;
di=rw=0;P0=0x3f;e=1;delay(2);e=0;delay(2);
cs1=1;cs2=0;
di=rw=0;P0=0xc0;e=1;delay(2);e=0;delay(2);
cs1=cs2=0;
for (y=0;y<8;y++)
{
for (x=0;x<128;x++)
lw(x,y,0);
}
}
/******************************************************************************************
* 函数名称 :write_chinese
* 功能描述 :向x,y处写入一个汉字
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void write_chinese(unsigned char x,unsigned char y,unsigned char array[])
{
unsigned char j,dd;
for(j=0;j<32;j++)
{
dd=array[j];
if(j<16)
lw(x+j,y,dd);
else
lw(x+j-16,y+1,dd);
}
}
/******************************************************************************************
* 函数名称 :write_flashcn
* 功能描述 :向x,y处写入一个汉字,再次写入时取反,需要与变量m配合,构成闪烁效果
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void write_flashcn(unsigned char x,unsigned char y,unsigned char array[])
{
unsigned char j,dd;
for(j=0;j<32;j++)
{
if(m==1)
dd=array[j];
else
dd=~array[j];
if(j<16)
lw(x+j,y,dd);
else
lw(x+j-16,y+1,dd);
}
}
/******************************************************************************************
* 函数名称 :write_digit
* 功能描述 :向x,y处写入一个阿拉伯数字
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void write_digit(unsigned char x,unsigned char y,unsigned char array[])
{
unsigned char j,dd;
for(j=0;j<16;j++)
{
dd=array[j];
if(j<8)
lw(x+j,y,dd);
else
lw(x+j-8,y+1,dd);
}
}
/******************************************************************************************
* 函数名称 :Init_DS18B20
* 功能描述 :初始化ds1820
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
Init_DS18B20(void)
{
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);
}
/******************************************************************************************
* 函数名称 :ReadOneChar
* 功能描述 :读一个字节
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
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);
}
/******************************************************************************************
* 函数名称 :WriteOneChar
* 功能描述 :写一个字节
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
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;
}
}
/******************************************************************************************
* 函数名称 :ReadTemperature
* 功能描述 :读取温度
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
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();
b=ReadOneChar();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5; //放大10倍输出并四舍五入
return(t);
}
/******************************************************************************************
* 函数名称 :clock_out
* 功能描述 :
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void clock_out(uchar dd)
{
ACC=dd;
clock_dat=a0; clock_clk=1; clock_clk=0;
clock_dat=a1; clock_clk=1; clock_clk=0;
clock_dat=a2; clock_clk=1; clock_clk=0;
clock_dat=a3; clock_clk=1; clock_clk=0;
clock_dat=a4; clock_clk=1; clock_clk=0;
clock_dat=a5; clock_clk=1; clock_clk=0;
clock_dat=a6; clock_clk=1; clock_clk=0;
clock_dat=a7; clock_clk=1; clock_clk=0;
}
/******************************************************************************************
* 函数名称 :clock_in
* 功能描述 :
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
uchar clock_in(void)
{
clock_dat=1;
a0=clock_dat;
clock_clk=1; clock_clk=0; a1=clock_dat;
clock_clk=1; clock_clk=0; a2=clock_dat;
clock_clk=1; clock_clk=0; a3=clock_dat;
clock_clk=1; clock_clk=0; a4=clock_dat;
clock_clk=1; clock_clk=0; a5=clock_dat;
clock_clk=1; clock_clk=0; a6=clock_dat;
clock_clk=1; clock_clk=0; a7=clock_dat;
return(ACC);
}
/******************************************************************************************
* 函数名称 :read_clock
* 功能描述 :
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
uchar read_clock(uchar ord)
{
uchar dd="0";
clock_clk=0;
clock_rst=0;
clock_rst=1;
clock_out(ord);
dd=clock_in();
clock_rst=0;
clock_clk=1;
return(dd);
}
/******************************************************************************************
* 函数名称 :write_clock
* 功能描述 :
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void write_clock(uchar ord, uchar dd)
{
clock_clk=0;
clock_rst=0;
clock_rst=1;
clock_out(ord);
clock_out(dd);
clock_rst=0;
clock_clk=1;
}
/******************************************************************************************
* 函数名称 :Serial_Ini
* 功能描述 :设置串行口,波特率为4800
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void Serial_Ini()
{
TMOD=0x20;
TH1=TL1=0xF3;
PCON=0x80;
EA=1;
ES=1;
TR1=1;
SCON=0x50;
}
/******************************************************************************************
* 函数名称 :Delay
* 功能描述 :
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
main()
{
unsigned int i="0",k;
unsigned char a="0",b=0,c=0,d,e,f=0;
lcd_init();//设置液晶显示器
Serial_Ini();//初始化串行口
//在预定的位置上写入汉字
write_chinese(0,4,dang);
write_chinese(16,4,qian);
write_chinese(32,4,shi);
write_chinese(48,4,wen);
write_digit(80,4,point);
write_chinese(96,4,sheshidu);
write_chinese(80,6,jian);
write_chinese(96,6,zhi);
write_chinese(112,6,wu);
write_digit(72,2,maohao);
write_digit(96,2,maohao);
write_chinese(0,2,xing);
write_chinese(16,2,qi);
write_chinese(32,0,nian);
//设置时钟的初始值
write_clock(0x8e,0x00);//protect
write_clock(0x8c,0x05);//year
write_clock(0x8a,0x01);//day
write_clock(0x88,0x03);//month
write_clock(0x86,0x12);//date
write_clock(0x84,0x12);//hour
write_clock(0x82,0x00);//minute
write_clock(0x80,0x00);//second
write_clock(0x8e,0x80);//protect
while(1)//主循环
{
i=ReadTemperature();//读温度
a=i/100;
write_digit(64,4,zero+a*16);
b=i/10-a*10;
write_digit(72,4,zero+b*16);
c=i-a*100-b*10;
write_digit(88,4,zero+c*16);
d=read_clock(0x8d);//读年
e=d;
d=d>>4;
e=e&0xf;
write_digit(0,0,two);
write_digit(8,0,zero);
write_digit(16,0,zero+d*16);
write_digit(24,0,zero+e*16);
d=read_clock(0x89);//读月
e=d;
d=d>>4;
e=e&0x0f;
write_digit(56,0,zero+d*16);
write_digit(64,0,zero+e*16);
write_chinese(72,0,yue);
d=read_clock(0x87);//读日
e=d;
d=d>>4;
e=e&0x0f;
write_digit(88,0,zero+d*16);
write_digit(96,0,zero+e*16);
write_chinese(104,0,ri);
d=read_clock(0x8b);//读星期
write_chinese(32,2,cone+(d-1)*32);//写入星期的汉字
d=read_clock(0x85);//读小时
e=d;
d=d>>4;
e=e&0x0f;
write_digit(56,2,zero+d*16);
write_digit(64,2,zero+e*16);
d=read_clock(0x83);//读分钟
e=d;
d=d>>4;
e=e&0x0f;
write_digit(80,2,zero+d*16);
write_digit(88,2,zero+e*16);
d=read_clock(0x81);//读秒
e=d;
d=d>>4;
e=e&0x0f;
write_digit(104,2,zero+d*16);
write_digit(112,2,zero+e*16);
if(f==5)//闪烁控制
{
write_flashcn(80,6,jian);
write_flashcn(96,6,zhi);
write_flashcn(112,6,wu);
m=!m;
f=0;
}
f=f+1;
k=100;
while(k)//延时
{
k--;
}
if(num==7||num==2)//控制字的格式
{
write_clock(0x8e,0x00);//解除ds1302的写保护
if(rec[0]=='1')//用户写年月日
{
a=rec[1]-'0';
b=rec[2]-'0';
b=(a<<4)|b;
write_clock(0x8c,b);//写年
a=rec[3]-'0';
b=rec[4]-'0';
b=(a<<4)|b;
write_clock(0x88,b);//写月
a=rec[5]-'0';
b=rec[6]-'0';
b=(a<<4)|b;
write_clock(0x86,b);//写日
}
else if(rec[0]=='2')
{
a=rec[1]-'0';
b=rec[2]-'0';
b=(a<<4)|b;
write_clock(0x84,b);//写小时
a=rec[3]-'0';
b=rec[4]-'0';
b=(a<<4)|b;
write_clock(0x82,b);//写分钟
a=rec[5]-'0';
b=rec[6]-'0';
b=(a<<4)|b;
write_clock(0x80,b);//写秒
}
else if(rec[0]=='3')
{
a=rec[1]-'0';
write_clock(0x8a,a);//写星期
}
write_clock(0x8e,0x80);//加入写保护
}
num=0;//指令序号归零
}
}
/******************************************************************************************
* 函数名称 :serial
* 功能描述 :
* 参数 : 参数名称: 输入/输出? 类型 描述
*
* 返回值 :
* 作者 :
* 创建日期 :2006-12-19
* 全局变量 :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本 : 修改人: 修改日期:
* 修改说明 :
******************************************************************************************/
void serial() interrupt 4//串行口的中断服务函数
{
rec[num]=SBUF;
num++;
RI=0;
}
用户1840717 2016-6-30 10:21