我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 2785|回复: 1

16x64点阵万年历   纯C语言

[复制链接]

该用户从未签到

19

主题

114

回帖

111

积分

二级逆天

积分
111

社区居民终身成就奖贴图大师奖金点子奖宣传大使奖灌水天才奖幽默大师奖新人进步奖

QQ
发表于 2014-7-6 16:07:32 | 显示全部楼层 |阅读模式
/***************************************************************
      16*64 双色点阵 4字LED点阵屏+DS1302万年历电子钟+温度显示DS18B20 C 程序
/***************************************************************

如果有控制卡,下载此程序插上排线即可测试
如果没有控制卡,自己根据下面的接口用杜邦线与点阵连接即可测试

单片机:STC89C52 或者其他型号都可以    由于扫描口用的是P0 普通51需要加上啦电阻10K 增强型51则不用
晶振18.432M      如果换用其他晶振 DS18B20延时函数需修改  见void delay_18B20(unsigned int i)说明

功能简介:上电移动一下广告,然后进入时间显示
切换显示时间 星期 月日 年 温度
4个按键 分别进行调时设置
切换间隔时间可设置  

/*
点阵屏管脚定义
SHCP   GND
STCP   GND
R1     GND
G1     GND
VCC    GND
A      GND
B      GND
C      D
*/
/*
控制卡
P0.0~P0.3   A B C D
P16 SCK
P17 STR
R1 P04
G1 P05
R2 P06
G2 P07

********************************************************

DS1302 接线图

         Vcc2  CLK I/O  /RST
           
            |   |   |   |
           -------------------
          | 8   7   6   5  |
          |   DS1302       |
          |                |
          | 1   2   3   4  |
           -------------------
            |   |   |   |
         VCC1           GND

1 脚接+5V    2,3脚32768HZ晶振  4脚接地  5脚接S51的P02 6脚接S51的P01 7接S51的P00
8脚接后备电源,可以接老计算机主板上的3.6V电池,也可以通过二级管隔离接一个大容量电解电容
电压在2.5V以上即可维持
                                                     

595连级输出数据,138行驱动。*/

#include <stc89c51rc.h>
#define uchar unsigned char
#define uint unsigned int
#define light 3                        //定义亮度
uchar code hanzi[];                        //汉字字模
uchar code shengri[];                    //生日字模
uchar code timer[13][16];                //0~9数字
uchar code sw[];                        //138驱动数据

void Show_word();                      //待机显示按三秒间隔分别显示年、月日、星期、时分秒。
void Show_pass();                       //不显示一个字
void Send_data(unsigned char *d); /*发送一个字节红色数据*/
void Send_data1(unsigned char *d); /*发送一个字节绿色数据*/
void Send_data2(unsigned char *d);/*发送一个字节黄色色数据*/

/******************************************/
#define DataOut P0  //定义扫描口 占用 P0.0~P0.3
/*按键定义*/
sbit resget=P2^0;            //时钟复位
sbit key_moda=P2^1;            //模式转换
sbit key_up=P2^2;            //时钟加
sbit key_Down=P2^3;            //时钟减
/*DS1302 数据IO定义*/
sbit T_CLK=P1^2;//DS1302引脚连接
sbit T_IO =P1^3;            
sbit T_RST=P1^4;

sbit ACC0=ACC^0;//1bit数据存储位
sbit ACC7=ACC^7;
/*点阵数据IO定义*/
sbit STR=P1^7;              //锁存     
sbit SCK=P1^6;                //时钟     
sbit SERr= P0^4;            //红色数据线
sbit SERg= P0^5;             //绿色数据线
sbit E=P1^0;
/*定义DS18B20 IO接口*/
//sbit DQ= P5 ^ 1;//ds1820data(单总线) 请根据实际 定义接口
      
                   //秒    分    时   日   月   星期  年  所以初始化时间是 12年-7月24日-星期2-22点10分0秒
uchar starts_time[7]={0x00,0x10,0x22,0x24,0x07,0x02,0x12};     //初始化后设置
uchar Move,Speed,Flicker,line,Sec,Cent,Hour,Year,Month,Day,Week;  //时间温度变量
uchar a,b,f,h,msec,id,x;           //标志计数器 a为自动转换显示时间,b为手动与自动标志
uint zimuo,tvalue;                           //字模计数器
uchar BUFF[10];                       //缓存

void   RTInputByte(uchar);         //* 输入 1Byte */
uchar  RTOutputByte(void);         //* 输出 1Byte */
void   W1302(uchar, uchar);        // 向DS1302写入一个字节
uchar  R1302(uchar);               // 从DS1302读出一个字节
void   Set1302(uchar *);           // 写DS1302时间
void   du1302();                   // 读时间  
void   DelayMs(void);              // 延时
void   Set(uchar,uchar );          // 变量调整
void   in_data();                   // 调整移动数据
void   rxd_data();                   // 串口发送移动数据
//read_temp();                   //*读取温度值并转换*/

