小R科技-WIFI机器人网·机器人创意工作室
标题:
12864驱动板
[打印本页]
作者:
suyijiang
时间:
2015-10-15 14:38
标题:
12864驱动板
STC12C5608AD单片机驱动12864
作者:
yu木风
时间:
2015-10-18 12:25
把代码贴出来那就更好啦
作者:
suyijiang
时间:
2015-10-20 10:23
12864显示万年历
/*-------------------------------头文件---------------------------------------*/
#include <reg52.h>
#include <intrins.h>
#include "LCD12864.h"
#include "DS1302.h"
#include "DS18B20.h"
#include "nongli.h"
#include "displaytime.h"
#include "zk.h"
#include "bell.h"
#include "HW.H"
#include "delay.h"
#define uint unsigned int
#define uchar unsigned char
/*--------------------定义按键-----------------------------------------------*/
sbit K1 = P2^0; //K1-设置
sbit K2 = P2^1; //K2-确认、返回
sbit K3 = P2^2; //K3-加
sbit K4 = P2^3; //K4-减
//K5=P1^4,K5-控制闹钟的打开与关闭,在"hw.h"中定义
/*---------------------函数声明------------------------------*/
void ds_w0(void);
void ds_w(void);
void Conver_week(bit c,uchar year,uchar month,uchar day);
/*-----------------------------定义全局变量------------------------------*/
bit w=0; //调时标志位
unsigned char yy,mo,dd,xq,hh,mm,ss,month_moon,day_moon,week,tiangan,dizhi,moontemp1,moontemp2;//定义时间映射全局变量(专用寄存器)
signed char address,item,item0,max,mini;
unsigned char clk_ala[2]={0x00,0x00};//闹钟数据存放初,始值为00:00
unsigned char hour=0,minute=0,time=0;//用于闹铃的设置
/*-----------------------------日期、时间设置函数-----------------------------*/
void tiaozheng(void){
yy = read_clock(0x8d);//调用1302时钟数据中的年数据,从地址0x8d中
mo = read_clock(0x89);//调用1302时钟数据中的月数据,从地址0x89中
dd = read_clock(0x87);//从1302芯片中读取日数据,从地址0x87中
week = read_clock(0x8b);//从1302芯片中读取星期数据,从地址0x8b中
//----------------------------------
lcm_w_test(0,0x80);
lcm_w_word("20");//显示内容字符20
lcm_w_test(1,(yy/16)+0x30);//函数参数1,代表本行写数据,YY/16+0X30得出年十位数字的显示码地址,送显示
lcm_w_test(1,yy%16+0x30);//函数
lcm_w_word("-");
//----------------------------------
lcm_w_test(1,(mo/16)+0x30);
lcm_w_test(1,mo%16+0x30);//与16取余数,得到月份的个位数,加0x30得到该数字的液晶内定显示码送显示
lcm_w_word("-");//调用字符显示函数,显示文字 月
//----------------------------------
/*
lcm_w_test(0,0x88);//第一个参数0,表示本行写入LCM的是指令,指定显示位置88H(第三行左端)
lcm_w_word("星期");//调用字符显示函数,显示文字 星期
lcm_w_test(1,mo%16+0x30);//与16取余数,得到月份的个位数,加0x30得到该数字的液晶内定显示码送显示
*/
//----------------------------------
lcm_w_test(1,(dd/16)+0x30);
lcm_w_test(1,dd%16+0x30);//第一个1参数,表示本行写数据,日数据与16取余得个位数,加0x30得到显示码
// lcm_w_word("日");//显示字符 日
//----------------------------------
if(read_clock(0x85) != hh)
{//如果程序中的小时与1302芯片中的不同,
hh = read_clock(0x85);//刷新程序中的小时数据
}
lcm_w_test(0,0x88);//第一个参数0,表示本行写入LCM的是指令,指定显示位置88H(第三行左端)
lcm_w_test(1,(hh/16)+0x30);//显示十位
lcm_w_test(1,hh%16+0x30);//显示个位
lcm_w_word(":");
//----------------------------------
if(read_clock(0x83) != mm)
{//如果1302芯片中的分钟数据与程序中的分钟变量不相等
mm = read_clock(0x83);//刷新程序中的分钟数据
}
lcm_w_test(1,(mm/16)+0x30);//向液晶写数据,显示分钟的十位数
lcm_w_test(1,mm%16+0x30);//向液晶写数据,显示分钟的个位数
lcm_w_word(":");
//----------------------------------
if(read_clock(0x81) != ss)
{//如果1302芯片中的分钟数据与程序中的秒钟变量不相等(0x81为读秒数据0x80为写秒数据)
ss = read_clock(0x81);//刷新程序中的秒钟数据
}
lcm_w_test(1,(ss/16)+0x30);//向液晶写数据,显示分钟的十位数
lcm_w_test(1,ss%16+0x30);//向液晶写数据,显示分钟的个位数
displayxq(); //显示星期
//=========显示闹钟的设置时间===================
hour=clk_ala[0]; //取出上一次的闹钟小时值
minute=clk_ala[1]; //取出上一次的闹钟分钟值
lcm_w_test(0,0x95);
//----------------------------
lcm_w_test(1,(hour/10)+0x30);//显示小时十位
lcm_w_test(1,(hour%10)+0x30);//显示小时个位
//----------------------------
lcm_w_word(":");
//----------------------------
lcm_w_test(1,(minute/10)+0x30);//显示分钟的十位
lcm_w_test(1,(minute%10)+0x30);//显示分钟的个位
}
/////////////////////////////////////////////////////////////////////////
/*****************************************************************************/
//被调数据加一或减一,并检查数据范围,写入1302指定地址保存
void ds_w(void)
{
item0=time;
item=((read_clock(address+1))/16)*10 + (read_clock(address+1))%16;//时间的调整
if(K3 == 0||key_add==1){//如果按动上调键
item++;//数加 1
}
if(K4 == 0||key_minish==1){//如果按动下调键
item--;//数减 1
}
if(item>max) item=mini;//查看数值是否在有效范围之内
if(item<mini) item=max;//如果数值小于最小值,则自动等于最大值
write_clock(0x8e,0x00);//允许写1302芯片操作
write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302
write_clock(0x8e,0x80);//写保护,禁止写操作
}
复制代码
作者:
suyijiang
时间:
2015-10-20 10:24
DS1302
#ifndef __DS1302_H__
#define __DS1302_H__
#define uchar unsigned char
#define uint unsigned int
/*****************************************************************************/
//定义DS1302时钟接口
sbit clock_clk = P0 ^0;//ds1302_clk(时钟线)
sbit clock_dat = P0 ^1;//ds1302_dat(数据线)
sbit clock_Rst = P0 ^2;//ds1302_Rst(复位线)
/*****************************************************************************/
//定义累加器A中的各位
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;
/*******************************************************************************/
//函数声明
void write_clock(uchar ord, uchar dd);
void clock_out(uchar dd);
uchar clock_in(void);//DS1302逐位写入字节(底层协议)
void clock_out(uchar dd);//1302驱动程序逐位读出字节(底层协议?
void Init_1302(void);//-设置1302的初始时间(2010年10月08日20时51分00秒星期五)
uchar read_clock(uchar ord);//DS1302读数据(底层协议)
void read_clockS(void);
//设置1302的初始时间(自动初始化)
void Init_1302(void)
{//-设置1302的初始时间(2010年10月08日20时51分00秒星期五)
uchar f;
if(read_clock(0xc1) != 0xaa)
{
write_clock(0x8e,0x00);//允许写操作
write_clock(0x8c,0x15);//年
write_clock(0x8a,0x01);//星期
write_clock(0x88,0x10);//月
write_clock(0x86,0x17);//日
write_clock(0x84,0x08);//小时
write_clock(0x82,0x05);//分钟
write_clock(0x80,0x00);//秒
write_clock(0x90,0xa5);//充电
write_clock(0xc0,0xaa);//写入初始化标志RAM(第00个RAM位置)
for(f=0;f<60;f=f+2)
{//清除闹钟RAM位为0
write_clock(0xc2+f,0x00);
}
write_clock(0x8e,0x80);//禁止写操作
}
}
/*****************************************************************************/
//DS1302写数据(底层协议)
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;
}
/*****************************************************************************/
//1302驱动程序逐位读出字节(底层协议)
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;
}
/*****************************************************************************/
//DS1302逐位写入字节(底层协议)
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);
}
/*****************************************************************************/
//DS1302读数据(底层协议)供调用时钟数据
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);
}
复制代码
.H文件
作者:
suyijiang
时间:
2015-10-20 10:25
12864.H
#ifndef __LCD12864_H__
#define __LCD12864_H__
#include "zk.h"
#define uchar unsigned char
#define uint unsigned int
/*-----------------------------定义12864液晶屏数据线---------------------------------*/
sbit LCM_RS = P0^7; //模式位,为0输入指令,为1输入数据
sbit LCM_RW = P0^6; //读写位,为0读,为1写
sbit LCM_EN = P0^5; //使能位,高脉冲
#define Lcd_Bus P1 //LCM12864数据总线,P0.0--P0.7对应连接DB0--DB7
/*------------------------------------------------------------------------------------*/
/*12864液晶显示屏并口驱动程序--------------------------------------------------------*/
//检查忙位
void chk_busy()
{
LCM_RS=0; LCM_RW=1; LCM_EN=1;
Lcd_Bus=0xff;
while((Lcd_Bus&0x80)==0x80);
LCM_EN=0;
}
/*写指令到LCD------------------------------------------------------------------------*/
void write_com(uchar cmdcode)
{
chk_busy();
LCM_RS=0; LCM_RW=0; LCM_EN=1;
Lcd_Bus=cmdcode;
LCM_EN=0;
}
/*写数据到LCD------------------------------------------------------------------------*/
void write_data(uchar Dispdata)
{
chk_busy();
LCM_RS=1; LCM_RW=0; LCM_EN=1;
Lcd_Bus=Dispdata;
LCM_EN=0;
}
/*向LCM发送一个字符串,长度64字符之内-------------------------------------------------*/
void lcm_w_word(uchar *s)
{
while(*s>0) { write_data(*s); s++; } //应用:lcm_w_word("您好!");
}
/******************************************************************************/
void lcm_w_test(bit i,uchar word){//写指令或数据(被调用层)
if(i == 0){
write_com(word);//写指令(0,指令)
}else{
write_data(word);//写数据(1,数据)
}
}
/*清屏函数--------------------------------------------------------------------------*/
void lcm_clr(void)
{
write_com(0x01);
}
/*****************************************************************************
void lcm_clr2(void){//清屏上面3行(用空格填满要清显示的地方,因为液晶屏是静态显示的,所以这办法常用)
lcm_w_test(0,0x80);//第一行
lcm_w_word(" ");
//标尺("1234567812345678"应该能够显示满一行)
lcm_w_test(0,0x90);//第二行
lcm_w_word(" ");
//标尺("1234567812345678"应该能够显示满一行)
lcm_w_test(0,0x88);//第一行
lcm_w_word(" ");
//标尺("1234567812345678"应该能够显示满一行)
}
*/
/*初始化LCD屏------------------------------------------------------------------------*/
void lcm_init()
{
write_com(0x30); //选择8bit数据流
write_com(0x0c); //开显示(无游标、不反白)
lcm_clr(); //清除显示,并且设定地址指针为00H
write_com(0x06); //光标右移,DDRAM位址计数器(AC)加1,不整屏移动
// lcm_clr2();
}
/*使用绘图的方法让一个16*16的汉字符反白----------------------------------------------*/
//形式参数:uchar x,uchar y,uchar wide,uchar bkcor
//行参说明:坐标水平位置,坐标垂直位置,反白行数,要反白还是清除(1:反白,0:清除)
void write1616GDRAM(uchar x,uchar y,uchar sign,uchar *bmp)
{ //x-列,y-行,sign-反白选择(1不反白,0反白),bmp-图画的选择
uchar i,j,basex;
write_com(0x36); //扩展指令,绘图模式命令,开显示也可以绘.(关图片显示0x34)
if(y==1||y==2) //第一第二行
{
basex=0x80; //上半屏
y=(y-1)*16; //垂直位址从0X80开始.
}
if(y==3||y==4) //第三第四行
{
basex=0x88; //下半屏
y=(y-3)*16; //垂直位址都是从0X80开始的,不管上下半屏。
}
for(i=0;i<16;i++) //
{
write_com(0x80+y+i); //写入垂直位址。
write_com(basex+x-1); //再写入水平位址(上半屏第一字为0X80,……第七字为0X87)
//下半屏第一字为0X88,……第七字为0X8F;
for(j=0;j<2;j++) //再写入两个8位元的数据,AC会自动增一,接着写数据
{
if(sign==1)
write_data(~(*bmp++));
else
write_data(*bmp++);
}
}
write_com(0x36); //写完数据,开图片显示
}
/**************************************************************************************
//函数功能:显示16X16图形,适用于st7920型液晶
//形式参数:uchar x,uchar y,uchar *bmp
//行参说明:横坐标X列,纵坐标Y行,sign=1反白、=0不反,tt是要显示的图形bmp1616中的第几个
//************************************************************************************/
void set1616pic(uchar x,uchar y,uchar sign,uchar tt)
{ //x-列,y-行,sign-反白选择(1不反白,0反白),tt-图画的选择
uchar (*pp)[32]; //定义指针
pp=bmp1616; //二维数组首地址给指针,故指针指向下一个数组地址应为加64
write1616GDRAM(x,y,sign,pp[tt]); //写入小时的十位
}
/**************************************************************************************
//函数功能:显示16X32图形,适用于st7920型液晶
//形式参数:uchar x,uchar y,uchar *bmp
//行参说明:横坐标X列,纵坐标Y行,要显示的图形BMP
//***********************************************************************************
void write1632GDRAM(uchar x,uchar y,uchar *bmp)
{
uchar i,j,basex,basey;
switch(y) //由y纵坐标定是上半屏还是下半屏
{
case 1: basex=0x80; break; //上半屏
case 2: basex=0x80; break; //先上半屏,下面再下半屏。
case 3: basex=0x88; break; //下半屏
default: return; //别的则返回
}
basey=basex+x-1;
write_com(0x36);
if(y==1||y==3) //如为第一第三行,则直接是在同一半屏,直接绘完32行点阵数据。
{
for(i=0;i<32;i++) //写入32行点阵
{
write_com(0x80+i); //先写入垂直位址,选上下32行的哪一行,不管上下半屏,首行都为0X80
write_com(basey); //再写入水平位址(选上下半屏)
for(j=0;j<2;j++) //2个8位元的数据,即16BIT宽度
write_data(*bmp++);
}
}
if(y==2) //从第二行开始则画图将上下半屏都有,所以先画完上半屏16行,再画下半屏16行。
{
for(i=0;i<16;i++) //写入上半屏16行点阵
{
write_com(0x90+i); //先写入垂直位址,选上下32行的哪一行,不管上下半屏,首行都为0X80,第二行为0X90。
write_com(basey); //(选上半屏)再写入水平位址
for(j=0;j<2;j++) //2个8位元的数据,即16BIT宽度
write_data(*bmp++);
}
for(i=0;i<16;i++) //写入下半屏16行点阵
{
write_com(0x80+i); //先写入垂直位址,选上下32行的哪一行,不管上下半屏,首行都为0X80
write_com(basey+8); //(选下半屏)再写入水平位址
for(j=0;j<2;j++) //2个8位元的数据,即16BIT宽度
write_data(*bmp++);
}
}
write_com(0x36); //写完数据,开图片显示
}
*/
/**************************************************************************/
//-------------------------------------------
//函数功能:显示128x64图形,适用于st7920型液晶
//-------------------------------------------
/************************************************************************
void write12864GDRAM(unsigned char code *img)
{
uchar i,j;
for(j=0;j<32;j++) //绘制上半屏
{
for(i=0;i<8;i++)
{
write_com(0x34); //0011 0100 扩充功能设定——8位数据 扩充指令操作 绘图开
write_com(0x80+j); //1xxx xxxx 设定绘图RAM——先设定垂直(列)地址AC6 AC5…AC0
write_com(0x80+i); //1000 0xxx 设定绘图RAM——再设定水平(行)地址AC3AC2AC1AC0
write_com(0x30); //0011 0000 扩充功能设定——8位数据 基本指令操作
write_data(img[j*16+i*2]);
write_data(img[j*16+i*2+1]);
}
}
for(j=32;j<64;j++) //绘制下半屏
{
for(i=0;i<8;i++)
{
write_com(0x34); //0011 0100 扩充功能设定——8位数据 扩充指令操作 绘图开
write_com(0x80+j-32); //1xxx xxxx 设定绘图RAM——先设定垂直(列)地址AC6 AC5…AC0
write_com(0x88+i); //1000 1xxx 设定绘图RAM——再设定水平(行)地址AC3AC2AC1AC0
write_com(0x30); //0011 0000 扩充功能设定——8位数据 基本指令操作
write_data(img[j*16+i*2]);
write_data(img[j*16+i*2+1]);
}
}
write_com(0x36);
}
*/
/**************************************************************************/
//-------------------------------------------
//函数功能:显示128x32图形,适用于st7920型液晶
//功能描述 :下半屏显示图形
//-------------------------------------------
/***********************************************************************
void write12832GDRAM(unsigned char code *img)
{
uchar i,j;
for(j=0;j<32;j++)
{
for(i=0;i<8;i++)
{
write_com(0x34);
write_com(0x80+j);
write_com(0x88+i);
write_com(0x30);
write_data(img[j*16+i*2]);
write_data(img[j*16+i*2+1]);
}
}
write_com(0x36);
}
*/
/**************************************************************************************
** 函数名称: init_12864_GDRAM()
** 功能描述: 在程写GDRAM时序初始化12864
**************************************************************************************/
void init_12864_GDRAM()
{
write_com(0x30); //基本指令操作(扩充指令操作为:0x34)
write_com(0x0C); //整体显示ON,游标OFF,游标位置OFF
write_com(0x06); //光标右移,DDRAM位址计数器(AC)加1,不整屏移动
lcm_clr(); //清屏 (清DDRAM)
}
/**************************************************************************************
//函数名称:Clean_12864_GDRAM(void)
//函数功能:清屏函数
//使用说明:GDRAM填满0
//*****************************************************************************/
void Clean_12864_GDRAM(void)
{
uchar x,y;
write_com(0x36);
init_12864_GDRAM(); //设置扩展指令集,按手册说明,仅设置了绘图位,
write_com(0x36); //需要两次,本次设置扩展指令集。
for (y=0;y<32;y++)
{
write_com(0x80+y); //设置y=1000+00xx,y+1则往下一行
write_com(0x80); //设置x=1000 0000
for (x=0;x<16;x++)
{
write_data(0x00); //高字节数据
write_data(0x00); //低字节数据
}
}
}
/*-----------------------------------------------------------------------------------*/
#endif
复制代码
文件
作者:
suyijiang
时间:
2015-10-20 10:26
字库头文件
#ifndef __ZK_H__
#define __ZK_H__
#define uchar unsigned char
#define uint unsigned int
/*128x32图片-------------------------------------------------------------
unsigned char code bmp12832[]={
0x00,0x00,0x03,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x0F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x3F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0xF0,0xFF,0xF8,0xFE,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x08,0x00,0x00,
0x00,0x07,0xFF,0x00,0x07,0xBF,0x80,0x00,0x00,0x00,0x00,0x04,0x03,0x7D,0x80,0x00,
0x00,0x0F,0xFF,0xC0,0x7F,0xFF,0xE0,0x00,0x10,0x00,0x03,0xCD,0x80,0xA3,0xC0,0x00,
0x00,0x3F,0xFF,0xF1,0xFF,0xFF,0xE0,0x00,0x18,0x00,0x02,0x6F,0xC0,0x22,0x40,0x00,
0x00,0x3F,0xFF,0xF1,0xFF,0xFF,0xE0,0x00,0x1C,0x00,0x00,0x58,0x42,0x22,0x40,0x00,
0x00,0x7F,0x87,0xF1,0xFC,0x0F,0xF8,0x00,0x23,0xFC,0x03,0x50,0x83,0xA2,0x40,0x00,
0x00,0x7E,0x03,0xC1,0xF8,0x07,0xFC,0x00,0x20,0x38,0x01,0x42,0x01,0xA2,0x40,0x00,
0x00,0x78,0x00,0x00,0x00,0x00,0x7C,0x00,0x60,0xC0,0x00,0x86,0x01,0xEA,0xC0,0x00,
0x00,0xC0,0x00,0x00,0x00,0x00,0x7F,0x01,0x83,0x00,0x01,0xC6,0x01,0x3F,0x80,0x00,
0x00,0xC0,0x00,0x00,0x00,0x00,0x7F,0x06,0x04,0x00,0x01,0x2F,0x01,0x02,0x00,0x00,
0x00,0xC0,0x00,0x00,0x00,0x00,0x78,0xC8,0x18,0x00,0x02,0x19,0x01,0x02,0x00,0x00,
0x00,0xC0,0x1F,0xC1,0xFF,0xFE,0x00,0x38,0x10,0x00,0x00,0x10,0x81,0xE1,0xC0,0x00,
0x00,0xC0,0x1F,0xC1,0xFF,0xFE,0x00,0x38,0x10,0x00,0x00,0x10,0x00,0x3F,0x00,0x00,
0x03,0x07,0xE0,0x00,0x00,0x00,0x00,0x08,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x04,0x00,0x00,0x00,0x00,0x00,0x03,0x88,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x18,0x00,0x00,0x00,0x00,0x00,0x01,0x8F,0x80,0x02,0x00,0x03,0x00,0x00,0x00,0x00,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0xC2,0x01,0xFF,0x80,0x00,0x00,0x00,
0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x39,0x81,0x9F,0xC1,0x98,0x80,0x00,0x00,0x00,
0x40,0x00,0x00,0x00,0x00,0x00,0x03,0xC1,0x83,0x82,0x01,0x18,0x80,0x00,0x00,0x00,
0x40,0x00,0x00,0x00,0x00,0x01,0xFF,0x02,0x02,0x9F,0xC1,0xFE,0x80,0x00,0x00,0x00,
0x40,0x00,0x1C,0x00,0x00,0x01,0xC0,0x06,0x00,0xB2,0x41,0x1A,0x80,0x00,0x00,0x00,
0x20,0x00,0x3C,0x00,0x00,0x0E,0x00,0x08,0x00,0xB6,0xC1,0x18,0x8A,0xAA,0x00,0x00,
0x18,0x00,0x3C,0x00,0x1F,0xF8,0x00,0x30,0x00,0x9F,0x81,0xF8,0x80,0x00,0x00,0x00,
0x04,0x00,0x00,0x0F,0xFC,0x00,0x00,0x40,0x00,0xA4,0x01,0x1E,0x80,0x00,0x00,0x00,
0x03,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x40,0x00,0xBC,0x01,0x18,0x80,0x00,0x00,0x00,
0x00,0x30,0x00,0xE0,0x00,0x00,0x00,0x80,0x00,0x8E,0x01,0x18,0x80,0x00,0x00,0x00,
0x00,0xC0,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x8B,0xC1,0x03,0x80,0x00,0x00,0x00,
0x03,0x00,0x0C,0x00,0x00,0x00,0x04,0x00,0x00,0x90,0x40,0x00,0x00,0x00,0x00,0x00,
0x03,0x00,0x0C,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
*/
/*128x64图片-----------------------------------------------------------------------
unsigned char code bmp12864[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x07,0xBB,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,
0x01,0xE0,0x00,0x00,0x00,0x0F,0xD7,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,
0x1F,0xDE,0x00,0x00,0x00,0x3F,0xEF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x2F,0x20,
0x12,0x52,0x00,0x00,0x00,0xFF,0xD7,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x3E,0x78,
0x12,0xD2,0x00,0x00,0x03,0xFF,0xBB,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x02,0xC8,
0x15,0x6A,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x1D,0x90,
0x14,0xCA,0x00,0x00,0x0F,0xED,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x0E,0xE0,
0x15,0xFA,0x00,0x00,0x1F,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x0E,0xE0,
0x16,0xB2,0x00,0x00,0x3F,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x18,0xB0,
0x14,0xCA,0x00,0x00,0x7F,0xED,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x31,0x38,
0x14,0xCA,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x02,0x1E,
0x17,0xFA,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0xFF,0xFF,0x80,0x00,0x0C,
0x10,0x02,0x00,0x01,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x01,0xFF,0xFF,0xE0,0x00,0x00,
0x0F,0xFC,0x00,0x03,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0xFF,0xFF,0xF0,0x00,0x00,
0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x3F,0xFF,0xB8,0x00,0x00,
0x00,0xE0,0x00,0x07,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x3F,0xFF,0x9C,0x00,0x00,
0x00,0xA0,0x00,0x0F,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x1F,0xFF,0x9C,0x00,0x00,
0x1F,0xBF,0x00,0x1F,0xFF,0xFF,0xFF,0xC0,0x00,0x0A,0x00,0x0F,0xFF,0x8E,0x03,0x80,
0x20,0x00,0x80,0x1F,0xFF,0xFF,0xFF,0x00,0x00,0x04,0x00,0x07,0xFF,0x8E,0x3F,0xF8,
0x20,0x00,0x80,0x1F,0xFF,0xFF,0xFC,0x00,0x00,0x0A,0x00,0x3F,0xFF,0x8E,0x02,0xD0,
0x1F,0x1F,0x00,0x3F,0xFF,0xFF,0xF1,0xFF,0xF0,0x00,0x0F,0xC3,0xFF,0x8E,0x32,0xF0,
0x02,0x08,0x00,0x7F,0xFF,0xFF,0xF0,0x00,0x0F,0x00,0x70,0x03,0xFF,0x0E,0x13,0xC0,
0x0C,0x06,0x00,0x7F,0xBB,0xCF,0xE0,0x3F,0xA0,0x00,0x0F,0xF3,0xFB,0x0C,0x26,0x80,
0x10,0xA1,0x00,0xFF,0xD7,0x9F,0xC0,0xF7,0xF8,0x00,0x3B,0xCF,0xFB,0x08,0x20,0x80,
0x11,0xB1,0x01,0xFF,0xFF,0x33,0x80,0x7F,0x80,0x00,0x3F,0xB3,0xF3,0x18,0x7F,0xEC,
0x1E,0xAF,0x01,0xFF,0xD7,0x63,0x80,0x1F,0xC0,0x00,0x07,0xE1,0xF3,0x10,0x01,0xF8,
0x00,0xA0,0x03,0xFF,0xBF,0xC3,0x00,0x00,0x00,0x00,0x00,0x03,0xE2,0x00,0x00,0x70,
0x00,0xE0,0x03,0xFF,0xFF,0xB7,0x00,0x00,0x00,0x00,0x00,0x01,0xC4,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x88,0x00,0x00,0x00,
0x00,0x30,0x07,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x40,0x03,0x80,0x00,0x00,0x00,
0x00,0x48,0x07,0xFF,0xFF,0x87,0x00,0x00,0x00,0x00,0x40,0x03,0x00,0x00,0x00,0x00,
0x1F,0xC8,0x0F,0xFF,0xFF,0xCF,0x00,0x00,0x00,0x00,0x40,0x07,0x00,0x00,0x00,0xC0,
0x20,0xC8,0x0F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x04,0x60,
0x20,0xC8,0x0F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x05,0x00,0x0F,0x00,0x00,0x1F,0xFC,
0x25,0xCF,0x1F,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x19,0xF8,
0x26,0x00,0x9F,0xFF,0xFF,0xFF,0x40,0x00,0x18,0x01,0x70,0x2E,0x00,0x00,0x09,0x48,
0x26,0x00,0xBF,0xFF,0xFF,0xFF,0x90,0x00,0x07,0xFF,0x80,0x46,0x00,0x00,0x0B,0xF0,
0x25,0xCF,0x3F,0xFF,0xFF,0xFF,0x84,0x00,0x00,0xFE,0x00,0x86,0x00,0x00,0x09,0x40,
0x20,0xC8,0x3F,0xFF,0xFF,0xFC,0x81,0x80,0x00,0x3C,0x02,0x06,0x00,0x00,0x08,0xC0,
0x20,0xC8,0x3F,0xFF,0xFF,0xFC,0xC0,0x70,0x00,0x00,0x0C,0x03,0x00,0x00,0x0F,0xB0,
0x1F,0x48,0x3F,0xFF,0xFF,0xEF,0xC0,0x0E,0x00,0x00,0x30,0x01,0x00,0x00,0x07,0x1E,
0x00,0x48,0x3F,0xFF,0xFF,0xF7,0x40,0x01,0xC0,0x00,0xC0,0x00,0x80,0x00,0x00,0x0C,
0x00,0x48,0x3F,0xFF,0xFF,0xF7,0x20,0x00,0x38,0x01,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x30,0x1F,0xFF,0xFF,0xEC,0x60,0x00,0x06,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x1F,0xFF,0xFF,0xE8,0x18,0x00,0x00,0xF3,0x0C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x1F,0xFF,0xFF,0xF4,0x06,0x00,0x00,0x01,0x06,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x1F,0xFF,0xFF,0xF4,0x01,0x80,0x00,0x01,0x03,0x00,0x00,0x00,0x0F,0xFC,
0x00,0x00,0x07,0xFF,0xFF,0xF5,0x00,0x70,0x00,0x01,0x03,0xD0,0x00,0x00,0x0F,0x88,
0x00,0x00,0x07,0xFF,0xFF,0xFB,0x00,0x0E,0x7F,0x81,0x03,0x0F,0x80,0x00,0x08,0xF8,
0x00,0x00,0x03,0xFF,0xFF,0xCF,0x00,0x00,0x00,0x7A,0x03,0x00,0x78,0x00,0x0F,0xF8,
0x00,0x00,0x00,0xFF,0xFC,0x03,0x40,0x00,0x00,0x07,0x03,0xC0,0x07,0x80,0x08,0x88,
0x00,0x00,0x00,0x3B,0xFC,0x3F,0x8C,0x00,0x00,0x01,0x86,0xE0,0x00,0x60,0x0F,0xF8,
0x00,0x00,0x00,0xC1,0xE3,0x7F,0xF2,0x00,0x00,0x00,0xA7,0xF8,0x00,0x18,0x08,0x88,
0x00,0x00,0x03,0x00,0x00,0xFF,0xFC,0x80,0x00,0x00,0xFF,0xFC,0x00,0x0C,0x38,0x88,
0x00,0x00,0x0C,0x00,0x00,0x7F,0xFE,0x38,0x00,0x00,0xFF,0xFF,0x00,0x06,0x70,0x80,
0x00,0x00,0x30,0x00,0x00,0xFF,0xFF,0x06,0x87,0xAA,0xFF,0xFF,0x80,0x03,0x00,0x00,
0x00,0x00,0xC0,0x00,0x00,0xFF,0xFF,0x80,0x00,0x00,0x6F,0xFF,0xC0,0x01,0x80,0x00,
0x00,0x01,0x80,0x00,0x00,0xFF,0xFF,0xC0,0x00,0x00,0x6F,0xFF,0xE0,0x00,0x80,0x00,
0x00,0x03,0x00,0x00,0x00,0xFF,0xFF,0xC0,0x00,0x00,0x77,0xFF,0xF0,0x00,0xC0,0x00,
0x00,0x06,0x00,0x00,0x00,0x7F,0xFF,0xE0,0x00,0x00,0x77,0xFF,0xF8,0x00,0x40,0x00,
};
*/
//16x16图标-----------------------------------------------------------------//
//PCtoLCD2002取模:顺向,逐行式/
uchar code bmp1616[3][32]={
/*
//"℃" tt=0
{0x00,0x00,0x30,0x00,0x48,0x00,0x49,0xC0,0x33,0xE8,0x06,0x38,0x0C,0x18,0x0C,0x08,
0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x06,0x08,0x03,0x10,0x01,0xE0,0x00,0x00},
*/
/*
//温度计图标
{0x00,0x00,0x01,0x80,0x02,0x40,0x02,0x40,0x02,0xC0,0x02,0x40,0x02,0xC0,0x02,0x40,
0x02,0xC0,0x02,0x40,0x03,0xC0,0x07,0xE0,0x0F,0xF0,0x0F,0xF0,0x07,0xE0,0x03,0xC0},
*/
//闹钟图标
{
0x00,0x00,0x38,0x1C,0x60,0x06,0x43,0xC2,0x4C,0x32,0x11,0x08,0x11,0x08,0x21,0x04,
0x21,0xF4,0x20,0x04,0x10,0x08,0x10,0x08,0x0C,0x30,0x13,0xC8,0x20,0x04,0x00,0x00},
//无任何图片显示
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
//喇叭
{0x00,0x00,0x00,0xC2,0x01,0xC6,0x03,0xCC,0x07,0xD8,0x7F,0xD0,0x7F,0xC0,0x7F,0xDE,
0x7F,0xDE,0x7F,0xC0,0x7F,0xD0,0x07,0xD8,0x03,0xCC,0x01,0xC6,0x00,0xC2,0x00,0x00}
};
#endif
复制代码
作者:
suyijiang
时间:
2015-10-20 10:27
DS18B20的头文件
#ifndef __DS18B20_H__
#define __DS18B20_H__
#include "delay.h"
#include "lcd12864.h"
#define uchar unsigned char
#define uint unsigned int
/*定义DS18B20数据线*/
sbit DQ = P0^4;
/*DS18B20驱动程序------------------------------------------------------------*/
uchar data disdata[5];
uint tvalue;//温度值
/*ds1820复位-----------------------------------------------------------------*/
void ds1820rst()
{
uchar x=0;
DQ=1; //DQ复位
delay_18B20(80); //延时
DQ=0; //DQ拉低
delay_18B20(800); //精确延时大于480us
DQ=1; //拉高
delay_18B20(140);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
while(!DQ);
delay_18B20(80);
}
/*读一个字节-----------------------------------------------------------------*/
uchar ds1820rd()
{
uchar i=0;
uchar dat=0;
for (i=8;i>0;i--)
{
DQ=0; //给脉冲信号
dat>>=1;
DQ=1; //给脉冲信号
if(DQ)
dat|=0x80;
}
delay_18B20(100);
return(dat);
}
/*写一个字节-----------------------------------------------------------------*/
void ds1820wr(uchar wdata)
{
uchar i=0;
for (i=8;i>0;i--)
{
DQ=0;
DQ=wdata&0x01;
delay_18B20(100);
DQ=1;
wdata>>=1;
}
delay_18B20(80);
}
/*读取温度值并转换-----------------------------------------------------------*/
read_temp()
{
uchar a,b;
ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/
delay_18B20(40);
ds1820wr(0x44);//*启动温度转换*/
// delay_18B20(200);
ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/
delay_18B20(40);
ds1820wr(0xbe);//*读取温度*/
delay_18B20(200);
a=ds1820rd();//低
b=ds1820rd();//高
tvalue=b;
tvalue<<=4;
tvalue=tvalue|a;
tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
// tvalue=tvalue*10+0.5;
return(tvalue);
}
/*温度值显示-----------------------------------------------------------------*/
void ds1820disp()
{
disdata[0]=tvalue%1000/100+0x30; //十位数
disdata[1]=tvalue%100/10+0x30; //个位数
disdata[2]=tvalue%10+0x30; //小数位
// if(disdata[0]==0x30)
// { disdata[0]=0x20; }//如果十位为0,不显示
set1616pic(5,3,0,1); //显示"温度计图标"
write_com(0x30);
write_com(0x06);
write_com(0x8d); //在液晶上显示温度起始位置
write_data(disdata[0]); //显示十位
write_data(disdata[1]); //显示个位
write_data(0x2e); //显示小数点
write_data(disdata[2]); //显示小数位
// set1616pic(8,3,0,0); //在第8列第4行不反白的°C图标
lcm_w_word("℃");
}
/*---------------------------------------------------------------------------*/
#endif
复制代码
作者:
suyijiang
时间:
2015-10-20 10:28
闹铃头文件
#ifndef __nongli_H__
#define __nongli_H__
#define uchar unsigned char
#define uint unsigned int
#include <intrins.h>
/*---------------------------------公历转换阴历年份数据表--------------------------------*/
static uchar code year_code[]=
{
0x04,0xAe,0x53, //1901 0
0x0A,0x57,0x48, //1902 3
0x55,0x26,0xBd, //1903 6
0x0d,0x26,0x50, //1904 9
0x0d,0x95,0x44, //1905 12
0x46,0xAA,0xB9, //1906 15
0x05,0x6A,0x4d, //1907 18
0x09,0xAd,0x42, //1908 21
0x24,0xAe,0xB6, //1909
0x04,0xAe,0x4A, //1910
0x6A,0x4d,0xBe, //1911
0x0A,0x4d,0x52, //1912
0x0d,0x25,0x46, //1913
0x5d,0x52,0xBA, //1914
0x0B,0x54,0x4e, //1915
0x0d,0x6A,0x43, //1916
0x29,0x6d,0x37, //1917
0x09,0x5B,0x4B, //1918
0x74,0x9B,0xC1, //1919
0x04,0x97,0x54, //1920
0x0A,0x4B,0x48, //1921
0x5B,0x25,0xBC, //1922
0x06,0xA5,0x50, //1923
0x06,0xd4,0x45, //1924
0x4A,0xdA,0xB8, //1925
0x02,0xB6,0x4d, //1926
0x09,0x57,0x42, //1927
0x24,0x97,0xB7, //1928
0x04,0x97,0x4A, //1929
0x66,0x4B,0x3e, //1930
0x0d,0x4A,0x51, //1931
0x0e,0xA5,0x46, //1932
0x56,0xd4,0xBA, //1933
0x05,0xAd,0x4e, //1934
0x02,0xB6,0x44, //1935
0x39,0x37,0x38, //1936
0x09,0x2e,0x4B, //1937
0x7C,0x96,0xBf, //1938
0x0C,0x95,0x53, //1939
0x0d,0x4A,0x48, //1940
0x6d,0xA5,0x3B, //1941
0x0B,0x55,0x4f, //1942
0x05,0x6A,0x45, //1943
0x4A,0xAd,0xB9, //1944
0x02,0x5d,0x4d, //1945
0x09,0x2d,0x42, //1946
0x2C,0x95,0xB6, //1947
0x0A,0x95,0x4A, //1948
0x7B,0x4A,0xBd, //1949
0x06,0xCA,0x51, //1950
0x0B,0x55,0x46, //1951
0x55,0x5A,0xBB, //1952
0x04,0xdA,0x4e, //1953
0x0A,0x5B,0x43, //1954
0x35,0x2B,0xB8, //1955
0x05,0x2B,0x4C, //1956
0x8A,0x95,0x3f, //1957
0x0e,0x95,0x52, //1958
0x06,0xAA,0x48, //1959
0x7A,0xd5,0x3C, //1960
0x0A,0xB5,0x4f, //1961
0x04,0xB6,0x45, //1962
0x4A,0x57,0x39, //1963
0x0A,0x57,0x4d, //1964
0x05,0x26,0x42, //1965
0x3e,0x93,0x35, //1966
0x0d,0x95,0x49, //1967
0x75,0xAA,0xBe, //1968
0x05,0x6A,0x51, //1969
0x09,0x6d,0x46, //1970
0x54,0xAe,0xBB, //1971
0x04,0xAd,0x4f, //1972
0x0A,0x4d,0x43, //1973
0x4d,0x26,0xB7, //1974
0x0d,0x25,0x4B, //1975
0x8d,0x52,0xBf, //1976
0x0B,0x54,0x52, //1977
0x0B,0x6A,0x47, //1978
0x69,0x6d,0x3C, //1979
0x09,0x5B,0x50, //1980
0x04,0x9B,0x45, //1981
0x4A,0x4B,0xB9, //1982
0x0A,0x4B,0x4d, //1983
0xAB,0x25,0xC2, //1984
0x06,0xA5,0x54, //1985
0x06,0xd4,0x49, //1986
0x6A,0xdA,0x3d, //1987
0x0A,0xB6,0x51, //1988
0x09,0x37,0x46, //1989
0x54,0x97,0xBB, //1990
0x04,0x97,0x4f, //1991
0x06,0x4B,0x44, //1992
0x36,0xA5,0x37, //1993
0x0e,0xA5,0x4A, //1994
0x86,0xB2,0xBf, //1995
0x05,0xAC,0x53, //1996
0x0A,0xB6,0x47, //1997
0x59,0x36,0xBC, //1998
0x09,0x2e,0x50, //1999 294
0x0C,0x96,0x45, //2000 297
0x4d,0x4A,0xB8, //2001
0x0d,0x4A,0x4C, //2002
0x0d,0xA5,0x41, //2003
0x25,0xAA,0xB6, //2004
0x05,0x6A,0x49, //2005
0x7A,0xAd,0xBd, //2006
0x02,0x5d,0x52, //2007
0x09,0x2d,0x47, //2008
0x5C,0x95,0xBA, //2009
0x0A,0x95,0x4e, //2010
0x0B,0x4A,0x43, //2011
0x4B,0x55,0x37, //2012
0x0A,0xd5,0x4A, //2013
0x95,0x5A,0xBf, //2014
0x04,0xBA,0x53, //2015
0x0A,0x5B,0x48, //2016
0x65,0x2B,0xBC, //2017
0x05,0x2B,0x50, //2018
0x0A,0x93,0x45, //2019
0x47,0x4A,0xB9, //2020
0x06,0xAA,0x4C, //2021
0x0A,0xd5,0x41, //2022
0x24,0xdA,0xB6, //2023
0x04,0xB6,0x4A, //2024
0x69,0x57,0x3d, //2025
0x0A,0x4e,0x51, //2026
0x0d,0x26,0x46, //2027
0x5e,0x93,0x3A, //2028
0x0d,0x53,0x4d, //2029
0x05,0xAA,0x43, //2030
0x36,0xB5,0x37, //2031
0x09,0x6d,0x4B, //2032
0xB4,0xAe,0xBf, //2033
0x04,0xAd,0x53, //2034
0x0A,0x4d,0x48, //2035
0x6d,0x25,0xBC, //2036
0x0d,0x25,0x4f, //2037
0x0d,0x52,0x44, //2038
0x5d,0xAA,0x38, //2039
0x0B,0x5A,0x4C, //2040
0x05,0x6d,0x41, //2041
0x24,0xAd,0xB6, //2042
0x04,0x9B,0x4A, //2043
0x7A,0x4B,0xBe, //2044
0x0A,0x4B,0x51, //2045
0x0A,0xA5,0x46, //2046
0x5B,0x52,0xBA, //2047
0x06,0xd2,0x4e, //2048
0x0A,0xdA,0x42, //2049
0x35,0x5B,0x37, //2050
0x09,0x37,0x4B, //2051
0x84,0x97,0xC1, //2052
0x04,0x97,0x53, //2053
0x06,0x4B,0x48, //2054
0x66,0xA5,0x3C, //2055
0x0e,0xA5,0x4f, //2056
0x06,0xB2,0x44, //2057
0x4A,0xB6,0x38, //2058
0x0A,0xAe,0x4C, //2059
0x09,0x2e,0x42, //2060
0x3C,0x97,0x35, //2061
0x0C,0x96,0x49, //2062
0x7d,0x4A,0xBd, //2063
0x0d,0x4A,0x51, //2064
0x0d,0xA5,0x45, //2065
0x55,0xAA,0xBA, //2066
0x05,0x6A,0x4e, //2067
0x0A,0x6d,0x43, //2068
0x45,0x2e,0xB7, //2069
0x05,0x2d,0x4B, //2070
0x8A,0x95,0xBf, //2071
0x0A,0x95,0x53, //2072
0x0B,0x4A,0x47, //2073
0x6B,0x55,0x3B, //2074
0x0A,0xd5,0x4f, //2075
0x05,0x5A,0x45, //2076
0x4A,0x5d,0x38, //2077
0x0A,0x5B,0x4C, //2078
0x05,0x2B,0x42, //2079
0x3A,0x93,0xB6, //2080
0x06,0x93,0x49, //2081
0x77,0x29,0xBd, //2082
0x06,0xAA,0x51, //2083
0x0A,0xd5,0x46, //2084
0x54,0xdA,0xBA, //2085
0x04,0xB6,0x4e, //2086
0x0A,0x57,0x43, //2087
0x45,0x27,0x38, //2088
0x0d,0x26,0x4A, //2089
0x8e,0x93,0x3e, //2090
0x0d,0x52,0x52, //2091
0x0d,0xAA,0x47, //2092
0x66,0xB5,0x3B, //2093
0x05,0x6d,0x4f, //2094
0x04,0xAe,0x45, //2095
0x4A,0x4e,0xB9, //2096
0x0A,0x4d,0x4C, //2097
0x0d,0x15,0x41, //2098
0x2d,0x92,0xB5, //2099
};
/*-------------------------------------月份数据表----------------------------------------*/
static uchar code day_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};
static unsigned short code day_code2[3]={0x111,0x130,0x14e};
bit c_moon,century;
data uchar year_moon,month_moon,day_moon,week;
/*子函数,用于读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回0------------------*/
static uchar GetMoonDay(uchar month_p,unsigned short table_addr)
{
switch (month_p)
{
case 1:
if((year_code[table_addr]&0x08)==0) return(0);
else return(1);
case 2:
if((year_code[table_addr]&0x04)==0) return(0);
else return(1);
case 3:
if((year_code[table_addr]&0x02)==0) return(0);
else return(1);
case 4:
if((year_code[table_addr]&0x01)==0) return(0);
else return(1);
case 5:
if((year_code[table_addr+1]&0x80)==0) return(0);
else return(1);
case 6:
if((year_code[table_addr+1]&0x40)==0) return(0);
else return(1);
case 7:
if((year_code[table_addr+1]&0x20)==0) return(0);
else return(1);
case 8:
if((year_code[table_addr+1]&0x10)==0) return(0);
else return(1);
case 9:
if((year_code[table_addr+1]&0x08)==0) return(0);
else return(1);
case 10:
if((year_code[table_addr+1]&0x04)==0) return(0);
else return(1);
case 11:
if((year_code[table_addr+1]&0x02)==0) return(0);
else return(1);
case 12:
if((year_code[table_addr+1]&0x01)==0) return(0);
else return(1);
case 13:
if((year_code[table_addr+2]&0x80)==0) return(0);
else return(1);
}
return(0);
}
/*--------------------------------公历转农历函数-----------------------------------------*/
void Conversion(bit c,uchar year,uchar month,uchar day)
{
uchar temp1,temp2,temp3,month_p;
uint temp4,table_addr;
bit flag2,flag_y;
temp1=year/16; //BCD->hex 先把数据转换为十六进制
temp2=year%16;
year=temp1*10+temp2;
temp1=month/16;
temp2=month%16;
month=temp1*10+temp2;
temp1=day/16;
temp2=day%16;
day=temp1*10+temp2;
//定位数据表地址
if(c==0) { table_addr=(year+0x64-1)*0x3; }
else { table_addr=(year-1)*0x3; }
//取当年春节所在的公历月份
temp1=year_code[table_addr+2]&0x60;
temp1=_cror_(temp1,5);
//取当年春节所在的公历日
temp2=year_code[table_addr+2]&0x1f;
//取当年春节所在的公历日完成
//计算当年春年离当年元旦的天数,春节只会在公历1月或2月
if(temp1==0x1) { temp3=temp2-1; }
else { temp3=temp2+0x1f-1; }
// 计算当年春年离当年元旦的天数完成
//计算公历日离当年元旦的天数,为了减少运算,用了两个表
//day_code1[9],day_code2[3]
//如果公历月在九月或前,天数会少于0xff,用表day_code1[9],
//在九月后,天数大于0xff,用表day_code2[3]
//如输入公历日为8月10日,则公历日离元旦天数为day_code1[8-1]+10-1
//如输入公历日为11月10日,则公历日离元旦天数为day_code2[11-10]+10-1
if(month<10) { temp4=day_code1[month-1]+day-1; }
else { temp4=day_code2[month-10]+day-1;}
// if ((month>0x2)&&(year%0x4==0)&&(year!=0)) //此语句造成2000年3月1日—12月31日之间
//计算农历少算一天,应删除判断语句“&&(year!=0)”
if ((month>0x2)&&(year%0x4==0))
temp4+=1; //如果公历月大于2月并且该年的2月为闰月,天数加1
//计算公历日离当年元旦的天数完成
//判断公历日在春节前还是春节后
if (temp4>=temp3)
{
temp4-=temp3; month=0x1;
month_p=0x1; //month_p为月份指向,公历日在春节前或就是春节当日month_p指向首月
flag2=GetMoonDay(month_p,table_addr); //检查该农历月为大小还是小月,大月返回1,小月返回0
flag_y=0;
if(flag2==0)temp1=0x1d; //小月29天
else temp1=0x1e; //大月30天
temp2=year_code[table_addr]&0xf0;
temp2=_cror_(temp2,4); //从数据表中取该年的闰月月份,如为0则该年无闰月
while(temp4>=temp1)
{
temp4-=temp1; month_p+=1;
if(month==temp2)
{
flag_y=~flag_y;
if(flag_y==0)month+=1;
}
else month+=1;
flag2=GetMoonDay(month_p,table_addr);
if(flag2==0)temp1=0x1d;
else temp1=0x1e;
}
day=temp4+1;
}
else
{
temp3-=temp4;
if (year==0x0){year=0x63;c=1;}
else year-=1;
table_addr-=0x3;
month=0xc;
temp2=year_code[table_addr]&0xf0;
temp2=_cror_(temp2,4);
if (temp2==0)month_p=0xc;
else month_p=0xd;
flag_y=0;
flag2=GetMoonDay(month_p,table_addr);
if(flag2==0)temp1=0x1d;
else temp1=0x1e;
while(temp3>temp1)
{
temp3-=temp1;
month_p-=1;
if(flag_y==0)month-=1;
if(month==temp2)flag_y=~flag_y;
flag2=GetMoonDay(month_p,table_addr);
if(flag2==0)temp1=0x1d;
else temp1=0x1e;
}
day=temp1-temp3+1;
}
c_moon=c;
year_moon=year;
month_moon=month;
day_moon=day;
}
/*************************************************************************
函数功能:输入BCD阳历数据,输出BCD星期数据(只允许1901-2099年)
调用函数示例:Conver_week(c_sun,year_sun,month_sun,day_sun)
如:计算2004年10月16日Conversion(0,0x4,0x10,0x16);
*****************************************************************************/
code uchar table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5}; //月修正数据表
/****************************************************************************
算法:日期+年份+所过闰年数+月较正数之和除7 的余数就是星期但如果是在
闰年又不到3 月份上述之和要减一天再除7
星期数为0
*****************************************************************************/
void Conver_week(bit c,uchar year,uchar month,uchar day)
{ //c=0 为21世纪,c=1 为19世纪 输入输出数据均为BCD数据
unsigned char temp1,temp2;
write_com(0x30); write_com(0x06);
temp1=year/16; //BCD->hex 先把数据转换为十六进制
temp2=year%16;
year=temp1*10+temp2;
temp1=month/16;
temp2=month%16;
month=temp1*10+temp2;
temp1=day/16;
temp2=day%16;
day=temp1*10+temp2;
if (c==0){year+=0x64;} //如果为21世纪,年份数加100
temp1=year/0x4; //所过闰年数只算1900年之后的
temp2=year+temp1;
temp2=temp2%0x7; //为节省资源,先进行一次取余,避免数大于0xff,避免使用整型数据
temp2=temp2+day+table_week[month-1];
if (year%0x4==0&&month<3)temp2-=1;
week=temp2%0x7;
}
#endif
复制代码
作者:
suyijiang
时间:
2015-10-20 10:30
显示时间和图形头文件
#ifndef __displaytime_H__
#define __displaytime_H__
#include "nongli.h"
#include "zk.h"
#include "bell.h"
#include "LCD12864.h"
#define uchar unsigned char
#define uint unsigned int
uchar sec,min,hour,day,date,month,year,week,day_moon;
uchar sel,dd,mo,yy;
/*显示年、月、日、星期-------------------------------------------------------*/
void displaydate(void)
{
write_com(0x30);
write_com(0x06);
/*往液晶屏填写 年 数据-------------------------------------------*/
lcm_w_test(0,0x80);
lcm_w_word("20");
year=read_clock(0x8d);//调用1302时钟数据中的年数据,从地址0x8d中
lcm_w_test(1,(year/16+0x30));
lcm_w_test(1,(year%16+0x30));
// lcm_w_word("年");
/*往液晶屏填写 月 数据-------------------------------------------*/
month=read_clock(0x89);//调用1302时钟数据中的月数据,从地址0x89中
lcm_w_word("-");
/*
if(month/10 != 0){write_data((month/10)+0x30);}
else{write_data(0x20);}//十位消隐
*/
lcm_w_test(1,(month/16+0x30));
lcm_w_test(1,((month%16)+0x30));
// lcm_w_word("月");
/*往液晶屏填写 日 数据-------------------------------------------*/
date=read_clock(0x87);//从1302芯片中读取日数据,从地址0x87中
lcm_w_word("-");
/*
if(date/10 != 0){write_data((date/10)+0x30);}
else{write_data(0x20);}//十位消隐
*/
lcm_w_test(1,(date/16+0x30));
lcm_w_test(1,(date%16+0x30));
// lcm_w_word("日");
}
/*往液晶屏填写 星期 数据-----------------------------------------*/
void displayxq(void){
dd = read_clock(0x87);//日
mo = read_clock(0x89);//月
yy = read_clock(0x8d);//年
Conver_week(0,yy,mo,dd);//调用公历换算星期子函数
sel=week;//week是公历转换星期子函数的运行结果,结果为0-6,0是星期日
lcm_w_test(0,0x86);//显示位置
if(sel==0) {lcm_w_word("日");} //0=星期日
if(sel==6) {lcm_w_word("六");} //
if(sel==5) {lcm_w_word("五");} //
if(sel==4) {lcm_w_word("四");} //
// if(sel==3) {lcm_w_word("三");}//经调试发现液晶屏不认这一句,只好用下一句显示 三 。需要打补丁才能正确显示。
if(sel==3) {lcm_w_test(1,0xc8);lcm_w_test(1,0xfd);} //此指令等于lcm_w_word("三"); 因为“三”的内码失效。
if(sel==2) {lcm_w_word("二");} //
if(sel==1) {lcm_w_word("一");} //星期一
lcm_w_test(0,0x85);
lcm_w_word("周");//调用字符显示子函数,显示 "周"
}
/*需要绘图显示的:时、分、秒--------------------------------------------------*/
void displaytime(void)
{
/*往液晶屏填写 小时 数据-----------------------------------------*/
if(read_clock(0x85)!=hour)//更新小时数据,然后整点报时
{//也可根据个人需要设定在那个时间段进行报时,只需加条if语句便可
hour = read_clock(0x85);//读取DS1302的小时
BEEP=0;DelayM(160);BEEP=1; //整点报时
}
write_com(0x88);
write_data((hour/16)+0x30);
write_data((hour%16)+0x30);
lcm_w_word(":");
/*往液晶屏填写 分钟 数据-----------------------------------------*/
min = read_clock(0x83); //读取DS1302的 分
write_data((min/16)+0x30);
write_data((min%16)+0x30);
lcm_w_word(":");
/*往液晶屏填写 秒钟 数据-----------------------------------------*/
sec= read_clock(0x81); //读取DS1302的 秒
write_data((sec/16)+0x30);
write_data((sec%16)+0x30);
}
/*显示农历日期---------------------------------------------------------------*/
void displaynl(void)
{
Conversion(century,year,month,date); //公历转农历
write_com(0x30); write_com(0x06); write_com(0x90);
if (month_moon==1) {lcm_w_word("正");}
if (month_moon==2) {lcm_w_word("二");}
// if (month_moon==2) {lcm_w_word("三");}
if (month_moon==3) {lcm_w_test(1,0xc8);lcm_w_test(1,0xfd);}
if (month_moon==4) {lcm_w_word("四");}
if (month_moon==5) {lcm_w_word("五");}
if (month_moon==6) {lcm_w_word("六");}
if (month_moon==7) {lcm_w_word("七");}
if (month_moon==8) {lcm_w_word("八");}
if (month_moon==9) {lcm_w_word("九");}
if (month_moon==10){lcm_w_word("十");}
if (month_moon==11){lcm_w_word("冬");}
if (month_moon==12){lcm_w_word("腊");}
lcm_w_word("月");
if (day_moon==1) {lcm_w_word("初一");}
if (day_moon==2) {lcm_w_word("初二");}
if (day_moon==3) {lcm_w_word("初");lcm_w_test(1,0xc8);lcm_w_test(1,0xfd);} //“三”的代码
if (day_moon==4) {lcm_w_word("初四");}
if (day_moon==5) {lcm_w_word("初五");}
if (day_moon==6) {lcm_w_word("初六");}
if (day_moon==7) {lcm_w_word("初七");}
if (day_moon==8) {lcm_w_word("初八");}
if (day_moon==9) {lcm_w_word("初九");}
if (day_moon==10) {lcm_w_word("初十");}
if (day_moon==11) {lcm_w_word("十一");}
if (day_moon==12) {lcm_w_word("十二");}
if (day_moon==13) {lcm_w_word("十");lcm_w_test(1,0xc8);lcm_w_test(1,0xfd);} //十三
if (day_moon==14) {lcm_w_word("十四");}
if (day_moon==15) {lcm_w_word("十五");}
if (day_moon==16) {lcm_w_word("十六");}
if (day_moon==17) {lcm_w_word("十七");}
if (day_moon==18) {lcm_w_word("十八");}
if (day_moon==19) {lcm_w_word("十九");}
if (day_moon==20) {lcm_w_word("二十");}
if (day_moon==21) {lcm_w_word("廿一");}
if (day_moon==22) {lcm_w_word("廿二");}
if (day_moon==23) {lcm_w_word("廿");lcm_w_test(1,0xc8);lcm_w_test(1,0xfd);} //廿三
if (day_moon==24) {lcm_w_word("廿四");}
if (day_moon==25) {lcm_w_word("廿五");}
if (day_moon==26) {lcm_w_word("廿六");}
if (day_moon==27) {lcm_w_word("廿七");}
if (day_moon==28) {lcm_w_word("廿八");}
if (day_moon==29) {lcm_w_word("廿九");}
if (day_moon==30) {lcm_w_test(1,0xc8);lcm_w_test(1,0xfd);lcm_w_word("十");} //三十
}
/****************************************************************************/
void displayJr(void) //节日数据库
{
write_com(0x98);
//**********************1月份**********************************************
if ( mo == 0x01 && dd == 0x01 ){ lcm_w_word("Happy New Year!!"); }//1月
if ( mo == 0x01 && dd == 0x05 ){ lcm_w_word("二十四节气:小寒"); }
if ( mo == 0x01 && dd == 0x20 ){ lcm_w_word("二十四节气:大寒"); }
if (month_moon== 1 && day_moon == 1 ){ lcm_w_word("※※春节快乐※※"); }//阴历日期填阴历月和日
if (month_moon== 1 && day_moon == 15 ){ lcm_w_word("※元宵节快乐!!※"); }
//************************2月份*****************************************************
if ( mo == 0x02 && dd == 0x03 ){ lcm_w_word("二十四节气:立春"); }//2月
// if ( mo == 0x02 && dd == 0x13 ){ lcm_w_word(" 明天情人节了 "); }
if ( mo == 0x02 && dd == 0x14 ){ lcm_w_word("◆情人节快乐!!◆"); }//阳历日期填实际的阳历月和日
// if ( mo == 0x02 && dd == 0x20 ){ lcm_w_word("二十四节气:雨水"); }//阳历日期填实际的阳历月和日
//**************************3月份***************************************************
// if ( mo == 0x03 && dd == 0x05 ){ lcm_w_word("二十四节气:惊蛰"); }
if ( mo == 0x03 && dd == 0x03 ){ lcm_w_word("二十四节气:春分"); }
if ( mo == 0x03 && dd == 0x08 ){ lcm_w_word("☆三·八妇女节☆"); }
if ( mo == 0x03 && dd == 0x12 ){ lcm_w_word("┣今天植树节!!┫"); }
if ( mo == 0x03 && dd == 0x15 ){ lcm_w_word("⊙消费者权益日⊙"); }
// if ( mo == 0x03 && dd == 0x31 ){ lcm_w_word(" 明天是愚人节 "); }
if ( mo == 0x04 && dd == 0x01 ){ lcm_w_word("愚人节◆小心上当"); }//3
//****************************4月份*************************************************
if ( mo == 0x04 && dd == 0x04 ){ lcm_w_word("二十四节气:清明"); }
// if ( mo == 0x04 && dd == 0x08 ){ lcm_w_word("今天是复活节"); }
// if ( mo == 0x04 && dd == 0x19 ){ lcm_w_word("二十四节气:谷雨"); }
if (month_moon== 5 && day_moon == 5 ){ lcm_w_word("◆今天乃端午节◆"); }
//*****************************5月份************************************************
// if ( mo == 0x04 && dd == 0x30 ){ lcm_w_word("明天是五一劳动节"); }//5
if ( mo == 0x05 && dd == 0x01 ){ lcm_w_word("△五一劳动节!!△"); }//5
if ( mo == 0x05 && dd == 0x04 ){ lcm_w_word("≌五四青年节!!≌"); }
if ( mo == 0x05 && dd == 0x05 ){ lcm_w_word("二十四节气:立夏"); }
// if ( mo == 0x05 && dd == 0x05 ){ lcm_w_word("近日注意母亲节 "); }
if ( mo == 0x05 && dd == 0x10 ){ lcm_w_word("★今天是母亲节★"); }
// if ( mo == 0x05 && dd == 0x20 ){ lcm_w_word("二十四节气:小满"); }
//****************************6月份*************************************************
if ( mo == 0x06 && dd == 0x01 ){ lcm_w_word("※今天是儿童节※"); }//6
if ( mo == 0x06 && dd == 0x05 ){ lcm_w_word("二十四节气:芒种"); }
// if ( mo == 0x06 && dd == 0x13 ){ lcm_w_word("近日注意父亲节 "); }
// if ( mo == 0x06 && dd == 0x15 ){ lcm_w_word("近日注意父亲节 "); }
if ( mo == 0x06 && dd == 0x21 ){ lcm_w_word("△今天是父亲节△"); }
if (month_moon== 7 && day_moon == 7 ){ lcm_w_word("七夕--中国情人节"); }
//****************************7月份*************************************************
// if ( mo == 0x07 && dd == 0x06 ){ lcm_w_word("二十四节气:小暑"); }
// if ( mo == 0x07 && dd == 0x07 ){ lcm_w_word("抗日战争记念日 "); }
// if ( mo == 0x07 && dd == 0x22 ){ lcm_w_word("二十四节气:大暑"); }
//****************************8月份*************************************************
if (month_moon== 8 && day_moon == 15 ){ lcm_w_word("⊙中秋节快乐!!⊙"); }
if ( mo == 0x08 && dd == 0x01 ){ lcm_w_word("〓八一建军节〓=="); }//8
if ( mo == 0x08 && dd == 0x07 ){ lcm_w_word("二十四节气:立秋"); }
// if ( mo == 0x08 && dd == 0x08 ){ lcm_w_word(" 中国父亲节 "); }
// if ( mo == 0x08 && dd == 0x15 ){ lcm_w_word("抗战胜利记念日 "); }
// if ( mo == 0x08 && dd == 0x22 ){ lcm_w_word("二十四节气:处暑"); }
if (month_moon== 9 && day_moon == 9 ){ lcm_w_word("▲今日重阳节!!▲"); }
//*******************************9月份**********************************************
// if ( mo == 0x09 && dd == 0x07 ){ lcm_w_word("二十四节气:白露"); }//9
// if ( mo == 0x09 && dd == 0x09 ){ lcm_w_word(" 明天是教师节 "); }//9
if ( mo == 0x09 && dd == 0x10 ){ lcm_w_word(">>今天是教师节<<"); }//9
// if ( mo == 0x09 && dd == 0x18 ){ lcm_w_word("九·一八事变记念"); }
if ( mo == 0x09 && dd == 0x22 ){ lcm_w_word("二十四节气:秋分"); }//9
//******************************10月份***********************************************
if ( mo == 0x10 && dd == 0x01 ){ lcm_w_word("※国庆节到了!!※"); }//10
// if ( mo == 0x10 && dd == 0x08 ){ lcm_w_word("二十四节气:寒露"); }
// if ( mo == 0x10 && dd == 0x12 ){ lcm_w_word("明天国际教师节 "); }
// if ( mo == 0x10 && dd == 0x13 ){ lcm_w_word(" 国际教师节 "); }
if ( mo == 0x10 && dd == 0x23 ){ lcm_w_word("二十四节气:霜降"); }
//********************************11月份*********************************************
if ( mo == 0x11 && dd == 0x07 ){ lcm_w_word("二十四节气:立冬"); }//11
// if ( mo == 0x11 && dd == 0x22 ){ lcm_w_word("二十四节气:小雪"); }
//*********************************12月份********************************************
if (month_moon== 12 && day_moon == 8 ){ lcm_w_word("★今天是腊八节★"); }
if (month_moon== 12 && day_moon == 15 ) { lcm_w_word("※今天乃小年也※"); }
// if (month_moon== 12 && day_moon == 29 ){ lcm_w_word(" 腊月二十九 "); }
if (month_moon== 12 && day_moon == 30 ){ lcm_w_word("大年三十(*^O^*)!"); }
// if ( mo == 0x12 && dd == 0x13 ){ lcm_w_word("南京大屠杀纪念日"); }//12
// if ( mo == 0x12 && dd == 0x07 ){ lcm_w_word("二十四节气:大雪"); }
if ( mo == 0x12 && dd == 0x22 ){ lcm_w_word("二十四节气:冬至"); }
// if ( mo == 0x12 && dd == 0x23 ){ lcm_w_word(" 明晚平安夜 "); }
if ( mo == 0x12 && dd == 0x24 ){ lcm_w_word("※※平安夜!!※※"); }
if ( mo == 0x12 && dd == 0x25 ){ lcm_w_word("▲▲圣诞快乐▲▲"); }
// if ( mo == 0x12 && dd == 0x31 ){ lcm_w_word(" 明日新年 "); }
//****************************生日(阴历)*********************************
if (month_moon== 10 && day_moon == 12 ){ lcm_w_word("☆今天爷爷生日☆"); }
if (month_moon== 10 && day_moon == 21 ){ lcm_w_word("☆今天奶奶生日☆"); }
if (month_moon== 2 && day_moon == 12 ){ lcm_w_word("★今天妈妈生日★"); }//爸爸生日
if (month_moon== 8 && day_moon == 29 ){ lcm_w_word("★今天爸爸生日★"); }
if (month_moon== 5 && day_moon == 12 ){ lcm_w_word("※今天妹妹生日※"); }//妹妹生日
if (month_moon== 4 && day_moon == 14 ){ lcm_w_word("〓今天我的生日〓"); }//杨慧生日
if (month_moon== 3 && day_moon == 19 ){ lcm_w_word("〓今天杨慧生日〓"); }
//***************************非节日********************************************
else{
if ( hour >= 0x00 && hour <= 0x23 ){ lcm_w_word("★I always O U★");}
/* if ( hour >= 0x04 && hour < 0x06 ) { lcm_w_word("★★★凌晨▲▲▲"); }
if ( hour >= 0x06 && hour < 0x08 ) { lcm_w_word("☆☆☆早晨△△△"); }
if ( hour >= 0x08 && hour < 0x12 ) { lcm_w_word("△△△上午▲▲▲"); }
if ( hour == 0x12) { lcm_w_word("⊙⊙⊙中午⊙⊙⊙"); }
if ( hour >= 0x13 && hour < 0x18 ) { lcm_w_word("▲▲▲下午△△△"); }
if ( hour >= 0x18 && hour < 0x22 ) { lcm_w_word("★★★晚上☆☆☆"); }
if ( hour >= 0x22 && hour <= 0x23) { lcm_w_word("★★★夜里★★★");}
if ( hour >= 0x00 && hour < 0x04) { lcm_w_word("◆◆◆深夜◆◆◆"); }
*/
}
}
/*显示欢迎信息---------------------------------------------------------------
void welcome(void)
{
write_com(0x80); lcm_w_word("〓〓∧∧∧∧〓〓");
write_com(0x90); lcm_w_word("Believe yourself");
write_com(0x88); lcm_w_word("Don't give up^_^");
write_com(0x98); lcm_w_word("〓〓∨∨∨∨〓〓");
}
*/
void welcome0(void)
{
write_com(0x80); lcm_w_word("〓黄历电子时钟〓");
write_com(0x90); lcm_w_word("<Welcome to use>");
write_com(0x88); lcm_w_word("Smile 2 our life"); //Smile to our life
write_com(0x98); lcm_w_word("〓★2-Feb-11★〓");
//⊙⊙⊙⊙⊙⊙⊙⊙ ≌≌≌≌≌≌≌≌ ※※※※※※※※
//╋╋╋╋╋╋╋╋ 〓〓〓〓〓〓〓〓 ◆◆◆◆◆◆◆◆ 卐卐卐卐卐卐卐卐
//◎◎◎◎◎◎◎◎ ☆☆☆☆☆☆☆☆ ★★★★★★★★ ╳╳╳╳╳╳╳╳
//┣┣┣┣┫┫┫┫ ┳┳┳┳┳┳┳┳ ┻┻┻┻┻┻┻┻ ╲╱╲╱╲╱╲╱
//╱╲╱╲╱╲╱╲
//△△△△△△△△ ◤◤◤◤◥◥◥◥ ◣◣◣◣◢◢◢◢ 卍卍卍卍卍卍卍卍
//〇〇〇〇〇〇〇〇 △▽△▽△▽△▽
//
}
/*---------------------------------------------------------------------------*/
#endif
复制代码
作者:
suyijiang
时间:
2015-10-20 10:31
蜂鸣器头文件
#ifndef _BELL_H
#define _BELL_H
#include "delay.h"
#define uchar unsigned char
#define uint unsigned int
sbit BEEP=P0^3;
/***************************************************/
void beep()
{
BEEP=0;
DelayM(300);
BEEP=1;
DelayM(300);
}
/********************报警音***********************************************/
void alarmbeep()
{/*********报警声1*************************/
/* uchar j;
for(j=200;j>0;j--)
{
BEEP=~BEEP;
delay500(); //延时500us
}
for(j=200;j>0;j--)
{
BEEP=~BEEP;
delay500();
// delay500();
}
*/
/*********报警声2************************
BEEP=0;
delay500();//延时500us
DelayM(150);
BEEP=1;
DelayM(150); //产生方波
BEEP=0;
*/
/**************报警声3************************/
uchar a;//定义变量用于发声的长度设置
for(a=30;a>0;a--)
{//第一个声音的长度
BEEP = ~BEEP;//取反扬声器驱动口,以产生音频
delay500();//延时500us
// DelayM(200);
DelayM(700);//音调设置延时
}
/* for(a=5;a>0;a--){//同上
BEEP = ~BEEP;
DelayM(80);//
}
for(a=5;a>0;a--){//同上
BEEP = ~BEEP;
DelayM(60);//
}*/
BEEP = 1;//音乐结束后扬声器拉高关闭
}
#endif
复制代码
作者:
suyijiang
时间:
2015-10-20 10:33
红外头文件
#ifndef _HW_H_
#define _HW_H_
#include "bell.h"
#include "delay.h"
#define uchar unsigned char
#define uint unsigned int
uchar key0,key1,key2,key3,key4,key5,key6,key7,key8,key9;
uchar key_add,key_minish,key_manue,key_ok,key_up,key_down,key_alarm,key_voioff,key_voion;
bit ala_flag=0; //闹钟使能标志位
sbit IRIN = P3^2; //红外接收器数据线
sbit K5 = P2^4; //按键K5-闹钟的打开与关闭
uchar IRCOM[]={0x00,0x00,0x00,0x00,0x10,0x10};
/***************************************************************
外部中断0响应函数,完成对红外遥控的解码
-------------------------协议--------------------------
----开始拉低9ms,接着是一个4.5ms的高脉冲,通知器件开始传送数据了
----接着是26位前导脉冲,用于识别该型号的摇控。
----然后是发送8位数据的原码,接着又发送8位数据的反码.
----最后是一个长脉冲,和开始位一样,拉低9ms和一个4.5ms脉冲表示结束。
----每个按键不同这处只在于那8位数据的原码和反码,因些只须要识别
----8位原码就可以识别按键了
****************************************************************/
void IR_IN() interrupt 0 //using 0
{
uchar j,k,N=0;
EX0 = 0;
delayA(15);
if (IRIN==1)
{ EX0 =1;
return;
}
//确认IR信号出现
while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
{delayA(1);}
for (j=0;j<4;j++) //收集四组数据
{
for (k=0;k<8;k++) //每组数据有8位
{
while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
{delayA(1);}//
while (!IRIN) //等 IR 变为高电平
{delayA(1);} //
while (IRIN) //计算IR高电平时长
{
delayA(1);
N++;
if (N>=30)
{ EX0=1;
return;} //0.14ms计数过长自动离开。
} //高电平计数完毕
IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“
if (N>=8)
{IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1”
N=0;
}//end for k
}//end for j
if (IRCOM[2]!=~IRCOM[3]) //接收时间是否正确
{
EX0=1;
return;
}
// EX0=1;
/*================红外编码处理====================*/
switch(IRCOM[2])
{
/* case 0x00: key0=1; break; //1
case 0x01: key1=1; break; //2
case 0x02: key2=1; break; //3
case 0x03: key3=1; break; //4
case 0x04: key4=1; break; //5
case 0x05: key5=1; break; //6
case 0x06: key6=1; break; //7
case 0x07: key7=1; break; //8
case 0x08: key8=1; break; //9
case 0x09: key9=1; break; //0
*/
/* case 0x13: key_minish=1; break; //-
case 0x12: key_add=1; break; //+
case 0x18: key_manue=1; break; //菜单
case 0x19: key_ok=1; break; //OK
case 0x15: key_alarm=1; break; //关闹钟的开与关*/
case 0x07: key_minish=1; break; //-
case 0x05: key_add=1; break; //+
case 0x06: key_manue=1; break; //菜单
case 0x02: key_ok=1; break; //OK
case 0x0a: key_alarm=1; break; //关闹钟的开与关
/*
case 0x18: key_up=1; break; //上
case 0x19: key_down=1; break; //下
case 0x15: key_voioff=1; break; //静音
case 0x17: key_voion=1; break; //声音
*/
default: break; //别的键按下
}
if(K5==0||key_alarm==1)//闹钟的开与关的设置标志位
{
DelayM(20);
if(K5==0||key_alarm==1)
{ beep();
while(!K5);//松手检测
key_alarm=0;
ala_flag=~ala_flag;
}
while(!K5);//松手检测
key_alarm=0;
}
EX0 = 1; //开中断
}
#endif
复制代码
作者:
suyijiang
时间:
2015-10-20 10:34
源码都有啦,希望成功。IO口自己定义。时钟晶振12M
作者:
robotStudio
时间:
2015-10-20 14:03
好帖啊!!!
作者:
suyijiang
时间:
2015-10-20 15:59
最近在做12864作显示的万年历,做出来啦所有发出帖子供大家使用。
作者:
XOX
时间:
2015-10-23 14:02
look{:soso_e103:}
作者:
qlffl703
时间:
2016-2-4 09:36
支持一下 支持一下
欢迎光临 小R科技-WIFI机器人网·机器人创意工作室 (http://www.wifi-robots.com/)
Powered by Discuz! X3.4