当前位置:文档之家› 可以显示温度的万年历程序(已在PD1000开发板上运行)

可以显示温度的万年历程序(已在PD1000开发板上运行)


//秒 //分钟 //小时 //日 //月 //年 //星期
item=R1302(address+1)/16*10+R1302(address+1)%16; if (sel_1==0) item++; else item--; if(item>max) item=mini; if(item<mini) item=max;
void main(void)
{
Delay400Ms(); //启动等待,等 LCM 讲入工作状态
LCMInit();
//LCM 初始化
Delay5Ms();
//延时片刻(可不要)
mychar();
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
//冒号闪烁 if(flag==0)
{DisplayOneChar(3,0,0x3a); DisplayOneChar(6,0,0x3a);} else
{DisplayOneChar(3,0,0x20); DisplayOneChar(6,0,0x20);}
if(sec==1) //秒闪烁标志位 { if(flag==1) { DisplayOneChar(7,0,R1302(0x81)/16+0x30); //显示秒 DisplayOneChar(8,0,R1302(0x81)%16+0x30); } else {
Disp_line1(); Disp_line2();
id_case1_key();
break;
case 2://月
year=0;mon=1;
Disp_line1(); Disp_line2();
id_case1_key();
break;
case 3://日
mon=0;day=1;
Disp_line1(); Disp_line2();
// 版 本:PD1000 开发板
// 作 者:青岛普爱特
// 日 期:2011.02.28
//注:(1):主芯片 STC89C52RD 使用 12M 晶振
// (2):Keil uV3 3.30 编译运行通过
// (3):本例程在 PD1000 开发板平台上成功运行通过
// (4):青岛普爱特版权所有,只供学习参考,不得应用于商业用途.
{ Delay5Ms(); if(up==0) Set(id,0); if(id!=7) while(up==0);
} if (down==0) //减少
{ Delay5Ms(); if(down==0) Set(id,1); if(id!=7) while(down==0);
} }
//根据选择调整相应项目并写入 DS1302 void Set(uchar sel,uchar sel_1) {
if(min==1) //分钟闪烁标志位
{
if(flag==1)
{
DisplayOneChar(4,0,R1302(0x83)/16+0x30); //显示分钟
DisplayOneChar(5,0,R1302(0x83)%16+0x30);
}
else
{
DisplayOneChar(4,0,0x20);
//中断入口,冒号闪烁 void t0(void) interrupt 1 using 0 {
TH0=(65535-50000)/256; //50ms 定时 TL0=(65535-50000)%256; timecount++; if(timecount>9) {
timecount=0; flag=~flag; } } //id 为 1 时的下一级选择 void id_case1_key() { if (up==0) //增加
typedef unsigned int word;
Read_Temperature(char,char);
void mychar(void);
byte ow_reset(void);
byte read_byte(void);
void write_byte(char val);
void adjust_res(char res); //res 分别等于 0x1f, 0x3f, 0x5f 温度读数分辨率分别对应
break; case 6://分钟
hour=0;min=1; Disp_line1(); Disp_line2(); id_case1_key(); break; case 7://秒 min=0;sec=1; Disp_line1(); Disp_line2(); id_case1_key(); break; } }
//
0.5, 0.25, 0.125
//******* 1602LCD 驱动 ********************************************************** void WriteDataLCM(unsigned char WDLCM); void WriteCommandLCM(unsigned char WCLCM,BuysC); unsigned char ReadStatusLCM(void); void LCMInit(void); void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData); void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData); void Delay5Ms(void); void Delay400Ms(void); unsigned char code week[]={"Week."};
DisplayOneChar(7,0,0x20);
//显示秒
DisplayOneChar(8,0,0x20);
}
}
else
{
DisplayOneChar(7,0,R1302(0x81)/16+0x30); //显示秒
DisplayOneChar(8,0,R1302(0x81)%16+0x30);
}
signed char address,item; signed char max,mini; if(sel==7) {address=0x80; max=0;mini=0;} if(sel==6) {address=0x82; max=59;mini=0;} if(sel==5) {address=0x84; max=23;mini=0;} if(sel==3) {address=0x86; max=31;mini=1;} if(sel==2) {address=0x88; max=12;mini=1;} if(sel==1) {address=0x8c; max=99;mini=0;} if(sel==4) {address=0x8a; max=7; mini=1;}
bit lmcinit_or_not;
//是否需要清屏标志位“1”为需要“0”为不需要
bit flag,sflag;
//flag 是时钟冒号闪烁标志,sflag 是温度负号显示标志
void Disp_line1(void); //显示屏幕第一行
void Disp_line2(void); //显示屏幕第二行
unsigned char inittime[7]={0x59,0x11,0x08,0x28,0x02,0x11,0x01};
//
秒 分钟 小时 日 月 年 星期
//***** 18B20 温度显示定义部
sbit DQ=P3^7;
//18B20 接 P3.7 口
typedef unsigned char byte;
void Set(uchar,uchar);
//根据选择调整相应项目
void RTInputByte(uchar);
/* 输入 1Byte */
uchar RTOutputByte(void);
/* 输出 1Byte */
void W1302(uchar, uchar);
// 向 DS1302 写入一个字节
id_case1_key();
break;
case 4://星期
day=0;weekk=1;
Disp_line1(); Disp_line2();
id_case1_key();
break;
case 5://小时
weekk=0;hour=1;
Disp_line1(); Disp_line2();
id_case1_key();
// (5):公司网站: 淘宝网店:
#include <reg51.h> #include <string.h> #include<intrins.h> #define uchar unsigned char
//功能引脚定义 sbit set= P1^0; //设置调整按键 sbit up = P1^1; //加 键 sbit down =P1^2; //减 键
//1602+18b20+ds1302 程序
// 程序名称:1602+18b20+ds1302 程序
// 实验目的:综合应用 lcd1602,ds18b20,ds1302
// 连接方法:将 LCD1602 液晶屏 插到 J9 端子上 引脚朝下
//
JP8 与 JP5 用 8p 排线连接
// 描 //
述:液晶显示当前时间(可调整) ,温度(精度可调) K1 设置键 K2 递增键 K3 递减键
相关主题