/*主函数*/
void main()
{  
   Move=0;
   zimuo=0;
   TMOD=0x01;    //16位定时
   TH0=0xC5;    //15ms晶振为12M
   TL0=0x68;
   EA=1;   //开总中断
   TR0=1;  //开定时器计数
   ET0=1;  //开定时器中断0
   while(zimuo<512)    //上电显示一段广告
    {
     while(Move<16)                             //数据移位。
       {
         for(Speed=0;Speed<8;Speed++)       //移动速度
          {   
            for(line=0;line<16;line++)
              {
                 in_data();                     //调整移动数据
                 rxd_data();
                 DataOut=sw[line];                                                      
                 STR=1;//锁存
                   STR=0;
                 STR=1;                 
                 DelayMs();     //延时,等待一问奔洌?谜饬邢允镜哪谌菰谌搜勰诓??笆泳踉萘簟毕窒蟆?/
              }
         }
       Move++;                                 //移动一步
         }
     Move=0;
     zimuo=zimuo+32;
    }   
   zimuo=0;
   while(1)             //重复(无限)循环显示
    {
      if(resget==0)
         {  DelayMs();
            if(resget==0)
                Set1302(starts_time);    //初始化
            W1302(0x8e,0x00);            //控制命令,WP=0,写操作               
            W1302(0x90,0xa5);            //打开充电二级管  一个二级管串联一个2K电阻
        }  
      du1302();      //读取 秒 分 时 日 月 星期 年
     // read_temp();//读取温度
      zimuo=0;                                    
       if (key_moda==0)                     //设置和选择项目键
         {  DelayMs();
            if(key_moda==0)
               {
                  if(id++==10) {id=0;}
                  h=0;msec=0;            //清闪烁标志
                  while(key_moda==0){ Show_word();}   
               }                           
         }

      
      if(id!=0)
      {
      if (key_up==0)                  //增加
         {
            DelayMs();
            if(key_up==0)
               {
                     while(key_up==0)
                        {Show_word();}     //调用显示
                  h=0;msec=0;            //清闪烁标志
                 
                  Set(id,0);             //调用时间调调整
               }  
         }
   
      if (key_Down==0)  //减少
         {
            DelayMs();
            if(key_Down==0)
                {
                  while(key_Down==0)
                      {Show_word();}   //调用显示
                  h=0;msec=0;          //清闪烁标志
                  Set(id,1);           //调用时间调调整
                }         
         }
      }
      else
       {
        if (key_up==0)                  //增加
          {
            DelayMs();
            if(key_up==0)
               {
                     while(key_up==0)
                        {Show_word();}     //调用显示
                  h=0;msec=0;            //清闪烁标志  
                  if(b!=0)                 //手动调整显示的内容
                   {
                     if(f++==5)             //f为显示转换标志
                         f=0;
                   }
              }
            }
       }

   Show_word();      //待机显示按三秒间隔分别显示年、月日、星期、时分秒。

   }      
}
/************************************************/
void Show_word()                         //串行输出显示
{  uchar h;         
   for(h=0;h<16;h++)
    {
             if((id==0)&(f==0)|(id==1))            //f为三秒转换显示
               {
                 Send_data(&timer[0][0]);        //不显示
                 if((Flicker==1)&(id==1))       //闪烁标志为1时不亮,为零时亮
                    { Show_pass();                //不显示一个字
                      Show_pass();
                    }
                 else
                   {
                        Send_data(&timer[2][h]);        //20年   
                      Send_data(&timer[0][h]);
                      Send_data(&timer[Year/16][h]);  //年值   
                      Send_data(&timer[Year%16][h]);
                   }
                 Send_data(&hanzi[h*2+641]);          //年字符  
                 Send_data(&hanzi[h*2+640]);
                 Send_data(&timer[0]);                  //不显示
               }

             if((id==0)&(f==1)|(id==2)|(id==3))                  
              {
                 if((Flicker==1)&(id==2))        //闪烁标志为1时不亮,为零时亮
                    { Show_pass();                //不显示一个字
                     
                    }
                 else
                    {
                      if(Month/16<1)
                           Send_data1(&timer[0]);                 //月十位为零时不显示
                      else
                        Send_data1(&timer[Month/16][h]);      //月值   
                      Send_data1(&timer[Month%16][h]);
                    }
                 Send_data1(&hanzi[h*2+673]);                 //月字符
                 Send_data1(&hanzi[h*2+672]);   
                 if((Flicker==1)&(id==3))                     //闪烁标志为1时不亮,为零时亮
                    { Show_pass();                             //不显示一个字
                     
                    }
                 else
                    {                     
                        Send_data1(&timer[Day/16][h]);          //日值   
                      Send_data1(&timer[Day%16][h]);
                    }
                 Send_data1(&hanzi[h*2+961]);                 //日字符  
                 Send_data1(&hanzi[h*2+960]);
              }

             if((id==0)&(f==2)|(id==4))                         //f为三秒转换显示
              {
                 Send_data2(&timer[0]);                         //不显示
                 Send_data2(&hanzi[h*2+705]);                 //星字符
                 Send_data2(&hanzi[h*2+704]);
                 Send_data2(&hanzi[h*2+737]);                 //期字符
                 Send_data2(&hanzi[h*2+736]);
                 if((Flicker==1)&(id==4))                     //闪烁标志为1时不亮,为零时亮
                    { Show_pass();                             //不显示一个字
                    }
                 else
                    {                        
                       Send_data2(&hanzi[Week%16*32+h*2+737]);       //星期值
                     Send_data2(&hanzi[Week%16*32+h*2+736]);
                    }     
                 Send_data(&timer[0][0]);                     //不显示
              }

            if((id==0)&(f==3)|(id>4))                         //f为三秒转换显示
              {
                 if((Flicker==1)&(id==5))                     //闪烁标志为1时不亮,为零时亮
                    {
                      Show_pass();                             //不显示一个字
                    }
                 else
                    {
                      if(Hour/16<1)
                        Send_data(&timer[0][0]);               //时十位小于1时不显示  
                      else
                        Send_data(&timer[Hour/16][h]);         //时值
                      Send_data(&timer[Hour%16][h]);
                    }
                 Send_data(&timer[10][h]);                       //两个点
                     
                 if((Flicker==1)&(id==6))                       //闪烁标志为1时不亮,为零时亮
                    {
                      Show_pass();                               //不显示一个字
                    }
                 else
                    {
                      Send_data(&timer[Cent/16][h]);   
                        Send_data(&timer[Cent%16][h]);           //分值
                    }
                 Send_data(&timer[10][h]);                     //两个点
                 if((Flicker==1)&(id==7))                       //闪烁标志为1时不亮,为零时亮
                    {                                
                      Show_pass();                               //不显示一个字
                    }
                 else
                    {
                      Send_data(&timer[Sec/16][h]);            //秒
                         Send_data(&timer[Sec%16][h]);  
                      }
              }



             /*if((id==0)&(f==4))                         //f为三秒转换显示
              {           
                 
                 
                 Send_data1(&hanzi[h*2+1185]);                 //温字符
                 Send_data1(&hanzi[h*2+1184]);
                 Send_data1(&hanzi[h*2+1217]);                 //度字符
                 Send_data1(&hanzi[h*2+1216]);
                 Send_data1(&timer[10][h]);                     //两个点            
                 if  (tvalue/10==0x00)
                     Send_data(&timer[0][0]);           
                 else
                     Send_data1(&timer[tvalue/10][h]); //温度值的十位值
                 Send_data1(&timer[tvalue%10][h]);//温度值的个位                    
                 Send_data1(&timer[11][h]);     //温度值的符号
            }  */
            
            if(id>7)                               //id大于7时为对显示转换模式设置
                {    if((Flicker==1)&(id==8))                     
                   {  Show_pass();
                      Show_pass();
                      Show_pass();
                      Show_pass();
                    }
                else if(b==0)
                   {
                      Send_data(&hanzi[h*2+993]);   //显示汉字 “自”
                      Send_data(&hanzi[h*2+992]);
                      Send_data(&hanzi[h*2+1057]);   //显示汉字“动”
                      Send_data(&hanzi[h*2+1056]);     
                      Send_data(&hanzi[h*2+1089]);   //显示汉字“模”
                      Send_data(&hanzi[h*2+1088]);
                      Send_data(&hanzi[h*2+1121]);   //显示汉字“式”
                      Send_data(&hanzi[h*2+1120]);
                   }
                else
                   {
                      Send_data1(&hanzi[h*2+1025]);   //显示汉字“手”
                      Send_data1(&hanzi[h*2+1024]);
                      Send_data1(&hanzi[h*2+1057]);   //显示汉字“动”
                      Send_data1(&hanzi[h*2+1056]);     
                      Send_data1(&hanzi[h*2+1089]);   //显示汉字“模”
                      Send_data1(&hanzi[h*2+1088]);
                      Send_data1(&hanzi[h*2+1121]);   //显示汉字“式”
                      Send_data1(&hanzi[h*2+1120]);
                   }
                if(id==9)
                   {
                     if(b==1)                       //手动模式
                       {
                         id=0;f=0;
                       }
                     else
                       {
                         Send_data(&hanzi[h*2+993]);    //显示汉字“自”
                         Send_data(&hanzi[h*2+992]);
                         Send_data(&hanzi[h*2+1057]);   //显示汉字“动”
                         Send_data(&hanzi[h*2+1056]);
                         if(Flicker==1)
                           {
                             Show_pass();
                           }
                         else
                           {
                             Send_data(&timer[a/10][h]);    //转换时间
                                Send_data(&timer[a%10][h]);
                             }
                         Send_data(&hanzi[h*2+1153]);   //显示汉字“秒”
                         Send_data(&hanzi[h*2+1152]);
                       }
                   }
              }

      
          DataOut=sw[h];                      //输出行信号
          STR=1;STR=0;
           STR=1;                         //锁存为高,595锁存信号
      DelayMs();                  //延时,等待一段时间,让这列显示的内容在人眼内产生“视觉暂留”现象。
     
    }  
    }   

