小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 11190|回复: 15

12864驱动板

[复制链接]
发表于 2015-10-15 14:38:36 | 显示全部楼层 |阅读模式
STC12C5608AD单片机驱动12864

驱动板

驱动板
回复

使用道具 举报

发表于 2015-10-18 12:25:19 | 显示全部楼层
把代码贴出来那就更好啦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-20 10:23:02 | 显示全部楼层
12864显示万年历
  1. /*-------------------------------头文件---------------------------------------*/
  2. #include <reg52.h>
  3. #include <intrins.h>
  4. #include "LCD12864.h"
  5. #include "DS1302.h"
  6. #include "DS18B20.h"
  7. #include "nongli.h"
  8. #include "displaytime.h"
  9. #include "zk.h"
  10. #include "bell.h"
  11. #include "HW.H"
  12. #include "delay.h"

  13. #define uint  unsigned int
  14. #define uchar unsigned char

  15. /*--------------------定义按键-----------------------------------------------*/
  16. sbit K1  = P2^0; //K1-设置
  17. sbit K2  = P2^1; //K2-确认、返回
  18. sbit K3  = P2^2; //K3-加
  19. sbit K4  = P2^3; //K4-减
  20. //K5=P1^4,K5-控制闹钟的打开与关闭,在"hw.h"中定义

  21. /*---------------------函数声明------------------------------*/             
  22. void ds_w0(void);
  23. void ds_w(void);
  24. void Conver_week(bit c,uchar year,uchar month,uchar day);
  25. /*-----------------------------定义全局变量------------------------------*/
  26. bit  w=0;    //调时标志位

  27. unsigned char yy,mo,dd,xq,hh,mm,ss,month_moon,day_moon,week,tiangan,dizhi,moontemp1,moontemp2;//定义时间映射全局变量(专用寄存器)
  28. signed char address,item,item0,max,mini;
  29. unsigned char clk_ala[2]={0x00,0x00};//闹钟数据存放初,始值为00:00
  30. unsigned char hour=0,minute=0,time=0;//用于闹铃的设置



  31. /*-----------------------------日期、时间设置函数-----------------------------*/

  32. void tiaozheng(void){
  33.         yy = read_clock(0x8d);//调用1302时钟数据中的年数据,从地址0x8d中
  34.         mo = read_clock(0x89);//调用1302时钟数据中的月数据,从地址0x89中
  35.         dd = read_clock(0x87);//从1302芯片中读取日数据,从地址0x87中
  36.         week = read_clock(0x8b);//从1302芯片中读取星期数据,从地址0x8b中


  37.         //----------------------------------
  38.         lcm_w_test(0,0x80);
  39.         lcm_w_word("20");//显示内容字符20
  40.         lcm_w_test(1,(yy/16)+0x30);//函数参数1,代表本行写数据,YY/16+0X30得出年十位数字的显示码地址,送显示       
  41.         lcm_w_test(1,yy%16+0x30);//函数
  42.         lcm_w_word("-");
  43.         //----------------------------------
  44.         lcm_w_test(1,(mo/16)+0x30);
  45.         lcm_w_test(1,mo%16+0x30);//与16取余数,得到月份的个位数,加0x30得到该数字的液晶内定显示码送显示
  46.         lcm_w_word("-");//调用字符显示函数,显示文字 月
  47.         //----------------------------------
  48. /*
  49.         lcm_w_test(0,0x88);//第一个参数0,表示本行写入LCM的是指令,指定显示位置88H(第三行左端)
  50.         lcm_w_word("星期");//调用字符显示函数,显示文字 星期
  51.         lcm_w_test(1,mo%16+0x30);//与16取余数,得到月份的个位数,加0x30得到该数字的液晶内定显示码送显示
  52. */
  53.         //----------------------------------
  54.         lcm_w_test(1,(dd/16)+0x30);
  55.         lcm_w_test(1,dd%16+0x30);//第一个1参数,表示本行写数据,日数据与16取余得个位数,加0x30得到显示码
  56. //        lcm_w_word("日");//显示字符 日
  57.         //----------------------------------
  58.         if(read_clock(0x85) != hh)
  59.         {//如果程序中的小时与1302芯片中的不同,
  60.                 hh = read_clock(0x85);//刷新程序中的小时数据
  61.         }
  62.         lcm_w_test(0,0x88);//第一个参数0,表示本行写入LCM的是指令,指定显示位置88H(第三行左端)
  63.         lcm_w_test(1,(hh/16)+0x30);//显示十位
  64.         lcm_w_test(1,hh%16+0x30);//显示个位
  65.         lcm_w_word(":");
  66.         //----------------------------------
  67.         if(read_clock(0x83) != mm)
  68.         {//如果1302芯片中的分钟数据与程序中的分钟变量不相等               
  69.                 mm = read_clock(0x83);//刷新程序中的分钟数据
  70.         }
  71.         lcm_w_test(1,(mm/16)+0x30);//向液晶写数据,显示分钟的十位数
  72.         lcm_w_test(1,mm%16+0x30);//向液晶写数据,显示分钟的个位数
  73.         lcm_w_word(":");
  74.         //----------------------------------
  75.         if(read_clock(0x81) != ss)
  76.         {//如果1302芯片中的分钟数据与程序中的秒钟变量不相等(0x81为读秒数据0x80为写秒数据)               
  77.                 ss = read_clock(0x81);//刷新程序中的秒钟数据
  78.         }
  79.         lcm_w_test(1,(ss/16)+0x30);//向液晶写数据,显示分钟的十位数
  80.         lcm_w_test(1,ss%16+0x30);//向液晶写数据,显示分钟的个位数

  81.         displayxq();         //显示星期

  82.         //=========显示闹钟的设置时间===================       
  83.        
  84.         hour=clk_ala[0];        //取出上一次的闹钟小时值
  85.         minute=clk_ala[1];         //取出上一次的闹钟分钟值
  86.                
  87.         lcm_w_test(0,0x95);
  88.         //----------------------------       
  89.         lcm_w_test(1,(hour/10)+0x30);//显示小时十位
  90.         lcm_w_test(1,(hour%10)+0x30);//显示小时个位
  91.         //----------------------------
  92.           lcm_w_word(":");
  93.         //----------------------------
  94.         lcm_w_test(1,(minute/10)+0x30);//显示分钟的十位
  95.         lcm_w_test(1,(minute%10)+0x30);//显示分钟的个位
  96. }
  97. /////////////////////////////////////////////////////////////////////////

  98. /*****************************************************************************/
  99. //被调数据加一或减一,并检查数据范围,写入1302指定地址保存
  100. void ds_w(void)
  101. {
  102.         item0=time;
  103.         item=((read_clock(address+1))/16)*10 + (read_clock(address+1))%16;//时间的调整
  104.         if(K3 == 0||key_add==1){//如果按动上调键
  105.          item++;//数加 1  
  106.         }
  107.         if(K4 == 0||key_minish==1){//如果按动下调键
  108.            item--;//数减 1
  109.         }
  110.         if(item>max)  item=mini;//查看数值是否在有效范围之内   
  111.         if(item<mini) item=max;//如果数值小于最小值,则自动等于最大值           
  112.         write_clock(0x8e,0x00);//允许写1302芯片操作
  113.         write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302
  114.         write_clock(0x8e,0x80);//写保护,禁止写操作
  115. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-20 10:24:25 | 显示全部楼层
DS1302
  1. #ifndef __DS1302_H__
  2. #define __DS1302_H__
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. /*****************************************************************************/

  6. //定义DS1302时钟接口
  7. sbit clock_clk = P0 ^0;//ds1302_clk(时钟线)
  8. sbit clock_dat = P0 ^1;//ds1302_dat(数据线)
  9. sbit clock_Rst = P0 ^2;//ds1302_Rst(复位线)
  10. /*****************************************************************************/
  11. //定义累加器A中的各位
  12. sbit a0   = ACC ^ 0;
  13. sbit a1   = ACC ^ 1;
  14. sbit a2   = ACC ^ 2;
  15. sbit a3   = ACC ^ 3;
  16. sbit a4   = ACC ^ 4;
  17. sbit a5   = ACC ^ 5;
  18. sbit a6   = ACC ^ 6;
  19. sbit a7   = ACC ^ 7;

  20. /*******************************************************************************/
  21. //函数声明
  22. void write_clock(uchar ord, uchar dd);
  23. void clock_out(uchar dd);
  24. uchar clock_in(void);//DS1302逐位写入字节(底层协议)
  25. void clock_out(uchar dd);//1302驱动程序逐位读出字节(底层协议?
  26. void Init_1302(void);//-设置1302的初始时间(2010年10月08日20时51分00秒星期五)
  27. uchar read_clock(uchar ord);//DS1302读数据(底层协议)
  28. void read_clockS(void);


  29. //设置1302的初始时间(自动初始化)
  30. void Init_1302(void)
  31. {//-设置1302的初始时间(2010年10月08日20时51分00秒星期五)
  32.         uchar f;
  33.         if(read_clock(0xc1) != 0xaa)
  34.         {
  35.                 write_clock(0x8e,0x00);//允许写操作
  36.                 write_clock(0x8c,0x15);//年
  37.                 write_clock(0x8a,0x01);//星期
  38.                 write_clock(0x88,0x10);//月
  39.                 write_clock(0x86,0x17);//日
  40.                 write_clock(0x84,0x08);//小时
  41.                 write_clock(0x82,0x05);//分钟
  42.                 write_clock(0x80,0x00);//秒

  43.                 write_clock(0x90,0xa5);//充电
  44.        
  45.                 write_clock(0xc0,0xaa);//写入初始化标志RAM(第00个RAM位置)
  46.                 for(f=0;f<60;f=f+2)
  47.                 {//清除闹钟RAM位为0
  48.                         write_clock(0xc2+f,0x00);
  49.                 }
  50.                 write_clock(0x8e,0x80);//禁止写操作
  51.         }
  52. }
  53. /*****************************************************************************/
  54. //DS1302写数据(底层协议)
  55. void write_clock(uchar ord, uchar dd)
  56. {
  57.         clock_clk=0;
  58.         clock_Rst=0;
  59.         clock_Rst=1;
  60.         clock_out(ord);
  61.         clock_out(dd);
  62.         clock_Rst=0;
  63.         clock_clk=1;
  64. }
  65. /*****************************************************************************/
  66. //1302驱动程序逐位读出字节(底层协议)
  67. void clock_out(uchar dd)
  68. {
  69.         ACC=dd;
  70.         clock_dat=a0; clock_clk=1; clock_clk=0;
  71.         clock_dat=a1; clock_clk=1; clock_clk=0;
  72.         clock_dat=a2; clock_clk=1; clock_clk=0;
  73.         clock_dat=a3; clock_clk=1; clock_clk=0;
  74.         clock_dat=a4; clock_clk=1; clock_clk=0;
  75.         clock_dat=a5; clock_clk=1; clock_clk=0;
  76.         clock_dat=a6; clock_clk=1; clock_clk=0;
  77.         clock_dat=a7; clock_clk=1; clock_clk=0;
  78. }
  79. /*****************************************************************************/
  80. //DS1302逐位写入字节(底层协议)
  81. uchar clock_in(void)
  82. {
  83.         clock_dat=1;
  84.         a0=clock_dat;
  85.         clock_clk=1; clock_clk=0; a1=clock_dat;
  86.         clock_clk=1; clock_clk=0; a2=clock_dat;
  87.         clock_clk=1; clock_clk=0; a3=clock_dat;
  88.         clock_clk=1; clock_clk=0; a4=clock_dat;
  89.         clock_clk=1; clock_clk=0; a5=clock_dat;
  90.         clock_clk=1; clock_clk=0; a6=clock_dat;
  91.         clock_clk=1; clock_clk=0; a7=clock_dat;
  92.         return(ACC);
  93. }
  94. /*****************************************************************************/
  95. //DS1302读数据(底层协议)供调用时钟数据
  96. uchar read_clock(uchar ord)
  97. {
  98.         uchar dd=0;
  99.         clock_clk=0;
  100.         clock_Rst=0;
  101.         clock_Rst=1;
  102.         clock_out(ord);
  103.         dd=clock_in();
  104.         clock_Rst=0;
  105.         clock_clk=1;
  106.         return(dd);
  107. }
复制代码
.H文件
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-20 10:25:34 | 显示全部楼层
12864.H
  1. #ifndef __LCD12864_H__
  2. #define __LCD12864_H__
  3. #include "zk.h"

  4. #define uchar unsigned char
  5. #define uint  unsigned int

  6. /*-----------------------------定义12864液晶屏数据线---------------------------------*/
  7. sbit LCM_RS  = P0^7;   //模式位,为0输入指令,为1输入数据
  8. sbit LCM_RW  = P0^6;   //读写位,为0读,为1写
  9. sbit LCM_EN  = P0^5;   //使能位,高脉冲   
  10. #define Lcd_Bus P1     //LCM12864数据总线,P0.0--P0.7对应连接DB0--DB7
  11. /*------------------------------------------------------------------------------------*/
  12. /*12864液晶显示屏并口驱动程序--------------------------------------------------------*/
  13. //检查忙位
  14. void chk_busy()
  15. {
  16.    LCM_RS=0; LCM_RW=1; LCM_EN=1;
  17.    Lcd_Bus=0xff;
  18.    while((Lcd_Bus&0x80)==0x80);
  19.    LCM_EN=0;
  20. }
  21. /*写指令到LCD------------------------------------------------------------------------*/
  22. void write_com(uchar cmdcode)
  23. {
  24.         chk_busy();
  25.         LCM_RS=0; LCM_RW=0; LCM_EN=1;
  26.         Lcd_Bus=cmdcode;
  27.         LCM_EN=0;
  28. }
  29. /*写数据到LCD------------------------------------------------------------------------*/
  30. void write_data(uchar Dispdata)
  31. {         
  32.         chk_busy();
  33.         LCM_RS=1; LCM_RW=0; LCM_EN=1;
  34.         Lcd_Bus=Dispdata;
  35.         LCM_EN=0;
  36. }
  37. /*向LCM发送一个字符串,长度64字符之内-------------------------------------------------*/
  38. void lcm_w_word(uchar *s)
  39. {
  40.         while(*s>0) { write_data(*s); s++; }  //应用:lcm_w_word("您好!");
  41. }
  42. /******************************************************************************/
  43. void lcm_w_test(bit i,uchar word){//写指令或数据(被调用层)
  44.         if(i == 0){
  45.                 write_com(word);//写指令(0,指令)
  46.         }else{
  47.                 write_data(word);//写数据(1,数据)
  48.         }
  49. }
  50. /*清屏函数--------------------------------------------------------------------------*/
  51. void lcm_clr(void)
  52. {
  53.         write_com(0x01);       
  54. }

  55. /*****************************************************************************

  56. void lcm_clr2(void){//清屏上面3行(用空格填满要清显示的地方,因为液晶屏是静态显示的,所以这办法常用)
  57.         lcm_w_test(0,0x80);//第一行
  58.         lcm_w_word("                ");
  59.             //标尺("1234567812345678"应该能够显示满一行)
  60.    lcm_w_test(0,0x90);//第二行
  61.         lcm_w_word("                ");
  62.             //标尺("1234567812345678"应该能够显示满一行)
  63.    lcm_w_test(0,0x88);//第一行
  64.         lcm_w_word("                ");
  65.             //标尺("1234567812345678"应该能够显示满一行)
  66. }
  67. */
  68. /*初始化LCD屏------------------------------------------------------------------------*/
  69. void lcm_init()
  70. {  
  71.         write_com(0x30);  //选择8bit数据流
  72.         write_com(0x0c);  //开显示(无游标、不反白)
  73.         lcm_clr();        //清除显示,并且设定地址指针为00H
  74.         write_com(0x06);  //光标右移,DDRAM位址计数器(AC)加1,不整屏移动
  75. //  lcm_clr2();
  76. }
  77. /*使用绘图的方法让一个16*16的汉字符反白----------------------------------------------*/
  78. //形式参数:uchar x,uchar y,uchar wide,uchar bkcor
  79. //行参说明:坐标水平位置,坐标垂直位置,反白行数,要反白还是清除(1:反白,0:清除)   
  80. void write1616GDRAM(uchar x,uchar y,uchar sign,uchar *bmp)       
  81. {                  //x-列,y-行,sign-反白选择(1不反白,0反白),bmp-图画的选择
  82.         uchar i,j,basex;
  83.         write_com(0x36);      //扩展指令,绘图模式命令,开显示也可以绘.(关图片显示0x34)
  84.         if(y==1||y==2)          //第一第二行
  85.         {
  86.                 basex=0x80;           //上半屏
  87.                 y=(y-1)*16;          //垂直位址从0X80开始.
  88.         }
  89.         if(y==3||y==4)        //第三第四行
  90.         {
  91.                 basex=0x88;         //下半屏
  92.                 y=(y-3)*16;         //垂直位址都是从0X80开始的,不管上下半屏。
  93.         }
  94.         for(i=0;i<16;i++)        //
  95.         {                                                                                                                       
  96.                 write_com(0x80+y+i);  //写入垂直位址。
  97.                 write_com(basex+x-1); //再写入水平位址(上半屏第一字为0X80,……第七字为0X87)
  98.                                                            //下半屏第一字为0X88,……第七字为0X8F;
  99.                 for(j=0;j<2;j++)   //再写入两个8位元的数据,AC会自动增一,接着写数据
  100.                 {
  101.                         if(sign==1)  
  102.                                 write_data(~(*bmp++));
  103.                         else  
  104.                                 write_data(*bmp++);
  105.                 }
  106.         }       
  107.         write_com(0x36);  //写完数据,开图片显示     
  108. }

  109. /**************************************************************************************
  110. //函数功能:显示16X16图形,适用于st7920型液晶
  111. //形式参数:uchar x,uchar y,uchar *bmp
  112. //行参说明:横坐标X列,纵坐标Y行,sign=1反白、=0不反,tt是要显示的图形bmp1616中的第几个
  113. //************************************************************************************/
  114. void set1616pic(uchar x,uchar y,uchar sign,uchar tt)
  115. {                                //x-列,y-行,sign-反白选择(1不反白,0反白),tt-图画的选择
  116.         uchar (*pp)[32];         //定义指针
  117.         pp=bmp1616;          //二维数组首地址给指针,故指针指向下一个数组地址应为加64
  118.         write1616GDRAM(x,y,sign,pp[tt]); //写入小时的十位          
  119. }
  120. /**************************************************************************************
  121. //函数功能:显示16X32图形,适用于st7920型液晶
  122. //形式参数:uchar x,uchar y,uchar *bmp
  123. //行参说明:横坐标X列,纵坐标Y行,要显示的图形BMP
  124. //***********************************************************************************         
  125. void write1632GDRAM(uchar x,uchar y,uchar *bmp)       
  126. {
  127.         uchar i,j,basex,basey;
  128.         switch(y)         //由y纵坐标定是上半屏还是下半屏
  129.         {
  130.           case 1: basex=0x80; break;  //上半屏
  131.           case 2: basex=0x80; break;  //先上半屏,下面再下半屏。
  132.           case 3: basex=0x88; break;  //下半屏
  133.           default:   return;   //别的则返回
  134.         }
  135.         basey=basex+x-1;
  136.         write_com(0x36);  
  137.         if(y==1||y==3)        //如为第一第三行,则直接是在同一半屏,直接绘完32行点阵数据。
  138.         {
  139.                   for(i=0;i<32;i++)         //写入32行点阵
  140.                   {                                                                                                               
  141.                             write_com(0x80+i);  //先写入垂直位址,选上下32行的哪一行,不管上下半屏,首行都为0X80
  142.                             write_com(basey);     //再写入水平位址(选上下半屏)
  143.                             for(j=0;j<2;j++)           //2个8位元的数据,即16BIT宽度
  144.                                     write_data(*bmp++);   
  145.                   }         
  146.         }
  147.         if(y==2)  //从第二行开始则画图将上下半屏都有,所以先画完上半屏16行,再画下半屏16行。
  148.         {                                       
  149.                   for(i=0;i<16;i++)         //写入上半屏16行点阵
  150.                   {                                                                                                               
  151.                             write_com(0x90+i);  //先写入垂直位址,选上下32行的哪一行,不管上下半屏,首行都为0X80,第二行为0X90。
  152.                             write_com(basey);    //(选上半屏)再写入水平位址
  153.                             for(j=0;j<2;j++)           //2个8位元的数据,即16BIT宽度
  154.                                     write_data(*bmp++);   
  155.                   }
  156.                   for(i=0;i<16;i++)         //写入下半屏16行点阵
  157.                   {                                                                                                               
  158.                             write_com(0x80+i);  //先写入垂直位址,选上下32行的哪一行,不管上下半屏,首行都为0X80
  159.                             write_com(basey+8);   //(选下半屏)再写入水平位址
  160.                             for(j=0;j<2;j++)           //2个8位元的数据,即16BIT宽度
  161.                                     write_data(*bmp++);   
  162.                   }         
  163.         }
  164.         write_com(0x36);  //写完数据,开图片显示     
  165. }
  166. */
  167. /**************************************************************************/
  168. //-------------------------------------------
  169. //函数功能:显示128x64图形,适用于st7920型液晶
  170. //-------------------------------------------
  171. /************************************************************************           

  172. void write12864GDRAM(unsigned char code *img)
  173. {
  174. uchar i,j;
  175.    for(j=0;j<32;j++)                        //绘制上半屏
  176.    {
  177.      for(i=0;i<8;i++)
  178.      {
  179.        write_com(0x34);                //0011 0100 扩充功能设定——8位数据 扩充指令操作 绘图开
  180.        write_com(0x80+j);                //1xxx xxxx 设定绘图RAM——先设定垂直(列)地址AC6 AC5…AC0
  181.        write_com(0x80+i);                //1000 0xxx 设定绘图RAM——再设定水平(行)地址AC3AC2AC1AC0
  182.        write_com(0x30);                //0011 0000 扩充功能设定——8位数据 基本指令操作
  183.        write_data(img[j*16+i*2]);
  184.        write_data(img[j*16+i*2+1]);
  185.      }
  186.    }
  187.    for(j=32;j<64;j++)                        //绘制下半屏
  188.    {
  189.      for(i=0;i<8;i++)
  190.      {
  191.        write_com(0x34);                //0011 0100 扩充功能设定——8位数据 扩充指令操作 绘图开
  192.        write_com(0x80+j-32);                //1xxx xxxx 设定绘图RAM——先设定垂直(列)地址AC6 AC5…AC0
  193.        write_com(0x88+i);                //1000 1xxx 设定绘图RAM——再设定水平(行)地址AC3AC2AC1AC0
  194.        write_com(0x30);                //0011 0000 扩充功能设定——8位数据 基本指令操作
  195.        write_data(img[j*16+i*2]);
  196.        write_data(img[j*16+i*2+1]);
  197.      }
  198.    }
  199.    write_com(0x36);
  200. }
  201. */
  202. /**************************************************************************/
  203. //-------------------------------------------
  204. //函数功能:显示128x32图形,适用于st7920型液晶
  205. //功能描述    :下半屏显示图形
  206. //-------------------------------------------
  207. /***********************************************************************
  208. void write12832GDRAM(unsigned char code *img)
  209. {
  210. uchar i,j;
  211.    for(j=0;j<32;j++)
  212.    {
  213.      for(i=0;i<8;i++)
  214.      {
  215.        write_com(0x34);
  216.        write_com(0x80+j);
  217.        write_com(0x88+i);
  218.        write_com(0x30);
  219.        write_data(img[j*16+i*2]);
  220.        write_data(img[j*16+i*2+1]);
  221.      }
  222.    }
  223.    write_com(0x36);
  224. }
  225. */
  226. /**************************************************************************************        
  227. ** 函数名称: init_12864_GDRAM()
  228. ** 功能描述: 在程写GDRAM时序初始化12864
  229. **************************************************************************************/
  230. void init_12864_GDRAM()         
  231. {
  232.         write_com(0x30);     //基本指令操作(扩充指令操作为:0x34)
  233.         write_com(0x0C);     //整体显示ON,游标OFF,游标位置OFF
  234.         write_com(0x06);           //光标右移,DDRAM位址计数器(AC)加1,不整屏移动
  235.         lcm_clr();           //清屏 (清DDRAM)
  236. }

  237. /**************************************************************************************
  238. //函数名称:Clean_12864_GDRAM(void)                                               
  239. //函数功能:清屏函数
  240. //使用说明:GDRAM填满0
  241. //*****************************************************************************/
  242. void Clean_12864_GDRAM(void)
  243. {
  244.     uchar x,y;
  245.     write_com(0x36);
  246.     init_12864_GDRAM();                //设置扩展指令集,按手册说明,仅设置了绘图位,
  247.     write_com(0x36);        //需要两次,本次设置扩展指令集。
  248.     for (y=0;y<32;y++)
  249.     {
  250.         write_com(0x80+y);  //设置y=1000+00xx,y+1则往下一行
  251.         write_com(0x80);        //设置x=1000 0000
  252.         for (x=0;x<16;x++)
  253.         {
  254.             write_data(0x00);   //高字节数据
  255.             write_data(0x00);        //低字节数据
  256.         }
  257.     }
  258. }
  259. /*-----------------------------------------------------------------------------------*/
  260. #endif
复制代码
文件
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-20 10:26:44 | 显示全部楼层
字库头文件
  1. #ifndef __ZK_H__
  2. #define __ZK_H__
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. /*128x32图片-------------------------------------------------------------
  6. unsigned char code bmp12832[]={
  7.         0x00,0x00,0x03,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  8.         0x00,0x00,0x0F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  9.         0x00,0x00,0x3F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  10.         0x00,0x01,0xF0,0xFF,0xF8,0xFE,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x08,0x00,0x00,
  11.         0x00,0x07,0xFF,0x00,0x07,0xBF,0x80,0x00,0x00,0x00,0x00,0x04,0x03,0x7D,0x80,0x00,
  12.         0x00,0x0F,0xFF,0xC0,0x7F,0xFF,0xE0,0x00,0x10,0x00,0x03,0xCD,0x80,0xA3,0xC0,0x00,
  13.         0x00,0x3F,0xFF,0xF1,0xFF,0xFF,0xE0,0x00,0x18,0x00,0x02,0x6F,0xC0,0x22,0x40,0x00,
  14.         0x00,0x3F,0xFF,0xF1,0xFF,0xFF,0xE0,0x00,0x1C,0x00,0x00,0x58,0x42,0x22,0x40,0x00,
  15.         0x00,0x7F,0x87,0xF1,0xFC,0x0F,0xF8,0x00,0x23,0xFC,0x03,0x50,0x83,0xA2,0x40,0x00,
  16.         0x00,0x7E,0x03,0xC1,0xF8,0x07,0xFC,0x00,0x20,0x38,0x01,0x42,0x01,0xA2,0x40,0x00,
  17.         0x00,0x78,0x00,0x00,0x00,0x00,0x7C,0x00,0x60,0xC0,0x00,0x86,0x01,0xEA,0xC0,0x00,
  18.         0x00,0xC0,0x00,0x00,0x00,0x00,0x7F,0x01,0x83,0x00,0x01,0xC6,0x01,0x3F,0x80,0x00,
  19.         0x00,0xC0,0x00,0x00,0x00,0x00,0x7F,0x06,0x04,0x00,0x01,0x2F,0x01,0x02,0x00,0x00,
  20.         0x00,0xC0,0x00,0x00,0x00,0x00,0x78,0xC8,0x18,0x00,0x02,0x19,0x01,0x02,0x00,0x00,
  21.         0x00,0xC0,0x1F,0xC1,0xFF,0xFE,0x00,0x38,0x10,0x00,0x00,0x10,0x81,0xE1,0xC0,0x00,
  22.         0x00,0xC0,0x1F,0xC1,0xFF,0xFE,0x00,0x38,0x10,0x00,0x00,0x10,0x00,0x3F,0x00,0x00,
  23.         0x03,0x07,0xE0,0x00,0x00,0x00,0x00,0x08,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  24.         0x04,0x00,0x00,0x00,0x00,0x00,0x03,0x88,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  25.         0x18,0x00,0x00,0x00,0x00,0x00,0x01,0x8F,0x80,0x02,0x00,0x03,0x00,0x00,0x00,0x00,
  26.         0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0xC2,0x01,0xFF,0x80,0x00,0x00,0x00,
  27.         0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x39,0x81,0x9F,0xC1,0x98,0x80,0x00,0x00,0x00,
  28.         0x40,0x00,0x00,0x00,0x00,0x00,0x03,0xC1,0x83,0x82,0x01,0x18,0x80,0x00,0x00,0x00,
  29.         0x40,0x00,0x00,0x00,0x00,0x01,0xFF,0x02,0x02,0x9F,0xC1,0xFE,0x80,0x00,0x00,0x00,
  30.         0x40,0x00,0x1C,0x00,0x00,0x01,0xC0,0x06,0x00,0xB2,0x41,0x1A,0x80,0x00,0x00,0x00,
  31.         0x20,0x00,0x3C,0x00,0x00,0x0E,0x00,0x08,0x00,0xB6,0xC1,0x18,0x8A,0xAA,0x00,0x00,
  32.         0x18,0x00,0x3C,0x00,0x1F,0xF8,0x00,0x30,0x00,0x9F,0x81,0xF8,0x80,0x00,0x00,0x00,
  33.         0x04,0x00,0x00,0x0F,0xFC,0x00,0x00,0x40,0x00,0xA4,0x01,0x1E,0x80,0x00,0x00,0x00,
  34.         0x03,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x40,0x00,0xBC,0x01,0x18,0x80,0x00,0x00,0x00,
  35.         0x00,0x30,0x00,0xE0,0x00,0x00,0x00,0x80,0x00,0x8E,0x01,0x18,0x80,0x00,0x00,0x00,
  36.         0x00,0xC0,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x8B,0xC1,0x03,0x80,0x00,0x00,0x00,
  37.         0x03,0x00,0x0C,0x00,0x00,0x00,0x04,0x00,0x00,0x90,0x40,0x00,0x00,0x00,0x00,0x00,
  38.         0x03,0x00,0x0C,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  39. };
  40. */
  41. /*128x64图片-----------------------------------------------------------------------
  42. unsigned char  code  bmp12864[]={
  43.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
  44.         0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,
  45.         0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,
  46.         0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,
  47.         0x00,0x00,0x00,0x00,0x00,0x07,0xBB,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,
  48.         0x01,0xE0,0x00,0x00,0x00,0x0F,0xD7,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,
  49.         0x1F,0xDE,0x00,0x00,0x00,0x3F,0xEF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x2F,0x20,
  50.         0x12,0x52,0x00,0x00,0x00,0xFF,0xD7,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x3E,0x78,
  51.         0x12,0xD2,0x00,0x00,0x03,0xFF,0xBB,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x02,0xC8,
  52.         0x15,0x6A,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x1D,0x90,
  53.         0x14,0xCA,0x00,0x00,0x0F,0xED,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x0E,0xE0,
  54.         0x15,0xFA,0x00,0x00,0x1F,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x0E,0xE0,
  55.         0x16,0xB2,0x00,0x00,0x3F,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x18,0xB0,
  56.         0x14,0xCA,0x00,0x00,0x7F,0xED,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x31,0x38,
  57.         0x14,0xCA,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x02,0x1E,
  58.         0x17,0xFA,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0x55,0x55,0x57,0xFF,0xFF,0x80,0x00,0x0C,
  59.         0x10,0x02,0x00,0x01,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x01,0xFF,0xFF,0xE0,0x00,0x00,
  60.         0x0F,0xFC,0x00,0x03,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0xFF,0xFF,0xF0,0x00,0x00,
  61.         0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x3F,0xFF,0xB8,0x00,0x00,
  62.         0x00,0xE0,0x00,0x07,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x3F,0xFF,0x9C,0x00,0x00,
  63.         0x00,0xA0,0x00,0x0F,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x1F,0xFF,0x9C,0x00,0x00,
  64.         0x1F,0xBF,0x00,0x1F,0xFF,0xFF,0xFF,0xC0,0x00,0x0A,0x00,0x0F,0xFF,0x8E,0x03,0x80,
  65.         0x20,0x00,0x80,0x1F,0xFF,0xFF,0xFF,0x00,0x00,0x04,0x00,0x07,0xFF,0x8E,0x3F,0xF8,
  66.         0x20,0x00,0x80,0x1F,0xFF,0xFF,0xFC,0x00,0x00,0x0A,0x00,0x3F,0xFF,0x8E,0x02,0xD0,
  67.         0x1F,0x1F,0x00,0x3F,0xFF,0xFF,0xF1,0xFF,0xF0,0x00,0x0F,0xC3,0xFF,0x8E,0x32,0xF0,
  68.         0x02,0x08,0x00,0x7F,0xFF,0xFF,0xF0,0x00,0x0F,0x00,0x70,0x03,0xFF,0x0E,0x13,0xC0,
  69.         0x0C,0x06,0x00,0x7F,0xBB,0xCF,0xE0,0x3F,0xA0,0x00,0x0F,0xF3,0xFB,0x0C,0x26,0x80,
  70.         0x10,0xA1,0x00,0xFF,0xD7,0x9F,0xC0,0xF7,0xF8,0x00,0x3B,0xCF,0xFB,0x08,0x20,0x80,
  71.         0x11,0xB1,0x01,0xFF,0xFF,0x33,0x80,0x7F,0x80,0x00,0x3F,0xB3,0xF3,0x18,0x7F,0xEC,
  72.         0x1E,0xAF,0x01,0xFF,0xD7,0x63,0x80,0x1F,0xC0,0x00,0x07,0xE1,0xF3,0x10,0x01,0xF8,
  73.         0x00,0xA0,0x03,0xFF,0xBF,0xC3,0x00,0x00,0x00,0x00,0x00,0x03,0xE2,0x00,0x00,0x70,
  74.         0x00,0xE0,0x03,0xFF,0xFF,0xB7,0x00,0x00,0x00,0x00,0x00,0x01,0xC4,0x00,0x00,0x00,
  75.         0x00,0x00,0x03,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x88,0x00,0x00,0x00,
  76.         0x00,0x30,0x07,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x40,0x03,0x80,0x00,0x00,0x00,
  77.         0x00,0x48,0x07,0xFF,0xFF,0x87,0x00,0x00,0x00,0x00,0x40,0x03,0x00,0x00,0x00,0x00,
  78.         0x1F,0xC8,0x0F,0xFF,0xFF,0xCF,0x00,0x00,0x00,0x00,0x40,0x07,0x00,0x00,0x00,0xC0,
  79.         0x20,0xC8,0x0F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x04,0x60,
  80.         0x20,0xC8,0x0F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x05,0x00,0x0F,0x00,0x00,0x1F,0xFC,
  81.         0x25,0xCF,0x1F,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x19,0xF8,
  82.         0x26,0x00,0x9F,0xFF,0xFF,0xFF,0x40,0x00,0x18,0x01,0x70,0x2E,0x00,0x00,0x09,0x48,
  83.         0x26,0x00,0xBF,0xFF,0xFF,0xFF,0x90,0x00,0x07,0xFF,0x80,0x46,0x00,0x00,0x0B,0xF0,
  84.         0x25,0xCF,0x3F,0xFF,0xFF,0xFF,0x84,0x00,0x00,0xFE,0x00,0x86,0x00,0x00,0x09,0x40,
  85.         0x20,0xC8,0x3F,0xFF,0xFF,0xFC,0x81,0x80,0x00,0x3C,0x02,0x06,0x00,0x00,0x08,0xC0,
  86.         0x20,0xC8,0x3F,0xFF,0xFF,0xFC,0xC0,0x70,0x00,0x00,0x0C,0x03,0x00,0x00,0x0F,0xB0,
  87.         0x1F,0x48,0x3F,0xFF,0xFF,0xEF,0xC0,0x0E,0x00,0x00,0x30,0x01,0x00,0x00,0x07,0x1E,
  88.         0x00,0x48,0x3F,0xFF,0xFF,0xF7,0x40,0x01,0xC0,0x00,0xC0,0x00,0x80,0x00,0x00,0x0C,
  89.         0x00,0x48,0x3F,0xFF,0xFF,0xF7,0x20,0x00,0x38,0x01,0x80,0x00,0x00,0x00,0x00,0x00,
  90.         0x00,0x30,0x1F,0xFF,0xFF,0xEC,0x60,0x00,0x06,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,
  91.         0x00,0x00,0x1F,0xFF,0xFF,0xE8,0x18,0x00,0x00,0xF3,0x0C,0x00,0x00,0x00,0x00,0x00,
  92.         0x00,0x00,0x1F,0xFF,0xFF,0xF4,0x06,0x00,0x00,0x01,0x06,0x00,0x00,0x00,0x00,0x00,
  93.         0x00,0x00,0x1F,0xFF,0xFF,0xF4,0x01,0x80,0x00,0x01,0x03,0x00,0x00,0x00,0x0F,0xFC,
  94.         0x00,0x00,0x07,0xFF,0xFF,0xF5,0x00,0x70,0x00,0x01,0x03,0xD0,0x00,0x00,0x0F,0x88,
  95.         0x00,0x00,0x07,0xFF,0xFF,0xFB,0x00,0x0E,0x7F,0x81,0x03,0x0F,0x80,0x00,0x08,0xF8,
  96.         0x00,0x00,0x03,0xFF,0xFF,0xCF,0x00,0x00,0x00,0x7A,0x03,0x00,0x78,0x00,0x0F,0xF8,
  97.         0x00,0x00,0x00,0xFF,0xFC,0x03,0x40,0x00,0x00,0x07,0x03,0xC0,0x07,0x80,0x08,0x88,
  98.         0x00,0x00,0x00,0x3B,0xFC,0x3F,0x8C,0x00,0x00,0x01,0x86,0xE0,0x00,0x60,0x0F,0xF8,
  99.         0x00,0x00,0x00,0xC1,0xE3,0x7F,0xF2,0x00,0x00,0x00,0xA7,0xF8,0x00,0x18,0x08,0x88,
  100.         0x00,0x00,0x03,0x00,0x00,0xFF,0xFC,0x80,0x00,0x00,0xFF,0xFC,0x00,0x0C,0x38,0x88,
  101.         0x00,0x00,0x0C,0x00,0x00,0x7F,0xFE,0x38,0x00,0x00,0xFF,0xFF,0x00,0x06,0x70,0x80,
  102.         0x00,0x00,0x30,0x00,0x00,0xFF,0xFF,0x06,0x87,0xAA,0xFF,0xFF,0x80,0x03,0x00,0x00,
  103.         0x00,0x00,0xC0,0x00,0x00,0xFF,0xFF,0x80,0x00,0x00,0x6F,0xFF,0xC0,0x01,0x80,0x00,
  104.         0x00,0x01,0x80,0x00,0x00,0xFF,0xFF,0xC0,0x00,0x00,0x6F,0xFF,0xE0,0x00,0x80,0x00,
  105.         0x00,0x03,0x00,0x00,0x00,0xFF,0xFF,0xC0,0x00,0x00,0x77,0xFF,0xF0,0x00,0xC0,0x00,
  106.         0x00,0x06,0x00,0x00,0x00,0x7F,0xFF,0xE0,0x00,0x00,0x77,0xFF,0xF8,0x00,0x40,0x00,
  107. };
  108. */
  109. //16x16图标-----------------------------------------------------------------//
  110. //PCtoLCD2002取模:顺向,逐行式/
  111. uchar code bmp1616[3][32]={
  112. /*
  113. //"℃"          tt=0
  114. {0x00,0x00,0x30,0x00,0x48,0x00,0x49,0xC0,0x33,0xE8,0x06,0x38,0x0C,0x18,0x0C,0x08,
  115. 0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x06,0x08,0x03,0x10,0x01,0xE0,0x00,0x00},     
  116. */
  117. /*
  118. //温度计图标
  119. {0x00,0x00,0x01,0x80,0x02,0x40,0x02,0x40,0x02,0xC0,0x02,0x40,0x02,0xC0,0x02,0x40,
  120. 0x02,0xC0,0x02,0x40,0x03,0xC0,0x07,0xE0,0x0F,0xF0,0x0F,0xF0,0x07,0xE0,0x03,0xC0},
  121. */
  122. //闹钟图标
  123. {
  124. 0x00,0x00,0x38,0x1C,0x60,0x06,0x43,0xC2,0x4C,0x32,0x11,0x08,0x11,0x08,0x21,0x04,
  125. 0x21,0xF4,0x20,0x04,0x10,0x08,0x10,0x08,0x0C,0x30,0x13,0xC8,0x20,0x04,0x00,0x00},

  126. //无任何图片显示
  127. {
  128. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  129. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

  130. //喇叭
  131. {0x00,0x00,0x00,0xC2,0x01,0xC6,0x03,0xCC,0x07,0xD8,0x7F,0xD0,0x7F,0xC0,0x7F,0xDE,
  132. 0x7F,0xDE,0x7F,0xC0,0x7F,0xD0,0x07,0xD8,0x03,0xCC,0x01,0xC6,0x00,0xC2,0x00,0x00}

  133. };


  134. #endif
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-20 10:27:52 | 显示全部楼层
DS18B20的头文件
  1. #ifndef __DS18B20_H__
  2. #define __DS18B20_H__

  3. #include "delay.h"
  4. #include "lcd12864.h"
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. /*定义DS18B20数据线*/
  8. sbit DQ = P0^4;
  9. /*DS18B20驱动程序------------------------------------------------------------*/
  10. uchar data disdata[5];
  11. uint tvalue;//温度值


  12. /*ds1820复位-----------------------------------------------------------------*/
  13. void ds1820rst()
  14. {  
  15.         uchar x=0;
  16.         DQ=1;              //DQ复位
  17.         delay_18B20(80);    //延时
  18.         DQ=0;              //DQ拉低
  19.         delay_18B20(800);   //精确延时大于480us
  20.         DQ=1;              //拉高
  21.         delay_18B20(140);
  22.         x=DQ;              //稍做延时后 如果x=0则初始化成功 x=1则初始化失败

  23.         while(!DQ);
  24.         delay_18B20(80);
  25. }
  26. /*读一个字节-----------------------------------------------------------------*/  
  27. uchar ds1820rd()
  28. {
  29.         uchar i=0;
  30.         uchar dat=0;
  31.         for (i=8;i>0;i--)
  32.         {   
  33.                 DQ=0;     //给脉冲信号
  34.                 dat>>=1;
  35.                 DQ=1;     //给脉冲信号
  36.                 if(DQ)
  37.                         dat|=0x80;
  38.         }
  39.         delay_18B20(100);
  40.         return(dat);
  41. }
  42. /*写一个字节-----------------------------------------------------------------*/
  43. void ds1820wr(uchar wdata)
  44. {
  45.         uchar i=0;
  46.    for (i=8;i>0;i--)
  47.         {
  48.                 DQ=0;
  49.                 DQ=wdata&0x01;
  50.                 delay_18B20(100);
  51.                 DQ=1;
  52.                 wdata>>=1;
  53.         }
  54.         delay_18B20(80);
  55. }
  56. /*读取温度值并转换-----------------------------------------------------------*/  
  57. read_temp()
  58. {
  59.         uchar a,b;

  60.            ds1820rst();   
  61.            ds1820wr(0xcc);//*跳过读序列号*/
  62.         delay_18B20(40);
  63.            ds1820wr(0x44);//*启动温度转换*/
  64. //        delay_18B20(200);
  65.            ds1820rst();   
  66.            ds1820wr(0xcc);//*跳过读序列号*/
  67.         delay_18B20(40);
  68.            ds1820wr(0xbe);//*读取温度*/
  69.         delay_18B20(200);
  70.            a=ds1820rd();//低
  71.            b=ds1820rd();//高
  72.        
  73.            tvalue=b;
  74.            tvalue<<=4;
  75.            tvalue=tvalue|a;
  76.            tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
  77. //        tvalue=tvalue*10+0.5;
  78.         return(tvalue);

  79. }
  80. /*温度值显示-----------------------------------------------------------------*/
  81. void ds1820disp()
  82. {
  83.         disdata[0]=tvalue%1000/100+0x30;     //十位数
  84.         disdata[1]=tvalue%100/10+0x30;      //个位数
  85.         disdata[2]=tvalue%10+0x30;         //小数位  
  86. //        if(disdata[0]==0x30)
  87. //        { disdata[0]=0x20; }//如果十位为0,不显示
  88.         set1616pic(5,3,0,1); //显示"温度计图标"
  89.         write_com(0x30);
  90.         write_com(0x06);       
  91.         write_com(0x8d);           //在液晶上显示温度起始位置
  92.         write_data(disdata[0]);    //显示十位        
  93.         write_data(disdata[1]);    //显示个位        
  94.         write_data(0x2e);          //显示小数点        
  95.         write_data(disdata[2]);    //显示小数位
  96. //        set1616pic(8,3,0,0);           //在第8列第4行不反白的°C图标
  97.     lcm_w_word("℃");
  98. }
  99. /*---------------------------------------------------------------------------*/
  100. #endif
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-20 10:28:57 | 显示全部楼层
闹铃头文件
  1. #ifndef __nongli_H__
  2. #define __nongli_H__

  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #include <intrins.h>

  6. /*---------------------------------公历转换阴历年份数据表--------------------------------*/

  7. static uchar code year_code[]=
  8. {
  9.         0x04,0xAe,0x53, //1901 0
  10.         0x0A,0x57,0x48, //1902 3
  11.         0x55,0x26,0xBd, //1903 6
  12.         0x0d,0x26,0x50, //1904 9
  13.         0x0d,0x95,0x44, //1905 12
  14.         0x46,0xAA,0xB9, //1906 15
  15.         0x05,0x6A,0x4d, //1907 18
  16.         0x09,0xAd,0x42, //1908 21
  17.         0x24,0xAe,0xB6, //1909
  18.         0x04,0xAe,0x4A, //1910
  19.         0x6A,0x4d,0xBe, //1911
  20.         0x0A,0x4d,0x52, //1912
  21.         0x0d,0x25,0x46, //1913
  22.         0x5d,0x52,0xBA, //1914
  23.         0x0B,0x54,0x4e, //1915
  24.         0x0d,0x6A,0x43, //1916
  25.         0x29,0x6d,0x37, //1917
  26.         0x09,0x5B,0x4B, //1918
  27.         0x74,0x9B,0xC1, //1919
  28.         0x04,0x97,0x54, //1920
  29.         0x0A,0x4B,0x48, //1921
  30.         0x5B,0x25,0xBC, //1922
  31.         0x06,0xA5,0x50, //1923
  32.         0x06,0xd4,0x45, //1924
  33.         0x4A,0xdA,0xB8, //1925
  34.         0x02,0xB6,0x4d, //1926
  35.         0x09,0x57,0x42, //1927
  36.         0x24,0x97,0xB7, //1928
  37.         0x04,0x97,0x4A, //1929
  38.         0x66,0x4B,0x3e, //1930
  39.         0x0d,0x4A,0x51, //1931
  40.         0x0e,0xA5,0x46, //1932
  41.         0x56,0xd4,0xBA, //1933
  42.         0x05,0xAd,0x4e, //1934
  43.         0x02,0xB6,0x44, //1935
  44.         0x39,0x37,0x38, //1936
  45.         0x09,0x2e,0x4B, //1937
  46.         0x7C,0x96,0xBf, //1938
  47.         0x0C,0x95,0x53, //1939
  48.         0x0d,0x4A,0x48, //1940
  49.         0x6d,0xA5,0x3B, //1941
  50.         0x0B,0x55,0x4f, //1942
  51.         0x05,0x6A,0x45, //1943
  52.         0x4A,0xAd,0xB9, //1944
  53.         0x02,0x5d,0x4d, //1945
  54.         0x09,0x2d,0x42, //1946
  55.         0x2C,0x95,0xB6, //1947
  56.         0x0A,0x95,0x4A, //1948
  57.         0x7B,0x4A,0xBd, //1949
  58.         0x06,0xCA,0x51, //1950
  59.         0x0B,0x55,0x46, //1951
  60.         0x55,0x5A,0xBB, //1952
  61.         0x04,0xdA,0x4e, //1953
  62.         0x0A,0x5B,0x43, //1954
  63.         0x35,0x2B,0xB8, //1955
  64.         0x05,0x2B,0x4C, //1956
  65.         0x8A,0x95,0x3f, //1957
  66.         0x0e,0x95,0x52, //1958
  67.         0x06,0xAA,0x48, //1959
  68.         0x7A,0xd5,0x3C, //1960
  69.         0x0A,0xB5,0x4f, //1961
  70.         0x04,0xB6,0x45, //1962
  71.         0x4A,0x57,0x39, //1963
  72.         0x0A,0x57,0x4d, //1964
  73.         0x05,0x26,0x42, //1965
  74.         0x3e,0x93,0x35, //1966
  75.         0x0d,0x95,0x49, //1967
  76.         0x75,0xAA,0xBe, //1968
  77.         0x05,0x6A,0x51, //1969
  78.         0x09,0x6d,0x46, //1970
  79.         0x54,0xAe,0xBB, //1971
  80.         0x04,0xAd,0x4f, //1972
  81.         0x0A,0x4d,0x43, //1973
  82.         0x4d,0x26,0xB7, //1974
  83.         0x0d,0x25,0x4B, //1975
  84.         0x8d,0x52,0xBf, //1976
  85.         0x0B,0x54,0x52, //1977
  86.         0x0B,0x6A,0x47, //1978
  87.         0x69,0x6d,0x3C, //1979
  88.         0x09,0x5B,0x50, //1980
  89.         0x04,0x9B,0x45, //1981
  90.         0x4A,0x4B,0xB9, //1982
  91.         0x0A,0x4B,0x4d, //1983
  92.         0xAB,0x25,0xC2, //1984
  93.         0x06,0xA5,0x54, //1985
  94.         0x06,0xd4,0x49, //1986
  95.         0x6A,0xdA,0x3d, //1987
  96.         0x0A,0xB6,0x51, //1988
  97.         0x09,0x37,0x46, //1989
  98.         0x54,0x97,0xBB, //1990
  99.         0x04,0x97,0x4f, //1991
  100.         0x06,0x4B,0x44, //1992
  101.         0x36,0xA5,0x37, //1993
  102.         0x0e,0xA5,0x4A, //1994
  103.         0x86,0xB2,0xBf, //1995
  104.         0x05,0xAC,0x53, //1996
  105.         0x0A,0xB6,0x47, //1997
  106.         0x59,0x36,0xBC, //1998
  107.         0x09,0x2e,0x50, //1999 294
  108.         0x0C,0x96,0x45, //2000 297
  109.         0x4d,0x4A,0xB8, //2001
  110.         0x0d,0x4A,0x4C, //2002
  111.         0x0d,0xA5,0x41, //2003
  112.         0x25,0xAA,0xB6, //2004
  113.         0x05,0x6A,0x49, //2005
  114.         0x7A,0xAd,0xBd, //2006
  115.         0x02,0x5d,0x52, //2007
  116.         0x09,0x2d,0x47, //2008
  117.         0x5C,0x95,0xBA, //2009
  118.         0x0A,0x95,0x4e, //2010
  119.         0x0B,0x4A,0x43, //2011
  120.         0x4B,0x55,0x37, //2012
  121.         0x0A,0xd5,0x4A, //2013
  122.         0x95,0x5A,0xBf, //2014
  123.         0x04,0xBA,0x53, //2015
  124.         0x0A,0x5B,0x48, //2016
  125.         0x65,0x2B,0xBC, //2017
  126.         0x05,0x2B,0x50, //2018
  127.         0x0A,0x93,0x45, //2019
  128.         0x47,0x4A,0xB9, //2020
  129.         0x06,0xAA,0x4C, //2021
  130.         0x0A,0xd5,0x41, //2022
  131.         0x24,0xdA,0xB6, //2023
  132.         0x04,0xB6,0x4A, //2024
  133.         0x69,0x57,0x3d, //2025
  134.         0x0A,0x4e,0x51, //2026
  135.         0x0d,0x26,0x46, //2027
  136.         0x5e,0x93,0x3A, //2028
  137.         0x0d,0x53,0x4d, //2029
  138.         0x05,0xAA,0x43, //2030
  139.         0x36,0xB5,0x37, //2031
  140.         0x09,0x6d,0x4B, //2032
  141.         0xB4,0xAe,0xBf, //2033
  142.         0x04,0xAd,0x53, //2034
  143.         0x0A,0x4d,0x48, //2035
  144.         0x6d,0x25,0xBC, //2036
  145.         0x0d,0x25,0x4f, //2037
  146.         0x0d,0x52,0x44, //2038
  147.         0x5d,0xAA,0x38, //2039
  148.         0x0B,0x5A,0x4C, //2040
  149.         0x05,0x6d,0x41, //2041
  150.         0x24,0xAd,0xB6, //2042
  151.         0x04,0x9B,0x4A, //2043
  152.         0x7A,0x4B,0xBe, //2044
  153.         0x0A,0x4B,0x51, //2045
  154.         0x0A,0xA5,0x46, //2046
  155.         0x5B,0x52,0xBA, //2047
  156.         0x06,0xd2,0x4e, //2048
  157.         0x0A,0xdA,0x42, //2049
  158.         0x35,0x5B,0x37, //2050
  159.         0x09,0x37,0x4B, //2051
  160.         0x84,0x97,0xC1, //2052
  161.         0x04,0x97,0x53, //2053
  162.         0x06,0x4B,0x48, //2054
  163.         0x66,0xA5,0x3C, //2055
  164.         0x0e,0xA5,0x4f, //2056
  165.         0x06,0xB2,0x44, //2057
  166.         0x4A,0xB6,0x38, //2058
  167.         0x0A,0xAe,0x4C, //2059
  168.         0x09,0x2e,0x42, //2060
  169.         0x3C,0x97,0x35, //2061
  170.         0x0C,0x96,0x49, //2062
  171.         0x7d,0x4A,0xBd, //2063
  172.         0x0d,0x4A,0x51, //2064
  173.         0x0d,0xA5,0x45, //2065
  174.         0x55,0xAA,0xBA, //2066
  175.         0x05,0x6A,0x4e, //2067
  176.         0x0A,0x6d,0x43, //2068
  177.         0x45,0x2e,0xB7, //2069
  178.         0x05,0x2d,0x4B, //2070
  179.         0x8A,0x95,0xBf, //2071
  180.         0x0A,0x95,0x53, //2072
  181.         0x0B,0x4A,0x47, //2073
  182.         0x6B,0x55,0x3B, //2074
  183.         0x0A,0xd5,0x4f, //2075
  184.         0x05,0x5A,0x45, //2076
  185.         0x4A,0x5d,0x38, //2077
  186.         0x0A,0x5B,0x4C, //2078
  187.         0x05,0x2B,0x42, //2079
  188.         0x3A,0x93,0xB6, //2080
  189.         0x06,0x93,0x49, //2081
  190.         0x77,0x29,0xBd, //2082
  191.         0x06,0xAA,0x51, //2083
  192.         0x0A,0xd5,0x46, //2084
  193.         0x54,0xdA,0xBA, //2085
  194.         0x04,0xB6,0x4e, //2086
  195.         0x0A,0x57,0x43, //2087
  196.         0x45,0x27,0x38, //2088
  197.         0x0d,0x26,0x4A, //2089
  198.         0x8e,0x93,0x3e, //2090
  199.         0x0d,0x52,0x52, //2091
  200.         0x0d,0xAA,0x47, //2092
  201.         0x66,0xB5,0x3B, //2093
  202.         0x05,0x6d,0x4f, //2094
  203.         0x04,0xAe,0x45, //2095
  204.         0x4A,0x4e,0xB9, //2096
  205.         0x0A,0x4d,0x4C, //2097
  206.         0x0d,0x15,0x41, //2098
  207.         0x2d,0x92,0xB5, //2099
  208. };

  209. /*-------------------------------------月份数据表----------------------------------------*/

  210. static uchar  code day_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};
  211. static unsigned short code day_code2[3]={0x111,0x130,0x14e};

  212. bit c_moon,century;
  213. data uchar year_moon,month_moon,day_moon,week;

  214. /*子函数,用于读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回0------------------*/
  215. static uchar GetMoonDay(uchar month_p,unsigned short table_addr)
  216. {
  217.         switch (month_p)
  218.         {
  219.                 case 1:
  220.                         if((year_code[table_addr]&0x08)==0)                return(0);
  221.                         else                                                                         return(1);
  222.                 case 2:
  223.                         if((year_code[table_addr]&0x04)==0)                return(0);
  224.                         else                                                                         return(1);
  225.                 case 3:
  226.                         if((year_code[table_addr]&0x02)==0)                return(0);
  227.                         else                                                                         return(1);
  228.                 case 4:
  229.                         if((year_code[table_addr]&0x01)==0)                return(0);
  230.                         else                                                                     return(1);
  231.                 case 5:
  232.                         if((year_code[table_addr+1]&0x80)==0)        return(0);
  233.                         else                                                                         return(1);
  234.                 case 6:
  235.                         if((year_code[table_addr+1]&0x40)==0)        return(0);
  236.                         else                                                                         return(1);
  237.                 case 7:
  238.                         if((year_code[table_addr+1]&0x20)==0)        return(0);
  239.                         else                                                                         return(1);
  240.                 case 8:
  241.                         if((year_code[table_addr+1]&0x10)==0)        return(0);
  242.                         else                                                                         return(1);
  243.                 case 9:
  244.                         if((year_code[table_addr+1]&0x08)==0)        return(0);
  245.                         else                                                                         return(1);
  246.                 case 10:
  247.                         if((year_code[table_addr+1]&0x04)==0)        return(0);
  248.                         else                                                                         return(1);
  249.                 case 11:
  250.                         if((year_code[table_addr+1]&0x02)==0)        return(0);
  251.                         else                                                                         return(1);
  252.                 case 12:
  253.                         if((year_code[table_addr+1]&0x01)==0)        return(0);
  254.                         else                                                                         return(1);
  255.                 case 13:
  256.                         if((year_code[table_addr+2]&0x80)==0)        return(0);
  257.                         else                                                                         return(1);
  258.         }
  259.         return(0);
  260. }

  261. /*--------------------------------公历转农历函数-----------------------------------------*/

  262. void Conversion(bit c,uchar year,uchar month,uchar day)
  263. {                        
  264.         uchar temp1,temp2,temp3,month_p;
  265.         uint temp4,table_addr;
  266.         bit flag2,flag_y;
  267.         temp1=year/16; //BCD->hex 先把数据转换为十六进制
  268.         temp2=year%16;
  269.         year=temp1*10+temp2;
  270.         temp1=month/16;
  271.         temp2=month%16;
  272.         month=temp1*10+temp2;
  273.         temp1=day/16;
  274.         temp2=day%16;
  275.         day=temp1*10+temp2;
  276.         //定位数据表地址
  277.         if(c==0) { table_addr=(year+0x64-1)*0x3; }
  278.            else { table_addr=(year-1)*0x3;  }
  279.         //取当年春节所在的公历月份
  280.         temp1=year_code[table_addr+2]&0x60;
  281.         temp1=_cror_(temp1,5);
  282.         //取当年春节所在的公历日
  283.         temp2=year_code[table_addr+2]&0x1f;
  284.         //取当年春节所在的公历日完成
  285.         //计算当年春年离当年元旦的天数,春节只会在公历1月或2月
  286.         if(temp1==0x1)         { temp3=temp2-1; }  
  287.            else                  { temp3=temp2+0x1f-1; }

  288.         // 计算当年春年离当年元旦的天数完成
  289.         //计算公历日离当年元旦的天数,为了减少运算,用了两个表
  290.         //day_code1[9],day_code2[3]
  291.         //如果公历月在九月或前,天数会少于0xff,用表day_code1[9],
  292.         //在九月后,天数大于0xff,用表day_code2[3]
  293.         //如输入公历日为8月10日,则公历日离元旦天数为day_code1[8-1]+10-1
  294.         //如输入公历日为11月10日,则公历日离元旦天数为day_code2[11-10]+10-1
  295.         if(month<10)        { temp4=day_code1[month-1]+day-1; }
  296.                 else             { temp4=day_code2[month-10]+day-1;}

  297. //        if ((month>0x2)&&(year%0x4==0)&&(year!=0)) //此语句造成2000年3月1日—12月31日之间
  298.                                                                                                 //计算农历少算一天,应删除判断语句“&&(year!=0)”
  299.         if ((month>0x2)&&(year%0x4==0))
  300.                 temp4+=1; //如果公历月大于2月并且该年的2月为闰月,天数加1
  301.         //计算公历日离当年元旦的天数完成
  302.          
  303.         //判断公历日在春节前还是春节后
  304.         if (temp4>=temp3)
  305.         {
  306.                 temp4-=temp3; month=0x1;
  307.                 month_p=0x1;  //month_p为月份指向,公历日在春节前或就是春节当日month_p指向首月
  308.                 flag2=GetMoonDay(month_p,table_addr); //检查该农历月为大小还是小月,大月返回1,小月返回0
  309.                 flag_y=0;
  310.       if(flag2==0)temp1=0x1d;   //小月29天
  311.               else    temp1=0x1e;    //大月30天
  312.                 temp2=year_code[table_addr]&0xf0;
  313.                 temp2=_cror_(temp2,4);  //从数据表中取该年的闰月月份,如为0则该年无闰月
  314.                 while(temp4>=temp1)
  315.                 {
  316.                         temp4-=temp1; month_p+=1;
  317.                         if(month==temp2)
  318.                     {
  319.                                 flag_y=~flag_y;
  320.                  if(flag_y==0)month+=1;
  321.                         }
  322.                         else month+=1;
  323.                         flag2=GetMoonDay(month_p,table_addr);
  324.          if(flag2==0)temp1=0x1d;
  325.                  else    temp1=0x1e;
  326.                 }
  327.                 day=temp4+1;
  328.         }
  329.         else
  330.         {  
  331.                 temp3-=temp4;
  332.                 if (year==0x0){year=0x63;c=1;}
  333.                         else        year-=1;
  334.                 table_addr-=0x3;
  335.                 month=0xc;
  336.                 temp2=year_code[table_addr]&0xf0;
  337.                 temp2=_cror_(temp2,4);
  338.                 if (temp2==0)month_p=0xc;
  339.                         else        month_p=0xd;
  340.                 flag_y=0;
  341.                 flag2=GetMoonDay(month_p,table_addr);
  342.                 if(flag2==0)temp1=0x1d;
  343.               else        temp1=0x1e;
  344.                 while(temp3>temp1)
  345.                 {
  346.                         temp3-=temp1;
  347.                         month_p-=1;
  348.                         if(flag_y==0)month-=1;
  349.          if(month==temp2)flag_y=~flag_y;
  350.          flag2=GetMoonDay(month_p,table_addr);
  351.          if(flag2==0)temp1=0x1d;
  352.             else        temp1=0x1e;
  353.                 }
  354.                 day=temp1-temp3+1;
  355.         }
  356.         c_moon=c;
  357.         year_moon=year;
  358.         month_moon=month;
  359.         day_moon=day;
  360. }
  361. /*************************************************************************
  362.         函数功能:输入BCD阳历数据,输出BCD星期数据(只允许1901-2099年)
  363.         调用函数示例:Conver_week(c_sun,year_sun,month_sun,day_sun)
  364.         如:计算2004年10月16日Conversion(0,0x4,0x10,0x16);
  365. *****************************************************************************/

  366. code uchar table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5}; //月修正数据表

  367. /****************************************************************************
  368.         算法:日期+年份+所过闰年数+月较正数之和除7 的余数就是星期但如果是在
  369.         闰年又不到3 月份上述之和要减一天再除7
  370.         星期数为0
  371. *****************************************************************************/


  372. void Conver_week(bit c,uchar year,uchar month,uchar day)
  373. {        //c=0 为21世纪,c=1 为19世纪 输入输出数据均为BCD数据
  374.         unsigned char temp1,temp2;
  375.         write_com(0x30); write_com(0x06);
  376.         temp1=year/16; //BCD->hex 先把数据转换为十六进制
  377.         temp2=year%16;
  378.         year=temp1*10+temp2;
  379.         temp1=month/16;
  380.         temp2=month%16;
  381.         month=temp1*10+temp2;
  382.         temp1=day/16;
  383.         temp2=day%16;
  384.         day=temp1*10+temp2;
  385.         if (c==0){year+=0x64;} //如果为21世纪,年份数加100
  386.         temp1=year/0x4; //所过闰年数只算1900年之后的
  387.         temp2=year+temp1;
  388.         temp2=temp2%0x7; //为节省资源,先进行一次取余,避免数大于0xff,避免使用整型数据
  389.         temp2=temp2+day+table_week[month-1];
  390.         if (year%0x4==0&&month<3)temp2-=1;
  391.         week=temp2%0x7;
  392. }

  393. #endif
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-20 10:30:26 | 显示全部楼层
显示时间和图形头文件
  1. #ifndef __displaytime_H__
  2. #define __displaytime_H__
  3. #include "nongli.h"
  4. #include "zk.h"
  5. #include "bell.h"
  6. #include "LCD12864.h"
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. uchar sec,min,hour,day,date,month,year,week,day_moon;
  10. uchar sel,dd,mo,yy;

  11. /*显示年、月、日、星期-------------------------------------------------------*/
  12. void displaydate(void)
  13. {
  14.         write_com(0x30);
  15.         write_com(0x06);

  16. /*往液晶屏填写 年 数据-------------------------------------------*/
  17.         lcm_w_test(0,0x80);
  18.         lcm_w_word("20");       
  19.         year=read_clock(0x8d);//调用1302时钟数据中的年数据,从地址0x8d中
  20.         lcm_w_test(1,(year/16+0x30));       
  21.         lcm_w_test(1,(year%16+0x30));
  22. //        lcm_w_word("年");
  23.        
  24. /*往液晶屏填写 月 数据-------------------------------------------*/
  25.         month=read_clock(0x89);//调用1302时钟数据中的月数据,从地址0x89中
  26.         lcm_w_word("-");       
  27. /*       
  28.         if(month/10 != 0){write_data((month/10)+0x30);}       
  29.                 else{write_data(0x20);}//十位消隐
  30. */
  31.         lcm_w_test(1,(month/16+0x30));
  32.         lcm_w_test(1,((month%16)+0x30));               
  33. //        lcm_w_word("月");       

  34. /*往液晶屏填写 日 数据-------------------------------------------*/
  35.         date=read_clock(0x87);//从1302芯片中读取日数据,从地址0x87中
  36.         lcm_w_word("-");
  37. /*               
  38.         if(date/10 != 0){write_data((date/10)+0x30);}       
  39.                 else{write_data(0x20);}//十位消隐
  40. */                 
  41.         lcm_w_test(1,(date/16+0x30));
  42.         lcm_w_test(1,(date%16+0x30));
  43. //        lcm_w_word("日");
  44. }

  45. /*往液晶屏填写 星期 数据-----------------------------------------*/
  46. void displayxq(void){

  47.         dd = read_clock(0x87);//日
  48.         mo = read_clock(0x89);//月
  49.         yy = read_clock(0x8d);//年
  50.         Conver_week(0,yy,mo,dd);//调用公历换算星期子函数
  51.    sel=week;//week是公历转换星期子函数的运行结果,结果为0-6,0是星期日
  52.         lcm_w_test(0,0x86);//显示位置
  53.         if(sel==0)  {lcm_w_word("日");}    //0=星期日
  54.           if(sel==6)  {lcm_w_word("六");}    //
  55.           if(sel==5)  {lcm_w_word("五");}    //
  56.           if(sel==4)  {lcm_w_word("四");}    //
  57. //        if(sel==3)  {lcm_w_word("三");}//经调试发现液晶屏不认这一句,只好用下一句显示 三        。需要打补丁才能正确显示。
  58.         if(sel==3)  {lcm_w_test(1,0xc8);lcm_w_test(1,0xfd);} //此指令等于lcm_w_word("三"); 因为“三”的内码失效。
  59.           if(sel==2)  {lcm_w_word("二");}    //
  60.           if(sel==1)  {lcm_w_word("一");}    //星期一
  61.         lcm_w_test(0,0x85);
  62.         lcm_w_word("周");//调用字符显示子函数,显示 "周"

  63. }
  64. /*需要绘图显示的:时、分、秒--------------------------------------------------*/
  65. void displaytime(void)
  66. {
  67. /*往液晶屏填写 小时 数据-----------------------------------------*/
  68. if(read_clock(0x85)!=hour)//更新小时数据,然后整点报时
  69.         {//也可根据个人需要设定在那个时间段进行报时,只需加条if语句便可
  70.         hour = read_clock(0x85);//读取DS1302的小时
  71.         BEEP=0;DelayM(160);BEEP=1;         //整点报时
  72.    
  73.         }                                 
  74.     write_com(0x88);
  75.         write_data((hour/16)+0x30);
  76.         write_data((hour%16)+0x30);
  77.     lcm_w_word(":");
  78. /*往液晶屏填写 分钟 数据-----------------------------------------*/
  79.         min = read_clock(0x83);                 //读取DS1302的 分                               
  80.         write_data((min/16)+0x30);
  81.         write_data((min%16)+0x30);
  82.     lcm_w_word(":");

  83. /*往液晶屏填写 秒钟 数据-----------------------------------------*/
  84.         sec= read_clock(0x81);                  //读取DS1302的 秒
  85.         write_data((sec/16)+0x30);
  86.         write_data((sec%16)+0x30);
  87. }

  88. /*显示农历日期---------------------------------------------------------------*/
  89. void displaynl(void)
  90. {
  91.         Conversion(century,year,month,date);        //公历转农历
  92.         write_com(0x30); write_com(0x06); write_com(0x90);
  93.         if (month_moon==1) {lcm_w_word("正");}
  94.         if (month_moon==2) {lcm_w_word("二");}
  95. //        if (month_moon==2) {lcm_w_word("三");}
  96.         if (month_moon==3) {lcm_w_test(1,0xc8);lcm_w_test(1,0xfd);}
  97.         if (month_moon==4) {lcm_w_word("四");}
  98.         if (month_moon==5) {lcm_w_word("五");}
  99.         if (month_moon==6) {lcm_w_word("六");}
  100.         if (month_moon==7) {lcm_w_word("七");}
  101.         if (month_moon==8) {lcm_w_word("八");}
  102.         if (month_moon==9) {lcm_w_word("九");}
  103.         if (month_moon==10){lcm_w_word("十");}
  104.         if (month_moon==11){lcm_w_word("冬");}
  105.         if (month_moon==12){lcm_w_word("腊");}
  106.                         lcm_w_word("月");

  107.         if (day_moon==1)   {lcm_w_word("初一");}
  108.         if (day_moon==2)   {lcm_w_word("初二");}
  109.         if (day_moon==3)   {lcm_w_word("初");lcm_w_test(1,0xc8);lcm_w_test(1,0xfd);} //“三”的代码
  110.         if (day_moon==4)   {lcm_w_word("初四");}
  111.         if (day_moon==5)   {lcm_w_word("初五");}
  112.         if (day_moon==6)   {lcm_w_word("初六");}
  113.         if (day_moon==7)   {lcm_w_word("初七");}
  114.         if (day_moon==8)   {lcm_w_word("初八");}
  115.         if (day_moon==9)   {lcm_w_word("初九");}
  116.         if (day_moon==10)  {lcm_w_word("初十");}
  117.         if (day_moon==11)  {lcm_w_word("十一");}
  118.         if (day_moon==12)  {lcm_w_word("十二");}
  119.         if (day_moon==13)  {lcm_w_word("十");lcm_w_test(1,0xc8);lcm_w_test(1,0xfd);} //十三
  120.         if (day_moon==14)  {lcm_w_word("十四");}
  121.         if (day_moon==15)  {lcm_w_word("十五");}
  122.         if (day_moon==16)  {lcm_w_word("十六");}
  123.         if (day_moon==17)  {lcm_w_word("十七");}
  124.         if (day_moon==18)  {lcm_w_word("十八");}
  125.         if (day_moon==19)  {lcm_w_word("十九");}
  126.         if (day_moon==20)  {lcm_w_word("二十");}
  127.         if (day_moon==21)  {lcm_w_word("廿一");}
  128.         if (day_moon==22)  {lcm_w_word("廿二");}
  129.         if (day_moon==23)  {lcm_w_word("廿");lcm_w_test(1,0xc8);lcm_w_test(1,0xfd);}        //廿三
  130.         if (day_moon==24)  {lcm_w_word("廿四");}
  131.         if (day_moon==25)  {lcm_w_word("廿五");}
  132.         if (day_moon==26)  {lcm_w_word("廿六");}
  133.         if (day_moon==27)  {lcm_w_word("廿七");}
  134.         if (day_moon==28)  {lcm_w_word("廿八");}
  135.         if (day_moon==29)  {lcm_w_word("廿九");}
  136.         if (day_moon==30)  {lcm_w_test(1,0xc8);lcm_w_test(1,0xfd);lcm_w_word("十");}        //三十

  137. }

  138. /****************************************************************************/
  139. void displayJr(void)  //节日数据库
  140. {       
  141.                 write_com(0x98);
  142. //**********************1月份**********************************************
  143.                 if ( mo == 0x01 && dd == 0x01 ){ lcm_w_word("Happy New Year!!"); }//1月
  144.                 if ( mo == 0x01 && dd == 0x05 ){ lcm_w_word("二十四节气:小寒"); }
  145.                 if ( mo == 0x01 && dd == 0x20 ){ lcm_w_word("二十四节气:大寒"); }
  146.                 if (month_moon== 1 && day_moon == 1 ){  lcm_w_word("※※春节快乐※※");  }//阴历日期填阴历月和日                                                  
  147.                 if (month_moon== 1 && day_moon == 15 ){ lcm_w_word("※元宵节快乐!!※"); }   

  148. //************************2月份*****************************************************                                                                                             
  149.       
  150.                 if ( mo == 0x02 && dd == 0x03 ){ lcm_w_word("二十四节气:立春"); }//2月
  151. //                if ( mo == 0x02 && dd == 0x13 ){ lcm_w_word("  明天情人节了  "); }               
  152.                 if ( mo == 0x02 && dd == 0x14 ){ lcm_w_word("◆情人节快乐!!◆"); }//阳历日期填实际的阳历月和日
  153. //                if ( mo == 0x02 && dd == 0x20 ){ lcm_w_word("二十四节气:雨水"); }//阳历日期填实际的阳历月和日

  154. //**************************3月份***************************************************                               
  155. //                if ( mo == 0x03 && dd == 0x05 ){ lcm_w_word("二十四节气:惊蛰"); }               
  156.                 if ( mo == 0x03 && dd == 0x03 ){ lcm_w_word("二十四节气:春分"); }               
  157.                 if ( mo == 0x03 && dd == 0x08 ){ lcm_w_word("☆三·八妇女节☆"); }
  158.         if ( mo == 0x03 && dd == 0x12 ){ lcm_w_word("┣今天植树节!!┫"); }                       
  159.                 if ( mo == 0x03 && dd == 0x15 ){ lcm_w_word("⊙消费者权益日⊙"); }                       
  160. //                if ( mo == 0x03 && dd == 0x31 ){ lcm_w_word("  明天是愚人节  "); }
  161.                 if ( mo == 0x04 && dd == 0x01 ){ lcm_w_word("愚人节◆小心上当"); }//3       
  162.                
  163. //****************************4月份*************************************************
  164.                 if ( mo == 0x04 && dd == 0x04 ){ lcm_w_word("二十四节气:清明"); }               
  165. //                if ( mo == 0x04 && dd == 0x08 ){ lcm_w_word("今天是复活节"); }               
  166. //                if ( mo == 0x04 && dd == 0x19 ){ lcm_w_word("二十四节气:谷雨"); }               
  167.                 if (month_moon== 5 && day_moon == 5 ){ lcm_w_word("◆今天乃端午节◆"); }  
  168.                
  169. //*****************************5月份************************************************
  170. //                if ( mo == 0x04 && dd == 0x30 ){ lcm_w_word("明天是五一劳动节"); }//5
  171.                 if ( mo == 0x05 && dd == 0x01 ){ lcm_w_word("△五一劳动节!!△"); }//5                                
  172.                 if ( mo == 0x05 && dd == 0x04 ){ lcm_w_word("≌五四青年节!!≌"); }       
  173.                 if ( mo == 0x05 && dd == 0x05 ){ lcm_w_word("二十四节气:立夏"); }                                       
  174. //                if ( mo == 0x05 && dd == 0x05 ){ lcm_w_word("近日注意母亲节  "); }               
  175.                 if ( mo == 0x05 && dd == 0x10 ){ lcm_w_word("★今天是母亲节★"); }
  176. //                if ( mo == 0x05 && dd == 0x20 ){ lcm_w_word("二十四节气:小满"); }       
  177.                        
  178. //****************************6月份*************************************************
  179.                 if ( mo == 0x06 && dd == 0x01 ){ lcm_w_word("※今天是儿童节※"); }//6
  180.                 if ( mo == 0x06 && dd == 0x05 ){ lcm_w_word("二十四节气:芒种"); }               
  181. //                if ( mo == 0x06 && dd == 0x13 ){ lcm_w_word("近日注意父亲节  "); }
  182. //                if ( mo == 0x06 && dd == 0x15 ){ lcm_w_word("近日注意父亲节  "); }
  183.                 if ( mo == 0x06 && dd == 0x21 ){ lcm_w_word("△今天是父亲节△"); }       
  184.                 if (month_moon== 7 && day_moon == 7 ){ lcm_w_word("七夕--中国情人节"); }  
  185.                        
  186. //****************************7月份*************************************************                       
  187. //                if ( mo == 0x07 && dd == 0x06 ){ lcm_w_word("二十四节气:小暑"); }               
  188. //                if ( mo == 0x07 && dd == 0x07 ){ lcm_w_word("抗日战争记念日  "); }
  189. //                if ( mo == 0x07 && dd == 0x22 ){ lcm_w_word("二十四节气:大暑"); }

  190. //****************************8月份*************************************************
  191.             if (month_moon== 8 && day_moon == 15 ){ lcm_w_word("⊙中秋节快乐!!⊙"); }  
  192.                 if ( mo == 0x08 && dd == 0x01 ){ lcm_w_word("〓八一建军节〓=="); }//8
  193.                 if ( mo == 0x08 && dd == 0x07 ){ lcm_w_word("二十四节气:立秋"); }
  194. //                if ( mo == 0x08 && dd == 0x08 ){ lcm_w_word("  中国父亲节    "); }
  195. //                if ( mo == 0x08 && dd == 0x15 ){ lcm_w_word("抗战胜利记念日  "); }
  196. //                if ( mo == 0x08 && dd == 0x22 ){ lcm_w_word("二十四节气:处暑"); }
  197.                 if (month_moon== 9 && day_moon == 9 ){ lcm_w_word("▲今日重阳节!!▲"); }  
  198.                                               
  199. //*******************************9月份**********************************************       
  200. //                if ( mo == 0x09 && dd == 0x07 ){ lcm_w_word("二十四节气:白露"); }//9
  201. //                if ( mo == 0x09 && dd == 0x09 ){ lcm_w_word("  明天是教师节  "); }//9       
  202.                 if ( mo == 0x09 && dd == 0x10 ){ lcm_w_word(">>今天是教师节<<"); }//9
  203. //                if ( mo == 0x09 && dd == 0x18 ){ lcm_w_word("九·一八事变记念"); }
  204.                 if ( mo == 0x09 && dd == 0x22 ){ lcm_w_word("二十四节气:秋分"); }//9

  205. //******************************10月份***********************************************
  206.                 if ( mo == 0x10 && dd == 0x01 ){ lcm_w_word("※国庆节到了!!※"); }//10
  207. //                if ( mo == 0x10 && dd == 0x08 ){ lcm_w_word("二十四节气:寒露"); }       
  208. //                if ( mo == 0x10 && dd == 0x12 ){ lcm_w_word("明天国际教师节  "); }
  209. //                if ( mo == 0x10 && dd == 0x13 ){ lcm_w_word("  国际教师节    "); }
  210.                 if ( mo == 0x10 && dd == 0x23 ){ lcm_w_word("二十四节气:霜降"); }
  211.                                           
  212. //********************************11月份*********************************************
  213.                 if ( mo == 0x11 && dd == 0x07 ){ lcm_w_word("二十四节气:立冬"); }//11
  214. //                if ( mo == 0x11 && dd == 0x22 ){ lcm_w_word("二十四节气:小雪"); }
  215.        
  216. //*********************************12月份********************************************       
  217.             if (month_moon== 12 && day_moon == 8 ){ lcm_w_word("★今天是腊八节★"); }  
  218.             if (month_moon== 12 && day_moon == 15 )    { lcm_w_word("※今天乃小年也※"); }  
  219. //            if (month_moon== 12 && day_moon == 29 ){ lcm_w_word("  腊月二十九    "); }  
  220.             if (month_moon== 12 && day_moon == 30 ){ lcm_w_word("大年三十(*^O^*)!"); }
  221. //                if ( mo == 0x12 && dd == 0x13 ){ lcm_w_word("南京大屠杀纪念日"); }//12
  222. //                if ( mo == 0x12 && dd == 0x07 ){ lcm_w_word("二十四节气:大雪"); }
  223.                 if ( mo == 0x12 && dd == 0x22 ){ lcm_w_word("二十四节气:冬至"); }
  224. //                if ( mo == 0x12 && dd == 0x23 ){ lcm_w_word("  明晚平安夜    "); }
  225.                 if ( mo == 0x12 && dd == 0x24 ){ lcm_w_word("※※平安夜!!※※"); }
  226.                 if ( mo == 0x12 && dd == 0x25 ){ lcm_w_word("▲▲圣诞快乐▲▲"); }
  227. //                if ( mo == 0x12 && dd == 0x31 ){ lcm_w_word("    明日新年    "); }

  228. //****************************生日(阴历)*********************************
  229.                 if (month_moon== 10 && day_moon == 12 ){ lcm_w_word("☆今天爷爷生日☆"); }
  230.             if (month_moon== 10 && day_moon == 21 ){ lcm_w_word("☆今天奶奶生日☆"); }

  231.                 if (month_moon== 2 && day_moon == 12 ){ lcm_w_word("★今天妈妈生日★"); }//爸爸生日
  232.                 if (month_moon== 8 && day_moon == 29 ){ lcm_w_word("★今天爸爸生日★"); }
  233.                
  234.                 if (month_moon== 5 && day_moon == 12 ){ lcm_w_word("※今天妹妹生日※"); }//妹妹生日
  235.                 if (month_moon== 4 && day_moon == 14 ){ lcm_w_word("〓今天我的生日〓"); }//杨慧生日
  236.                 if (month_moon== 3 && day_moon == 19 ){ lcm_w_word("〓今天杨慧生日〓"); }

  237. //***************************非节日********************************************
  238.                 else{
  239.                        
  240.                         if ( hour >= 0x00 && hour <= 0x23 ){ lcm_w_word("★I always O U★");}

  241.         /*                if ( hour >= 0x04 && hour <  0x06 ) { lcm_w_word("★★★凌晨▲▲▲"); }
  242.                         if ( hour >= 0x06 && hour <  0x08 ) { lcm_w_word("☆☆☆早晨△△△"); }
  243.                         if ( hour >= 0x08 && hour <  0x12 ) { lcm_w_word("△△△上午▲▲▲"); }
  244.                         if ( hour == 0x12)                  { lcm_w_word("⊙⊙⊙中午⊙⊙⊙"); }
  245.                         if ( hour >= 0x13 && hour <  0x18 ) { lcm_w_word("▲▲▲下午△△△"); }
  246.                         if ( hour >= 0x18 && hour <  0x22 ) { lcm_w_word("★★★晚上☆☆☆"); }
  247.                         if ( hour >= 0x22 && hour <= 0x23)  { lcm_w_word("★★★夜里★★★");}
  248.                         if ( hour >= 0x00 && hour <  0x04)  { lcm_w_word("◆◆◆深夜◆◆◆"); }
  249.         */
  250.                         }

  251. }


  252. /*显示欢迎信息---------------------------------------------------------------
  253. void welcome(void)
  254. {                                                                  
  255.         write_com(0x80); lcm_w_word("〓〓∧∧∧∧〓〓");
  256.         write_com(0x90); lcm_w_word("Believe yourself");  
  257.         write_com(0x88); lcm_w_word("Don't give up^_^");        
  258.         write_com(0x98); lcm_w_word("〓〓∨∨∨∨〓〓");       
  259. }
  260. */                                                          
  261. void welcome0(void)
  262. {
  263.         write_com(0x80); lcm_w_word("〓黄历电子时钟〓");  
  264.         write_com(0x90); lcm_w_word("<Welcome to use>");
  265.         write_com(0x88); lcm_w_word("Smile 2 our life"); //Smile to our life       
  266.         write_com(0x98); lcm_w_word("〓★2-Feb-11★〓");   
  267. //⊙⊙⊙⊙⊙⊙⊙⊙  ≌≌≌≌≌≌≌≌  ※※※※※※※※   
  268. //╋╋╋╋╋╋╋╋  〓〓〓〓〓〓〓〓  ◆◆◆◆◆◆◆◆  卐卐卐卐卐卐卐卐
  269. //◎◎◎◎◎◎◎◎  ☆☆☆☆☆☆☆☆  ★★★★★★★★  ╳╳╳╳╳╳╳╳
  270. //┣┣┣┣┫┫┫┫  ┳┳┳┳┳┳┳┳  ┻┻┻┻┻┻┻┻  ╲╱╲╱╲╱╲╱  
  271. //╱╲╱╲╱╲╱╲      
  272. //△△△△△△△△  ◤◤◤◤◥◥◥◥  ◣◣◣◣◢◢◢◢  卍卍卍卍卍卍卍卍  
  273. //〇〇〇〇〇〇〇〇  △▽△▽△▽△▽
  274. //              
  275. }

  276. /*---------------------------------------------------------------------------*/
  277. #endif
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-20 10:31:56 | 显示全部楼层
蜂鸣器头文件
  1. #ifndef _BELL_H
  2. #define _BELL_H

  3. #include "delay.h"
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. sbit BEEP=P0^3;


  7. /***************************************************/
  8. void beep()
  9. {
  10.         BEEP=0;
  11.         DelayM(300);
  12.         BEEP=1;
  13.         DelayM(300);
  14. }
  15. /********************报警音***********************************************/
  16. void alarmbeep()
  17. {/*********报警声1*************************/
  18. /*  uchar j;
  19.         for(j=200;j>0;j--)
  20.         {
  21.           BEEP=~BEEP;      
  22.             delay500();      //延时500us

  23.         }

  24.         for(j=200;j>0;j--)
  25.         {
  26.           BEEP=~BEEP;      
  27.           delay500();        
  28.          // delay500();      
  29.         }
  30. */
  31. /*********报警声2************************
  32.         BEEP=0;
  33.     delay500();//延时500us
  34.         DelayM(150);
  35.        
  36.     BEEP=1;      
  37.         DelayM(150);        //产生方波

  38.         BEEP=0;
  39. */

  40. /**************报警声3************************/
  41.         uchar a;//定义变量用于发声的长度设置
  42.         for(a=30;a>0;a--)
  43.         {//第一个声音的长度
  44.                 BEEP = ~BEEP;//取反扬声器驱动口,以产生音频
  45.                 delay500();//延时500us
  46.         //        DelayM(200);
  47.                 DelayM(700);//音调设置延时
  48.         }
  49. /*        for(a=5;a>0;a--){//同上
  50.                 BEEP = ~BEEP;
  51.                 DelayM(80);//
  52.         }
  53.         for(a=5;a>0;a--){//同上
  54.                 BEEP = ~BEEP;
  55.                 DelayM(60);//
  56.         }*/
  57.         BEEP = 1;//音乐结束后扬声器拉高关闭
  58. }                         


  59. #endif
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-3-29 16:18 , Processed in 1.124175 second(s), 21 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

快速回复 返回顶部 返回列表