/************************************************/

//temp=255-temp;
//return temp;   
void timer_1(void) interrupt 1     //中断入口,闪烁
{
  TH0=0xC5;              //15ms定时 晶振12M
  TL0=0x68;
  if(msec++==40)         //1000ms
   { msec=0;
     x++;               
     if(x>=a)
       { x=0;
        if(b==0)            //自动模式
        {
        if(f++==4)
          f=0;          //f显示转换计数器 ,d为用户设置的自动转换时间的值。
        }
       }
    if(h++==4)            //5秒后进入正常走时。
       {id=0;h=0;}
    }   
  if(msec<20)
        Flicker=0;     //闪烁标志反转         
  else
        Flicker=1;
                     
}


/***********************输出一个字的不显示数据。*****************/
void Show_pass()
{
  Send_data(&timer[0][0]);                     //不显示
  Send_data(&timer[0][0]);                     //不显示
}

/**********************************************************/
void in_data(void)                               //调整数据
{
char s;
    for(s=4;s>=0;s--)                                //i为向后先择字节计数器,zimuoo为向后先字计数器
    {
     BUFF[2*s+1]=hanzi[zimuo+32*s+2*line];            //把第一个字模的第一个字节放入BUFF0中,第二个字模和第一个字节放入BUFF2中
     BUFF[2*s]=hanzi[zimuo+1+32*s+2*line];            //把第一个字模的第二个字节放入BUFF1中,第二个字模的第二个字节放入BUFF3中

    }
}

/***********************发送移动的数据****************************/
void rxd_data(void)                    //串行发送数据
{
  uchar s;
  uchar inc,tempyid,temp,k;
  if(Move<8)
    inc=0;
  else
    inc=1;
  for(s=0+inc;s<8+inc;s++)           //发送8字节数据
    {
     if(Move<8)
       tempyid=Move;
     else
     tempyid=Move-8;
     temp=(BUFF>>tempyid)|(BUFF[s+1]<<(8-tempyid));    //h1左移tempyid位后和h2右移8-tempyid相或,取出移位后的数据。
     temp=255-temp;
     SERg=1;
    for(k=0;k<8;k++)//一个字节8位 发送给595
    {
        SCK=0; //上升沿移位595               
        SERr=(bit)(temp&0x01);//通过IO口送一个位给 595  发送最低位
        temp=temp>>1;  //字节移位 准备送下一位               
        SCK=1;
    }
     
    }
}


/*******************************************************/
void Send_data(unsigned char *d)      /*发送红色数据*/
{
    uchar temp,k;
    temp=*d;
    SERg=1;
    for(k=0;k<8;k++)//一个字节8位 发送给595
    {
        SCK=0; //上升沿移位595               
        SERr=(bit)(temp&0x01);//通过IO口送一个位给 595  发送最低位
        temp=temp>>1;  //字节移位 准备送下一位               
        SCK=1;
    }
}
/************************************************************/
void Send_data1(unsigned char *d)/*发送绿色数据*/
{
    uchar temp,k;
    temp=*d;
    SERr=1;
    for(k=0;k<8;k++)//一个字节8位 发送给595
    {
        SCK=0; //上升沿移位595               
        SERg=(bit)(temp&0x01);//通过IO口送一个位给 595  发送最低位
        temp=temp>>1;  //字节移位 准备送下一位               
        SCK=1;
    }
}
/***************************************************************/
void Send_data2(unsigned char *d)/*发送黄色数据*/
{
    uchar temp,k;
    temp=*d;
   
    for(k=0;k<8;k++)//一个字节8位 发送给595
    {
        SCK=0; //上升沿移位595               
        SERr=SERg=(bit)(temp&0x01);//通过IO口送一个位给 595 发送最低位
        temp=temp>>1;  //字节移位 准备送下一位               
        SCK=1;
    }
}
/***************************************************************/
//根据选择调整相应项目
void Set(uchar sel,uchar sel_1)
{
  uchar address,time;
  uchar max,min;
  if(sel==9)  {address=0xc2; max=20;min=1;}    //自动转换时间时最大为20秒。
  if(sel==8)  {address=0xc0; max=1;min=0; }     //显示自动转换或手动转换。为零自动,为1手动。
  if(sel==7)  {address=0x80; max=59;min=0;}     //秒
  if(sel==6)  {address=0x82; max=59;min=0;}    //分钟
  if(sel==5)  {address=0x84; max=23;min=0;}    //小时
  if(sel==4)  {address=0x8a; max=7; min=1;}    //星期
  if(sel==3)  {address=0x86; max=31;min=1;}    //日
  if(sel==2)  {address=0x88; max=12;min=1;}    //月
  if(sel==1)  {address=0x8c; max=99;min=0;}    //年
  
  
  time=R1302(address+1)/16*10+R1302(address+1)%16;
  if (sel_1==0) time++;  else time--;
  if(time>max) time=min;   
  if(time<min) time=max;
           
  W1302(0x8e,0x00);
  W1302(address,time/10*16+time%10);
  W1302(0x8e,0x80);  
}

/**************************延时***********************/

void DelayMs(void)
{
  uchar TempCyc;
  for(TempCyc=110;TempCyc>1;TempCyc--)
     {;}
}

//********DS1302读写程序***************//
/********************************************************************
函 数 名:RTInputByte()
功    能:实时时钟写入一字节
说    明:往DS1302写入1Byte数据 (内部函数)
入口参数:d 写入的数据
返 回 值:无  
***********************************************************************/
void RTInputByte(uchar d)
{
    uchar h;
    ACC = d;
    for(h=8; h>0; h--)
    {
        T_IO = ACC0;           /*相当于汇编中的 RRC */
        T_CLK = 1;
        T_CLK = 0;
        ACC = ACC >> 1;
    }
}
/********************************************************************
函 数 名:RTOutputByte()
功    能:实时时钟读取一字节
说    明:从DS1302读取1Byte数据 (内部函数)
入口参数:无  
返 回 值:ACC
设    计:zhaojunjie           日    期:2002-03-19
修    改:                     日    期:
***********************************************************************/
uchar RTOutputByte(void)
{
    uchar h;
    for(h=8; h>0; h--)
    {
        ACC = ACC >>1;         /*相当于汇编中的 RRC */
        ACC7 = T_IO;
        T_CLK = 1;
        T_CLK = 0;
    }
    return(ACC);
}
/********************************************************************
函 数 名:W1302()
功    能:往DS1302写入数据
说    明:先写地址,后写命令/数据 (内部函数)
调    用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址, ucData: 要写的数据
返 回 值:无
***********************************************************************/
void W1302(uchar ucAddr, uchar ucDa)
{
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(ucAddr);       /* 地址,命令 */
    RTInputByte(ucDa);       /* 写1Byte数据*/
    T_CLK = 1;
    T_RST = 0;
}
/********************************************************************
函 数 名:R1302()
功    能:读取DS1302某地址的数据
说    明:先写地址,后读命令/数据 (内部函数)
调    用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址
返 回 值:ucData :读取的数据
***********************************************************************/
uchar R1302(uchar ucAddr)
{
    uchar ucData;
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(ucAddr);             /* 地址,命令 */
    ucData = RTOutputByte();         /* 读1Byte数据 */
    T_CLK = 1;
    T_RST = 0;
    return(ucData);
}

/********************************************************************
函 数 名:Set1302()
功    能:设置初始时间
说    明:先写地址,后读命令/数据(寄存器多字节方式)
调    用:W1302()
入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
                               7Byte (BCD码)1B 1B 1B 1B 1B  1B  1B
返 回 值:无
***********************************************************************/
void Set1302(uchar *pClock)
{
    uchar h;
    uchar ucAddr = 0x80;
    W1302(0x8e,0x00);           /* 控制命令,WP=0,写操作?*/
    for(h =7; h>0; h--)
    {
        W1302(ucAddr,*pClock);  /* 秒 分 时 日 月 星期 年 */
        pClock++;
        ucAddr +=2;
    }
    W1302(0xc0,0x01);
    W1302(0XC2,0X03);            //初始自动转换显示时间为3秒。
    W1302(0x8e,0x80);           /* 控制命令,WP=1,写保护?*/

}
/******************读取DS1302中的时间****************/
void du1302()
{
      Sec=R1302(0x81);   //对取 秒 分 时 日 月 星期 年
      Cent=R1302(0x83);
      Hour=R1302(0x85);
      Day=R1302(0x87);
      Month=R1302(0x89);
      Week=R1302(0x8b);
      Year=R1302(0x8d);               
      b=R1302(0xc1);
      a=R1302(0xc3);
      a=a/16*10+a%16;
     
}



/******************************ds1820程序***************************************/
/*void delay_18B20(unsigned int i)//延时1微秒
{
   i=i*6;  //由于我用的是1T 51单片机 如果用普通51请 把这句话屏蔽
   while(i--);
} */
/*void ds1820rst()//ds1820复位
{ unsigned char x=0;
DQ = 1;          //DQ复位
delay_18B20(4); //延时
DQ = 0;          //DQ拉低
delay_18B20(100); //精确延时大于480us
DQ = 1;          //拉高
delay_18B20(40);
   }

   uchar ds1820rd()//读数据
{ unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{   DQ = 0; //给脉冲信号
    dat>>=1;
    DQ = 1; //给脉冲信号
    if(DQ)
    dat|=0x80;
    delay_18B20(10);
}
   return(dat);
}*/
/*void ds1820wr(uchar wdata)//写数据
{unsigned char i=0;
    for (i=8; i>0; i--)
   { DQ = 0;
     DQ = wdata&0x01;
     delay_18B20(10);
     DQ = 1;
     wdata>>=1;
   }
}
read_temp()//读取温度值并转换
{

uchar a,b;
ds1820rst();   
ds1820wr(0xcc);//跳过读序列号
ds1820wr(0x44);//启动温度转换
ds1820rst();   
ds1820wr(0xcc);//跳过读序列号
ds1820wr(0xbe);//读取温度
a=ds1820rd();
b=ds1820rd();
tvalue=b*16+a/16;

     //tvalue=b;

    //tvalue<<=8;
   //tvalue=tvalue|a;
    //if(tvalue<0x0fff)
    //tflag=0;
    // else
   //{tvalue=~tvalue+1;
    //tflag=1;
   //}
return(tvalue);
} */
/*******************************************************************/
// uchar code sw[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};/*16行段码*/
//如果用自己的单片机实验板连接A B C D 一一对应,则用这个扫描数据
//uchar code sw[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,};/*16行段码*///138驱动数据

//下面的A B C D行扫描数据是反向的 配套我们的控制卡用                 
uchar code sw[16]={0X00,0X08,0x04,0x0C,0X02,0X0A,0X06,0X0E,0X01,0X09,0X05,0X0D,0X03,0X0B,0X07,0X0F};/*16行段码*///138驱动数据

const uchar code timer[13][16]={        /*0~9字符*/

/*--  文字:  0  --*/
/*--  Book Antiqua12;  此字体下对应的点阵为:宽x高=8x20   --*/

0xFF,0xFF,0xE3,0xDD,0xBE,0xBE,0xBE,0xBE,0xBE,0xBE,0xBE,0xBE,0xDD,0xE3,0xFF,0xFF,
/*--  文字:  1  --*/
/*--  Book Antiqua12;  此字体下对应的点阵为:宽x高=8x20   --*/
0xFF,0xFF,0xEF,0xE7,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0x83,0xFF,0xFF,


/*--  文字:  2  --*/
/*--  Book Antiqua12;  此字体下对应的点阵为:宽x高=8x20   --*/
0xFF,0xFF,0xC7,0xBB,0x7D,0x7F,0x7F,0xBF,0xCF,0xF7,0xFB,0xFD,0xFD,0x01,0xFF,0xFF,

/*--  文字:  3  --*/
/*--  Book Antiqua12;  此字体下对应的点阵为:宽x高=8x20   --*/
0xFF,0xFF,0xC7,0xBB,0x7D,0x7F,0xBF,0xC7,0xBF,0x7F,0x7F,0x7D,0xBB,0xC7,0xFF,0xFF,

/*--  文字:  4  --*/
/*--  Book Antiqua12;  此字体下对应的点阵为:宽x高=8x20   --*/
0xFF,0xFF,0xCF,0xCF,0xD7,0xD7,0xDB,0xDB,0xDD,0xDD,0xDE,0x00,0xDF,0xDF,0xFF,0xFF,

/*--  文字:  5  --*/
/*--  Book Antiqua12;  此字体下对应的点阵为:宽x高=8x20   --*/
0xFF,0xFF,0x01,0xFD,0xFD,0xFD,0xC5,0xB9,0x7D,0x7F,0x7F,0x7D,0xBB,0xC7,0xFF,0xFF,

/*--  文字:  6  --*/
/*--  Book Antiqua12;  此字体下对应的点阵为:宽x高=8x20   --*/
0xFF,0xFF,0xC7,0xBB,0x7D,0xFD,0xFD,0xC5,0xB9,0x7D,0x7D,0x7D,0xBB,0xC7,0xFF,0xFF,

/*--  文字:  7  --*/
/*--  Book Antiqua12;  此字体下对应的点阵为:宽x高=8x20   --*/
0xFF,0xFF,0x01,0x7F,0xBF,0xDF,0xDF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xFF,0xFF,

/*--  文字:  8  --*/
/*--  Book Antiqua12;  此字体下对应的点阵为:宽x高=8x20   --*/
0xFF,0xFF,0xE3,0xDD,0xBE,0xBE,0xDD,0xE3,0xDD,0xBE,0xBE,0xBE,0xDD,0xE3,0xFF,0xFF,

/*--  文字:  9  --*/
/*--  Book Antiqua12;  此字体下对应的点阵为:宽x高=8x20   --*/
0xFF,0xFF,0xC7,0xBB,0x7D,0x7D,0x7D,0x3B,0x47,0x7F,0x7F,0x7F,0xBD,0xC3,0xFF,0xFF,

/*--  文字:  :  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0xFF,0xFF,0xFF,0xFF,0xE7,0xE7,0xFF,0xFF,0xFF,0xFF,0xE7,0xE7,0xFF,0xFF,0xFF,0xFF,

/*--  文字:  C温度符号  --*/
0xFF,0xFC,0xFC,0x83,0xBD,0xBD,0xFE,0xFE,0xFE,0xFE,0xFE,0xBD,0xDD,0xE3,0xFF,0xFF,
/*--  -  --  **  宋体, 12  **

/*--黑屏字符--*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,


};


const uchar code hanzi[]={/*移动显示汉字字模,*/

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,
/*--  文字:  i y  17--*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
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,

/*--  文字:  . c 18--*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
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,


/*--  文字:  om  19--*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
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,
0x01,0x00,0x01,0x00,0x01,0x3F,0x7F,0xA0,0x20,0xA1,0x12,0x52,0x02,0x14,0x02,0x08,
0x02,0x18,0x06,0x18,0x05,0x24,0x09,0x24,0x18,0x82,0x70,0x61,0x20,0x1C,0x00,0x00,/*"欢",0*/

0x00,0x02,0x01,0x84,0x3E,0x6C,0x22,0x24,0x22,0x20,0x22,0x20,0x22,0x27,0x22,0x24,
0x22,0xA4,0x2A,0x64,0x12,0x24,0x02,0x04,0x02,0x04,0x00,0x0A,0x7F,0xF1,0x00,0x00,/*"迎",1*/

0x00,0x80,0x08,0x84,0x18,0x98,0x08,0xB0,0x04,0x90,0x20,0x80,0x7F,0xFE,0x02,0x20,
0x02,0x20,0x02,0x20,0x02,0x20,0x42,0x10,0x42,0x10,0x42,0x08,0x7C,0x04,0x00,0x02,/*"光",2*/

0x00,0x80,0x01,0x90,0x00,0x90,0x7F,0x92,0x04,0x52,0x08,0x52,0x08,0x32,0x20,0x92,
0x7F,0x92,0x24,0x92,0x24,0x92,0x24,0x92,0x24,0x92,0x3F,0x90,0x20,0x90,0x00,0x00,/*"临",3*/

0x02,0x60,0x0A,0x1C,0x12,0x10,0x12,0x10,0x02,0x10,0x7F,0xFF,0x02,0x10,0x12,0x10,
0x14,0x70,0x0C,0x1C,0x04,0x13,0x0A,0x10,0x49,0x90,0x50,0x10,0x60,0x14,0x40,0x08,/*"我",4*/

0x01,0x08,0x01,0x08,0x01,0x04,0x3F,0x3E,0x20,0xA2,0x20,0xA2,0x20,0x62,0x21,0x3E,
0x22,0x22,0x26,0x22,0x24,0x22,0x20,0x22,0x20,0x3E,0x14,0x22,0x08,0x02,0x00,0x00,/*"的",5*/

0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x02,0x90,0x04,0xB0,0x08,0x98,0x18,0x88,
0x30,0x84,0x60,0x82,0x20,0x81,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xA0,0x00,0x40,/*"小",6*/

0x04,0x00,0x04,0x04,0x04,0x08,0x04,0x08,0x7C,0x7F,0x04,0x20,0x04,0x22,0x04,0x24,
0x3F,0x94,0x20,0x94,0x20,0x88,0x20,0xBC,0x20,0x83,0x3F,0x80,0x20,0x80,0x00,0x00,/*"站",7*/



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,

/*--  文字:  祝  8--*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x04,0x1F,0x88,0x10,0x88,0x10,0xBF,0x10,0xA0,0x10,0x90,0x10,0x88,0x1F,0x9C,
0x09,0x2A,0x09,0x29,0x09,0x08,0x09,0x08,0x48,0x88,0x48,0x88,0x48,0x48,0x70,0x28,
/*--  文字:  大  9--*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x7F,0xFF,0x00,0x80,0x01,0x40,
0x01,0x40,0x02,0x40,0x02,0x20,0x04,0x20,0x08,0x10,0x18,0x08,0x70,0x04,0x20,0x02,

/*--  文字:  家  10--*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x40,0x00,0x80,0x7F,0xFC,0x20,0x02,0x17,0xFA,0x00,0x80,0x00,0x40,0x04,0xF0,
0x0D,0x4E,0x03,0x20,0x03,0x98,0x0D,0x66,0x71,0x18,0x21,0x06,0x00,0xA0,0x00,0x40,

/*--  文字:  学  11--*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x80,0x31,0x08,0x13,0x30,0x09,0x10,0x7F,0xFE,0x20,0x02,0x17,0xF1,0x02,0x00,
0x01,0x00,0x7F,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x40,0x00,0x80,


/*--  文字:  习 12--*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x3F,0xFC,0x20,0x00,0x20,0x10,0x20,0x20,0x20,0xC0,0x28,0x80,0x26,0x00,
0x21,0x80,0x20,0x60,0x20,0x1C,0x20,0x08,0x20,0x00,0x24,0x00,0x28,0x00,0x10,0x00,

/*--  文字:  进 13--*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x08,0x80,0x08,0x82,0x08,0x84,0x3F,0xEC,0x08,0x84,0x08,0x80,0x08,0x80,0x7F,0xEF,
0x08,0x88,0x08,0x88,0x08,0x48,0x08,0x48,0x08,0x28,0x00,0x14,0x7F,0xE2,0x00,0x00,

/*--  文字:  步 14--*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x01,0x00,0x01,0x00,0x1F,0x10,0x01,0x10,0x01,0x10,0x7F,0xFE,0x01,0x00,0x01,0x10,
0x11,0x10,0x31,0x08,0x09,0x06,0x04,0x00,0x03,0x00,0x00,0xE0,0x00,0x1E,0x00,0x00,



/*--  文字:  年  --*/
/*--  华文新魏12;  此字体下对应的点阵为:宽x高=16x17   --*/
0xFF,0xEF,0xC0,0x0F,0xFE,0xF7,0xFE,0xF7,0xFE,0xFB,0xE0,0x0D,0xFE,0xEE,0xFE,0xEF,
0xFE,0xEF,0xFE,0xEF,0x80,0x00,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFF,0xFF,

/*--  文字:  月  --*/
/*--  华文新魏12;  此字体下对应的点阵为:宽x高=16x17   --*/
0xF0,0x1F,0xF7,0xDF,0xF7,0xDF,0xF7,0xDF,0xF0,0x1F,0xF7,0xDF,0xF7,0xDF,0xF7,0xDF,
0xF0,0x1F,0xF7,0xDF,0xF7,0xEF,0xF7,0xEF,0xF7,0xF7,0xF5,0xFB,0xFB,0xFD,0xFF,0xFF,


/*--  文字:  星  --*/
/*--  华文新魏12;  此字体下对应的点阵为:宽x高=16x17   --*/
0xFF,0xFF,0xE0,0x07,0xEF,0xF7,0xE0,0x07,0xEF,0xF7,0xE0,0x07,0xFF,0x7F,0xFF,0x77,
0xC0,0x07,0xFF,0x7B,0xFF,0x7B,0xE0,0x0D,0xFF,0x7F,0xFF,0x7F,0x80,0x01,0xFF,0xFF,

/*--  文字:  期  --*/
/*--  华文新魏12;  此字体下对应的点阵为:宽x高=16x17   --*/
0xFF,0xBB,0xC1,0xBB,0xDD,0x01,0xDD,0xBB,0xDD,0x83,0xC1,0xBB,0xDD,0x83,0xDD,0xBB,
0xDD,0xBB,0xC1,0x00,0xDD,0xFF,0xDE,0xDB,0xDE,0xBB,0xD7,0x3D,0xEF,0x7E,0xFF,0xFF,


/*--  文字:  一  --*/
/*--  华文新魏12;  此字体下对应的点阵为:宽x高=16x17   --*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x01,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,


/*--  文字:  二  --*/
/*--  华文新魏12;  此字体下对应的点阵为:宽x高=16x17   --*/
0xFF,0xFF,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,


/*--  文字:  三  --*/
/*--  华文新魏12;  此字体下对应的点阵为:宽x高=16x17   --*/
0xFF,0xFF,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x03,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0xFF,0xFF,

/*--  文字:  四  --*/
/*--  华文新魏12;  此字体下对应的点阵为:宽x高=16x17   --*/
0xFF,0xFF,0xC0,0x01,0xDE,0xDD,0xDE,0xDD,0xDE,0xDD,0xDE,0xDD,0xDE,0xDD,0xDE,0xDD,
0xDE,0xED,0xC1,0xED,0xDF,0xF5,0xDF,0xF9,0xDF,0xFD,0xC0,0x01,0xFF,0xFF,0xFF,0xFF,

/*--  文字:  五  --*/
/*--  华文新魏12;  此字体下对应的点阵为:宽x高=16x17   --*/
0xFF,0xFF,0xE0,0x01,0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,0xF8,0x03,
0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0x80,0x00,0xFF,0xFF,0xFF,0xFF,

/*--  文字:  六  --*/
/*--  华文新魏12;  此字体下对应的点阵为:宽x高=16x17   --*/
0xFF,0xDF,0xFF,0xBF,0xFF,0x7F,0xFF,0x7F,0x80,0x00,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,
0xFD,0x9F,0xFB,0xDF,0xF7,0xEF,0xE7,0xEF,0xEF,0xF7,0xCF,0xFB,0xDF,0xFD,0xFF,0xFF,



/*--  文字:  日  --*/
/*--  华文新魏12;  此字体下对应的点阵为:宽x高=16x17   --*/
0xFF,0xFF,0xF0,0x07,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF0,0x07,0xF7,0xF7,
0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF0,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

/*--  文字:  自  31--*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xFF,0x7F,0xFF,0x7F,0xFF,0xBF,0xE0,0x07,0xEF,0xF7,0xEF,0xF7,0xE0,0x07,0xEF,0xF7,
0xEF,0xF7,0xEF,0xF7,0xE0,0x07,0xEF,0xF7,0xEF,0xF7,0xEF,0xF7,0xE0,0x07,0xFF,0xFF,

/*--  文字:  手  32--*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xFF,0xFF,0xE0,0x7F,0xFF,0x01,0xFF,0x7F,0xFF,0x7F,0xC0,0x01,0xFF,0x7F,0xFF,0x7F,
0xFF,0x7F,0x80,0x00,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x5F,0xFF,0x3F,0xFF,0xFF,

/*--  文字:  动  33--*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xFB,0xFF,0xFB,0xFF,0xFB,0x81,0xFB,0xFF,0xC0,0xFF,0xDB,0x00,0xDB,0xF7,0xDB,0xF7,
0xDB,0xDB,0xDB,0xBB,0xDD,0x0D,0xDD,0xA0,0xDE,0xFD,0xD7,0x7F,0xEF,0xBF,0xFF,0xFF,

/*--  文字:  模 34--*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF6,0xFB,0xF6,0xFB,0xC0,0x1B,0xF6,0xFB,0xE0,0x20,0xEF,0xBB,0xE0,0x31,0xEF,0xA9,
0xE0,0x3A,0xFD,0xFA,0x80,0x1B,0xFD,0xFB,0xFA,0xFB,0xE6,0xFB,0x8F,0x1B,0xFF,0xFF,

/*--  文字:  式  35--*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xFE,0xFF,0xFA,0xFF,0xF6,0xFF,0xC0,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0x83,
0xFD,0xEF,0xFD,0xEF,0xFD,0xEF,0xFB,0x2F,0x7B,0xC7,0x77,0xF1,0x8F,0xFF,0xFF,0xFF,



/*--  文字:  秒  --*/
/*--  华文新魏12;  此字体下对应的点阵为:宽x高=16x17   --*/
0xFB,0xCF,0xFB,0xF0,0xFB,0xF7,0xEB,0x77,0xDA,0x40,0xBB,0x77,0xBB,0xB3,0xFB,0xA3,
0xBB,0xD5,0xBB,0xD5,0xDF,0xF6,0xEF,0xF7,0xF7,0xF7,0xF9,0xF7,0xFE,0x77,0xFF,0xFF,

/*--  文字:  温  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xFF,0xFD,0xF0,0x1B,0xF7,0xDB,0xF0,0x1F,0xF7,0xD6,0xF7,0xD5,0xF0,0x17,0xFF,0xFB,
0xC0,0x0B,0xDB,0x6C,0xDB,0x6D,0xDB,0x6D,0xDB,0x6D,0xDB,0x6D,0x80,0x05,0xFF,0xFF,

/*--  文字:  度  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xFF,0x7F,0xFE,0xFF,0x80,0x03,0xFB,0xBB,0xFB,0xBB,0xC0,0x0B,0xFB,0xBB,0xF8,0x3B,
0xFF,0xFB,0xF0,0x3B,0xF7,0xBB,0xFB,0x7B,0xFC,0xFB,0xF3,0x7D,0x8F,0x9E,0xFF,0xFF,

};
回复

使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 100 天

    [LV.6]常住居民II

    49

    主题

    1万

    回帖

    7万

    积分

    三级逆天

    积分
    73169

    终身成就奖特殊贡献奖原创先锋奖社区居民忠实会员社区劳模最爱沙发社区明星原创达人优秀斑竹奖宣传大使奖

    QQ
    发表于 2014-7-6 18:16:06 | 显示全部楼层
    回复

    使用道具 举报

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

    本版积分规则

    论坛开启做任务可以
    额外奖励金币快速赚
    积分升级了


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    平平安安
    TOP
    快速回复 返回顶部 返回列表