打印

STC89C52+带字库lcd12864显示星期问题

[复制链接]
3528|15
手机看帖
扫描二维码
随时随地手机跟帖
沙发
gaoyuaug|  楼主 | 2012-4-7 19:57 | 只看该作者
上图,从DS1302里读出数据后,星期赋值该怎样操作呀,因为一个汉字占用两个单元,我搞不懂哦,如图为什么会出错呢?

使用特权

评论回复
板凳
gaoyuaug|  楼主 | 2012-4-7 22:08 | 只看该作者
也就是说星期值更新不了,用按键操作也不能更新,给个思路呀

使用特权

评论回复
地板
NE5532| | 2012-4-7 22:27 | 只看该作者
先在内存里硬赋值看看能不能显示,再逐步往后退回到RTC上,别胡子眉毛一把抓。

使用特权

评论回复
5
gaoyuaug|  楼主 | 2012-4-7 22:49 | 只看该作者
星期几显示汉字不能的;但如果改显成数字就可以,还有另一半是乱码的,

使用特权

评论回复
6
gaoyuaug|  楼主 | 2012-4-7 22:53 | 只看该作者
void main(void)
        {
                buz();
                Lcm_Init();
                Display_String(1,0,string_4);
                Display_String(2,0,string_2);
                Display_String(3,0,string_3);
                Display_String(4,0,string_4);
                Delay_Ms(1000);

                Wr_Command(0x01,1);
                Delay_Ms(250);

                Display_String(1,0,string_4);
                Display_String(2,0,string_2);
                Display_String(3,0,string_3);
                Display_String(4,0,string_4);
                Delay_Ms(1000);
                Wr_Command(0x01,1);
               
                Display_String(1,0,string_2);
                Display_String(2,0,Display);
                Display_String(3,0,Display_1);
                Display_String(4,0,Display_2);

                Set_RTC();
                //Wr_1302(0x80,0x00);
                while(1)
                {
                        Key_Scan();
                        Rd_RTC();
                        change();
                        Display_String(1,0,string_2);
                        Display_String(2,0,Display);
                        Display_String(3,0,Display_1);
                        Display_String(4,0,Display_2);//Display_2[]="星期"
                        Wr_Command(0x9a,1);
                        if(Week_Count==1)
                        Wr_Word("一");
                        if(Week_Count==2)
                        Wr_Word("二");
                        if(Week_Count==3)
                        Wr_Word("三");
                        if(Week_Count==4)
                        Wr_Word("四");
                        if(Week_Count==5)
                        Wr_Word("五");
                        if(Week_Count==6)
                        Wr_Word("六");
                        if(Week_Count==7)
                        Wr_Word("日");               

                        Delay_Ms(50);       
             }
         }这样星期几还是显示不出来

使用特权

评论回复
7
NE5532| | 2012-4-7 22:53 | 只看该作者
西文必须连续2个以后才能跟中文,单个西文后面跟中文,无法(敏感词)正确解码,字库液晶的特点。楼主照我4楼方法一做就可以发现这个问题了,都喂到嘴边了都不想思考,哎~!

使用特权

评论回复
8
gaoyuaug|  楼主 | 2012-4-7 23:14 | 只看该作者
是啊,就显示汉字不出来,第一楼图片那样的赋值语句为什么不对呀?我想不通

使用特权

评论回复
9
gaoyuaug|  楼主 | 2012-4-7 23:18 | 只看该作者
//-----------------------------------------------------------
void main(void)
{
  buz();
  Lcm_Init();
  Display_String(1,0,string_4);
  Display_String(2,0,string_2);
  Display_String(3,0,string_3);
  Display_String(4,0,string_4);
  Delay_Ms(1000);
  Wr_Command(0x01,1);
  Delay_Ms(250);
  Display_String(1,0,string_4);
  Display_String(2,0,string_2);
  Display_String(3,0,string_3);
  Display_String(4,0,string_4);
  Delay_Ms(1000);
  Wr_Command(0x01,1);
  
  Display_String(1,0,string_2);
  Display_String(2,0,Display);
  Display_String(3,0,Display_1);
  Display_String(4,0,Display_2);
  Set_RTC();
  //Wr_1302(0x80,0x00);
  while(1)
  {
   Key_Scan();
   Rd_RTC();
   change();
   Display_String(1,0,string_2);
   Display_String(2,0,Display);
   Display_String(3,0,Display_1);
   Display_String(4,0,Display_2);
   Delay_Ms(50);
      }
  }
这样赋值为什么会报错呢?

未命名.JPG (62.36 KB )

未命名.JPG

使用特权

评论回复
10
gaoyuaug|  楼主 | 2012-4-7 23:44 | 只看该作者
我想了一天,都没有想出来

使用特权

评论回复
11
gaoyuaug|  楼主 | 2012-4-8 00:17 | 只看该作者
中文的星期几还是搞不出来,搞个数字的

IMAG0006.JPG (745.03 KB )

IMAG0006.JPG

使用特权

评论回复
12
NE5532| | 2012-4-8 08:17 | 只看该作者
那你第一张星期五是怎么弄出来的?

使用特权

评论回复
13
gaoyuaug|  楼主 | 2012-4-8 08:48 | 只看该作者
#include<reg52.h>
       
        #define uchar unsigned char
        #define uint unsigned int
        #define LCMdata P0
        #define Busy 0x80

//Lcd_part
        sbit RS        =        P2^0;  
        sbit RW        =        P2^1;  
        sbit E        =        P2^2;  
        sbit REST =        P2^5;
        sbit PSB =        P2^3;
//Key_part
        sbit Key_1 = P1^4;
        sbit Key_2 = P1^5;
    sbit Key_3 = P1^6;
        sbit Key_4 = P1^7;
//Ds1302_part
        sbit Sclk = P1^0;
        sbit IO = P1^1;
        sbit Rst = P1^2;

        sbit Buz = P3^7;
       
        uchar Key_Select,Key_Flag,Key_Count,Set1;
        uchar Time_Flag,TimeCount,Week_Count=0;
        uchar Sec=0;uchar Min=30;uchar Hour=7;
        uchar Date=8;uchar Mouth=4;uchar Year=12;uchar Week=5;
        uchar Display_number[14] = {"0123456789: -"};
          
        uchar Rd_addr[] = {0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
        uchar Wr_addr[] = {0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};

        uchar Display[] = {"2012年04月06日**"};
        uchar Display_1[]={"19时36分00秒****"};
        uchar Display_2[]={"星期"};
        uchar code hznumber[] = {"壹贰参肆伍陆日"};
        uchar code string_1[] = {"百年大计质量为上"};
        uchar code string_2[] = {"  ----时钟----  "};
        uchar code string_3[] = {"  ----日历----  "};  
        uchar code string_4[] = {"****************"};

       
   void Wr_Word(uchar *s);
   void Wr_Command(uchar wrcommand,busyc);
   void Display_String(uchar line,uchar Y,uchar *string);

        void Delay5Ms(void) //延时 5ms
        {
                unsigned int TempCyc=5552;
                while(TempCyc--);
        }
//-------------------------------------------------------
        void Delay_Ms(uint Mtime)
        {
                uint i,j;
                for(i=Mtime;i>0;i--)
                for(j=122;j>0;j--)
                {;}
        }
//--------------------------------------------------------
        void Delay_Us(uchar Utime)
        {
                while(--Utime);
        }
       
        void Wr_ds1302_byte(uchar data_13)
        {
                uchar i;
                for(i=0;i<8;i++)
                {
                        Sclk = 0;
                        IO = data_13 &0x01;
                        data_13=data_13>>1;
                        Sclk = 1;
                }               
        }
        uchar Rd_ds1302_byte()
        {
                uchar i,value;
                for(i=0;i<8;i++)
                {
                        value=value>>1;
                        Sclk = 1;
                        Sclk = 0;
                        if(IO)
                        value=value|0x80;       
                }       
                 return value;
        }

        void Wr_1302(uchar addr,uchar dat)
        {
                Rst = 0;
                Sclk = 0;
                Rst = 1;
                Wr_ds1302_byte(addr);
                Wr_ds1302_byte(dat);
                Rst = 0;
                Sclk = 1;
                IO = 1;
        }
         Rd_1302(uchar addr)
        {
                uchar value;
                Rst = 0;
                Sclk = 0;
                Rst = 1;
                Wr_ds1302_byte(addr);
                value=Rd_ds1302_byte();
                Rst = 0;
                IO = 1;
                Sclk = 1;
                return value;       
        }

        void Set_RTC(void)
        {
                Wr_1302(0x8e,0x00);
                Wr_1302(0x80,0x80);

                Wr_1302(Wr_addr[6],(Sec/10)<<4|Sec%10);                //Sec
                Wr_1302(Wr_addr[5],(Min/10)<<4|Min%10);                //Min
                Wr_1302(Wr_addr[4],(Hour/10)<<4|Hour%10);        //Hour
                Wr_1302(Wr_addr[3],(Date/10)<<4|Date%10);           //Date
                Wr_1302(Wr_addr[2],(Mouth/10)<<4|Mouth%10);          //Mouth
                Wr_1302(Wr_addr[1],(Week/10)<<4|Week%10);         //Weak
                Wr_1302(Wr_addr[0],(Year/10)<<4|Year%10);        //Year

                Wr_1302(0x8e,0x80);
        }
        void Rd_RTC(void)
        {
                Sec = Rd_1302(0x81);        //Sec
                Min = Rd_1302(0x83);        //Min
                Hour = Rd_1302(0x85);        //Hour

                Date = Rd_1302(0x87);        //Date
                Mouth = Rd_1302(0x89);        //Mouth
                Year = Rd_1302(0x8d);         //Year       

                Week = Rd_1302(0x8b);        //Week       
        }
        uchar change(uchar Week_Count)
        {
                //Year
                Display[2] = Display_number[Year/16];
                Display[3] = Display_number[Year%16];
                //Mouth
                Display[6] = Display_number[Mouth/16];
                Display[7] = Display_number[Mouth%16];
                //Date
                Display[10] = Display_number[Date/16];
                Display[11] = Display_number[Date%16];
                //Hour
                Display_1[0] = Display_number[Hour/16];
                Display_1[1] = Display_number[Hour%16];
                //Min
                Display_1[4] = Display_number[Min/16];
                Display_1[5] = Display_number[Min%16];
                //Sec
                Display_1[8] = Display_number[Sec/16];
                Display_1[9] = Display_number[Sec%16];
                //Week
                //Display_2[4]= Week_Count = Display_number[Week%16];
                //Display_2[4] = hznumber[Week%16];
                Week_Count = Display_number[Week%16];
                return Week_Count ;
        }
//--------------------------------------------------------
        void RDbf(void) //读忙状态
        {
                while(1)
                {
                        RS=0;
                          RW=1;
                        E=0;
                          LCMdata=0xFF;   
                          E=1;
                          if((LCMdata&Busy)==0)
                          break;
                }
        }
//--------------------------------------------------------
        void Wr_Data(uchar wrdata) //写数据
        {
                RDbf();
                RS=1;
                RW=0;
                E=1;
                LCMdata=wrdata;
                E=0;  
        }
//---------------------------------------------------------
        void Wr_Command(uchar wrcommand,busyc) //写指令
        {
                if(busyc)
                  RDbf();
                RS=0;
                RW=0;
                E=1;
                LCMdata=wrcommand;
                E=0;
        }
//----------------------------------------------------------
        void Wr_Word(uchar *s)
        {
        while(*s!='\0')
        {                                       
            Wr_Data(*s++);
    } *s=0;
        }
//----------------------------------------------------------       
        void Display_String(uchar line,uchar Y,uchar *string)//显示字符串
        {  
                uchar addr,post;
                if(line==1)
                          addr=0x80;
                else if(line==2)
                         addr=0x90;
                else if(line==3)
                          addr=0x88;  
                else if(line==4)
                          addr=0x98;
                         
                post=addr+Y;

                Wr_Command(post,1);

                while(*string!='\0')
                {
                           Wr_Data(*string++);
                }
              //*string = 0;
        }
//-----------------------------------------------------------       
        void Lcm_Init(void)
        {
                        Delay_Ms(40);
                        Delay5Ms();
                        PSB=1;
                        Delay5Ms();
                    REST=1;
                    REST=0;
                    REST=1;  
                        Wr_Command(0x30,0);
                        Delay5Ms();
                        Wr_Command(0x30,0); //2次显示模式设置,不用判忙
                        Delay5Ms();
                        Wr_Command(0x0c,1); //开显示及光标设置
                        Delay5Ms();
                        Wr_Command(0x01,1); //显示清屏
                        Delay5Ms();
                        Wr_Command(0x02,1);//光标归位
                        //Delay5Ms();
                        //Wr_Command(0x14,1);//光标向右移动
                        Delay5Ms();
                        Wr_Command(0x06,1); //显示光标移动设置
                          Delay5Ms();
        }
//-----------------------------------------------------------
//-----------------------------------------------------------
        void buz(void)
        {
                uint i;
                for(i=200;i>0;i--)
                {
                        Buz=1;
                        Delay_Us(120);
                        Buz=0;
                }
                    Buz=0x00;
        }
//----------------------------------------------------------
  void Key_Scan()
  {
          P1=0x30;
        if(Key_1==0)
        {
                Delay_Ms(20);
                if(Key_1==0)
                {
                        Key_Select++;
                        if (Key_Select==1)
                        {
                                Wr_Command(0x0f,1);
                                Wr_Command(0x88,1);          //Hour
                        }
                        if(Key_Select==2)
                        {
                                Wr_Command(0x8a,1);         //Min
                        }
                        if(Key_Select==3)
                        {
                                Wr_Command(0x8c,1);         //Sec
                        }
                        if(Key_Select==4)
                        {
                                Wr_Command(0x91,1);          //Yeah
                        }
                        if(Key_Select==5)
                        {
                                Wr_Command(0x93,1);           //Mouth
                        }
                        if(Key_Select==6)
                        {
                                Wr_Command(0x95,1);           //Date
                        }
                        if(Key_Select==7)
                        {
                                Wr_Command(0x9a,1);           //Week;
                        }
                        if(Key_Select==8)
                        {
                                Wr_Command(0x0c,1);
                                Key_Select=0;
                                Key_Count=0;
                        }
                        buz();
                        while(!Key_1);
                        Key_Count=0;
                }
        }
        if(Key_2==0)
                {
                        Delay_Ms(20);
                        if(Key_2==0)
                        {
                          Key_Count++;
                        }
                         buz();
                         while(!Key_2);
                         Wr_1302(0x8e,0x00);
                         Wr_1302(0x80,0x80);
                         switch(Key_Select)
                         {
                                  case 1://Hour
                                        if(Key_Count!=0)
                                        {
                                        //        Wr_Command(0x0f,1);
                                                Wr_Command(0x88,1);
                                                if(Key_Count==24)
                                                        Key_Count=0;
                                                        Hour=(Key_Count/10)<<4|(Key_Count%10);
                                                        Wr_1302(Wr_addr[4],Hour);
                                         }break;
                                   case 2: //Min
                                        if(Key_Count!=0)
                                        {
                                                Wr_Command(0x8a,1);
                                                if(Key_Count==60)
                                                        Key_Count=0;
                                                        Min=(Key_Count/10)<<4|(Key_Count%10);
                                                        Wr_1302(Wr_addr[5],Min);
                                         }break;
                                         case 3: //Sec
                                        if(Key_Count!=0)
                                        {
                                                Wr_Command(0x8c,1);
                                                if(Key_Count==60)
                                                        Key_Count=0;
                                                        Sec=(Key_Count/10)<<4|(Key_Count%10);
                                                        Wr_1302(Wr_addr[6],Sec);
                                         }break;
                                         case 4: //Year
                                        if(Key_Count!=0)
                                        {
                                                Wr_Command(0x91,1);
                                                if(Key_Count==99)
                                                        Key_Count=0;
                                                        Year=(Key_Count/10)<<4|(Key_Count%10);
                                                        Wr_1302(Wr_addr[0],Year);
                                         }break;
                                         case 5: //Mouth
                                        if(Key_Count!=0)
                                        {
                                                Wr_Command(0x93,1);
                                                if(Key_Count==12)
                                                        Key_Count=1;
                                                        Mouth=(Key_Count/10)<<4|(Key_Count%10);
                                                        Wr_1302(Wr_addr[2],Mouth);
                                         }break;
                                    case 6: //Date
                                        if(Key_Count!=0)
                                        {
                                                Wr_Command(0x95,1);
                                                if(Key_Count==32)
                                                        Key_Count=1;
                                                        Date=(Key_Count/10)<<4|(Key_Count%10);
                                                        Wr_1302(Wr_addr[3],Date);
                                         }break;
                                          case 7: //Week
                                        if(Key_Count!=0)
                                        {
                                                Wr_Command(0x9a,1);
                                                if(Key_Count==8)
                                                        Key_Count=1;
                                                        Week=(Key_Count/10)<<4|(Key_Count%10);
                                                        Wr_1302(Wr_addr[1],Week);
                                         }break;
                                         default:
                                         if(Key_Count==0)
                                         {
                                                 Wr_Command(0x0c,1);
                                                 Wr_1302(0x8e,0x00);
                                                 Wr_1302(0x80,0x00);
                                                 Wr_1302(0x8e,0x80);
                                         }Key_Select=0;
                                         break;
                                 }         buz();
                                        while(!Key_2);
                        }       
  
  }

//-----------------------------------------------------------
        void main(void)
        {
                uchar i;
                buz();
                Lcm_Init();
                Display_String(1,0,string_4);
                Display_String(2,0,string_2);
                Display_String(3,0,string_3);
                Display_String(4,0,string_4);
                Delay_Ms(1000);

                Wr_Command(0x01,1);
                Delay_Ms(250);

                Display_String(1,0,string_4);
                Display_String(2,0,string_2);
                Display_String(3,0,string_3);
                Display_String(4,0,string_4);
                Delay_Ms(1000);
                Wr_Command(0x01,1);
               
                Display_String(1,0,string_2);
                Display_String(2,0,Display);
                Display_String(3,0,Display_1);
                Display_String(4,0,Display_2);

                Set_RTC();
                //Wr_1302(0x80,0x00);
                while(1)
                {
                        Key_Scan();
                        Rd_RTC();
                        i=change();
                        switch(i)
                        {
                        case 0: Display_String(4,2,"壹"); break;
                        case 2: Display_String(4,2,"贰"); break;
                        case 3: Display_String(4,2,"参"); break;
                        case 4: Display_String(4,2,"四");break;
                        case 5: Display_String(4,2,"伍"); break;
                        case 6: Display_String(4,2,"柒"); break;
                        case 7: Display_String(4,2,"日"); break;
                        default:Display_String(4,2,"日"); break;
                        }
                        Display_String(1,0,string_2);
                        Display_String(2,0,Display);
                        Display_String(3,0,Display_1);
                        Display_String(4,0,Display_2);
                               
             }
         }
全部程序如上,就是星期的汉字转换不过来;现在这个程式的显示的是星期日;

使用特权

评论回复
14
gaoyuaug|  楼主 | 2012-4-8 09:25 | 只看该作者
星期几的问题这回搞好了,是因为读1302后的数值转换问题上;但如1楼的问题,依然不懂为什么那样赋值会行不通呢?
现把程序贴出来,希望能给像我这样迷茫的后来者多个参考资料;
        #include<reg52.h>
       
        #define uchar unsigned char
        #define uint unsigned int
        #define LCMdata P0
        #define Busy 0x80

//Lcd_part
        sbit RS        =        P2^0;  
        sbit RW        =        P2^1;  
        sbit E        =        P2^2;  
        sbit REST =        P2^5;
        sbit PSB =        P2^3;
//Key_part
        sbit Key_1 = P1^4;
        sbit Key_2 = P1^5;
    sbit Key_3 = P1^6;
        sbit Key_4 = P1^7;
//Ds1302_part
        sbit Sclk = P1^0;
        sbit IO = P1^1;
        sbit Rst = P1^2;

        sbit Buz = P3^7;
       
        uchar Key_Select,Key_Flag,Key_Count,Set1;
        uchar Time_Flag,TimeCount,Week_Count=0;
        uchar Sec=0;uchar Min=30;uchar Hour=7;
        uchar Date=8;uchar Mouth=4;uchar Year=12;uchar Week=5;
        uchar Display_number[14] = {"0123456789: -"};
          
        uchar Rd_addr[] = {0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
        uchar Wr_addr[] = {0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};

        uchar Display[] = {"2012年04月06日**"};
        uchar Display_1[]={"19时36分00秒****"};
        uchar Display_2[]={"星期"};
        uchar code hznumber[] = {"壹贰参肆伍陆日"};
        uchar code string_1[] = {"百年大计质量为上"};
        uchar code string_2[] = {"  ----时钟----  "};
        uchar code string_3[] = {"  ----日历----  "};  
        uchar code string_4[] = {"****************"};

       
   void Wr_Word(uchar *s);
   void Wr_Command(uchar wrcommand,busyc);
   void Display_String(uchar line,uchar Y,uchar *string);

        void Delay5Ms(void) //延时 5ms
        {
                unsigned int TempCyc=5552;
                while(TempCyc--);
        }
//-------------------------------------------------------
        void Delay_Ms(uint Mtime)
        {
                uint i,j;
                for(i=Mtime;i>0;i--)
                for(j=122;j>0;j--)
                {;}
        }
//--------------------------------------------------------
        void Delay_Us(uchar Utime)
        {
                while(--Utime);
        }
       
        void Wr_ds1302_byte(uchar data_13)
        {
                uchar i;
                for(i=0;i<8;i++)
                {
                        Sclk = 0;
                        IO = data_13 &0x01;
                        data_13=data_13>>1;
                        Sclk = 1;
                }               
        }
        uchar Rd_ds1302_byte()
        {
                uchar i,value;
                for(i=0;i<8;i++)
                {
                        value=value>>1;
                        Sclk = 1;
                        Sclk = 0;
                        if(IO)
                        value=value|0x80;       
                }       
                 return value;
        }

        void Wr_1302(uchar addr,uchar dat)
        {
                Rst = 0;
                Sclk = 0;
                Rst = 1;
                Wr_ds1302_byte(addr);
                Wr_ds1302_byte(dat);
                Rst = 0;
                Sclk = 1;
                IO = 1;
        }
         Rd_1302(uchar addr)
        {
                uchar value;
                Rst = 0;
                Sclk = 0;
                Rst = 1;
                Wr_ds1302_byte(addr);
                value=Rd_ds1302_byte();
                Rst = 0;
                IO = 1;
                Sclk = 1;
                return value;       
        }

        void Set_RTC(void)
        {
                Wr_1302(0x8e,0x00);
                Wr_1302(0x80,0x80);

                Wr_1302(Wr_addr[6],(Sec/10)<<4|Sec%10);                //Sec
                Wr_1302(Wr_addr[5],(Min/10)<<4|Min%10);                //Min
                Wr_1302(Wr_addr[4],(Hour/10)<<4|Hour%10);        //Hour
                Wr_1302(Wr_addr[3],(Date/10)<<4|Date%10);           //Date
                Wr_1302(Wr_addr[2],(Mouth/10)<<4|Mouth%10);          //Mouth
                Wr_1302(Wr_addr[1],(Week/10)<<4|Week%10);         //Weak
                Wr_1302(Wr_addr[0],(Year/10)<<4|Year%10);        //Year

                Wr_1302(0x8e,0x80);
        }
        void Rd_RTC(void)
        {
                Sec = Rd_1302(0x81);        //Sec
                Min = Rd_1302(0x83);        //Min
                Hour = Rd_1302(0x85);        //Hour

                Date = Rd_1302(0x87);        //Date
                Mouth = Rd_1302(0x89);        //Mouth
                Year = Rd_1302(0x8d);         //Year       

                Week = Rd_1302(0x8b);        //Week       
        }
        void change(void)
        {
                //Year
                Display[2] = Display_number[Year/16];
                Display[3] = Display_number[Year%16];
                //Mouth
                Display[6] = Display_number[Mouth/16];
                Display[7] = Display_number[Mouth%16];
                //Date
                Display[10] = Display_number[Date/16];
                Display[11] = Display_number[Date%16];
                //Hour
                Display_1[0] = Display_number[Hour/16];
                Display_1[1] = Display_number[Hour%16];
                //Min
                Display_1[4] = Display_number[Min/16];
                Display_1[5] = Display_number[Min%16];
                //Sec
                Display_1[8] = Display_number[Sec/16];
                Display_1[9] = Display_number[Sec%16];
                //Week
                Week_Count = Week&0x07;
                //Display_2[4]= Week_Count = Display_number[Week%16];
                //Display_2[4] = hznumber[Week%16];
                //Week_Count = Display_number[Week&0x07];
                //return Week_Count ;
       
                switch(Week)
                {
       
                case 1: Display_String(4,2,"壹"); break;
                case 2: Display_String(4,2,"贰"); break;
                case 3: Display_String(4,2,"参"); break;
                case 4: Display_String(4,2,"肆");break;
                case 5: Display_String(4,2,"伍"); break;
                case 6: Display_String(4,2,"陆"); break;
                case 7: Display_String(4,2,"日"); break;
                default:
                Display_String(4,2,"日"); break;
                }        
        }
       
//--------------------------------------------------------
        void RDbf(void) //读忙状态
        {
                while(1)
                {
                        RS=0;
                          RW=1;
                        E=0;
                          LCMdata=0xFF;   
                          E=1;
                          if((LCMdata&Busy)==0)
                          break;
                }
        }
//--------------------------------------------------------
        void Wr_Data(uchar wrdata) //写数据
        {
                RDbf();
                RS=1;
                RW=0;
                E=1;
                LCMdata=wrdata;
                E=0;  
        }
//---------------------------------------------------------
        void Wr_Command(uchar wrcommand,busyc) //写指令
        {
                if(busyc)
                  RDbf();
                RS=0;
                RW=0;
                E=1;
                LCMdata=wrcommand;
                E=0;
        }
//----------------------------------------------------------
        void Wr_Word(uchar *s)
        {
        while(*s!='\0')
        {                                       
            Wr_Data(*s++);
    } *s=0;
        }
//----------------------------------------------------------       
        void Display_String(uchar line,uchar Y,uchar *string)//显示字符串
        {  
                uchar addr,post;
                if(line==1)
                          addr=0x80;
                else if(line==2)
                         addr=0x90;
                else if(line==3)
                          addr=0x88;  
                else if(line==4)
                          addr=0x98;
                         
                post=addr+Y;

                Wr_Command(post,1);

                while(*string!='\0')
                {
                           Wr_Data(*string++);
                }
              //*string = 0;
        }
//-----------------------------------------------------------       
        void Lcm_Init(void)
        {
                        Delay_Ms(40);
                        Delay5Ms();
                        PSB=1;
                        Delay5Ms();
                    REST=1;
                    REST=0;
                    REST=1;  
                        Wr_Command(0x30,0);
                        Delay5Ms();
                        Wr_Command(0x30,0); //2次显示模式设置,不用判忙
                        Delay5Ms();
                        Wr_Command(0x0c,1); //开显示及光标设置
                        Delay5Ms();
                        Wr_Command(0x01,1); //显示清屏
                        Delay5Ms();
                        Wr_Command(0x02,1);//光标归位
                        //Delay5Ms();
                        //Wr_Command(0x14,1);//光标向右移动
                        Delay5Ms();
                        Wr_Command(0x06,1); //显示光标移动设置
                          Delay5Ms();
        }
//-----------------------------------------------------------
//-----------------------------------------------------------
        void buz(void)
        {
                uint i;
                for(i=200;i>0;i--)
                {
                        Buz=1;
                        Delay_Us(120);
                        Buz=0;
                }
                    Buz=0x00;
        }
//----------------------------------------------------------
  void Key_Scan()
  {
          P1=0x30;
        if(Key_1==0)
        {
                Delay_Ms(20);
                if(Key_1==0)
                {
                        Key_Select++;
                        if (Key_Select==1)
                        {
                                Wr_Command(0x0f,1);
                                Wr_Command(0x88,1);          //Hour
                        }
                        if(Key_Select==2)
                        {
                                Wr_Command(0x8a,1);         //Min
                        }
                        if(Key_Select==3)
                        {
                                Wr_Command(0x8c,1);         //Sec
                        }
                        if(Key_Select==4)
                        {
                                Wr_Command(0x91,1);          //Yeah
                        }
                        if(Key_Select==5)
                        {
                                Wr_Command(0x93,1);           //Mouth
                        }
                        if(Key_Select==6)
                        {
                                Wr_Command(0x95,1);           //Date
                        }
                        if(Key_Select==7)
                        {
                                Wr_Command(0x9a,1);           //Week;
                        }
                        if(Key_Select==8)
                        {
                                Wr_Command(0x0c,1);
                                Key_Select=0;
                                Key_Count=0;
                        }
                        buz();
                        while(!Key_1);
                        Key_Count=0;
                }
        }
        if(Key_2==0)
                {
                        Delay_Ms(20);
                        if(Key_2==0)
                        {
                          Key_Count++;
                        }
                         buz();
                         while(!Key_2);
                         Wr_1302(0x8e,0x00);
                         Wr_1302(0x80,0x80);
                         switch(Key_Select)
                         {
                                  case 1://Hour
                                        if(Key_Count!=0)
                                        {
                                        //        Wr_Command(0x0f,1);
                                                Wr_Command(0x88,1);
                                                if(Key_Count==24)
                                                        Key_Count=0;
                                                        Hour=(Key_Count/10)<<4|(Key_Count%10);
                                                        Wr_1302(Wr_addr[4],Hour);
                                         }break;
                                   case 2: //Min
                                        if(Key_Count!=0)
                                        {
                                                Wr_Command(0x8a,1);
                                                if(Key_Count==60)
                                                        Key_Count=0;
                                                        Min=(Key_Count/10)<<4|(Key_Count%10);
                                                        Wr_1302(Wr_addr[5],Min);
                                         }break;
                                         case 3: //Sec
                                        if(Key_Count!=0)
                                        {
                                                Wr_Command(0x8c,1);
                                                if(Key_Count==60)
                                                        Key_Count=0;
                                                        Sec=(Key_Count/10)<<4|(Key_Count%10);
                                                        Wr_1302(Wr_addr[6],Sec);
                                         }break;
                                         case 4: //Year
                                        if(Key_Count!=0)
                                        {
                                                Wr_Command(0x91,1);
                                                if(Key_Count==99)
                                                        Key_Count=0;
                                                        Year=(Key_Count/10)<<4|(Key_Count%10);
                                                        Wr_1302(Wr_addr[0],Year);
                                         }break;
                                         case 5: //Mouth
                                        if(Key_Count!=0)
                                        {
                                                Wr_Command(0x93,1);
                                                if(Key_Count==12)
                                                        Key_Count=1;
                                                        Mouth=(Key_Count/10)<<4|(Key_Count%10);
                                                        Wr_1302(Wr_addr[2],Mouth);
                                         }break;
                                    case 6: //Date
                                        if(Key_Count!=0)
                                        {
                                                Wr_Command(0x95,1);
                                                if(Key_Count==32)
                                                        Key_Count=1;
                                                        Date=(Key_Count/10)<<4|(Key_Count%10);
                                                        Wr_1302(Wr_addr[3],Date);
                                         }break;
                                          case 7: //Week
                                        if(Key_Count!=0)
                                        {
                                                Wr_Command(0x9a,1);
                                                if(Key_Count==8)
                                                        Key_Count=1;
                                                        Week=(Key_Count/10)<<4|(Key_Count%10);
                                                        Wr_1302(Wr_addr[1],Week);
                                         }break;
                                         default:
                                         if(Key_Count==0)
                                         {
                                                 Wr_Command(0x0c,1);
                                                 Wr_1302(0x8e,0x00);
                                                 Wr_1302(0x80,0x00);
                                                 Wr_1302(0x8e,0x80);
                                         }Key_Select=0;
                                         break;
                                 }         buz();
                                        while(!Key_2);
                        }       
  
  }

//-----------------------------------------------------------
        void main(void)
        {
                uchar i;
                buz();
                Lcm_Init();
                Display_String(1,0,string_4);
                Display_String(2,0,string_2);
                Display_String(3,0,string_3);
                Display_String(4,0,string_4);
                Delay_Ms(1000);

                Wr_Command(0x01,1);
                Delay_Ms(250);

                Display_String(1,0,string_4);
                Display_String(2,0,string_2);
                Display_String(3,0,string_3);
                Display_String(4,0,string_4);
                Delay_Ms(1000);
                Wr_Command(0x01,1);
               
                Display_String(1,0,string_2);
                Display_String(2,0,Display);
                Display_String(3,0,Display_1);
                Display_String(4,0,Display_2);

                Set_RTC();
                //Wr_1302(0x80,0x00);
                while(1)
                {
                        Key_Scan();
                        Rd_RTC();
                        change();
               
                        Display_String(1,0,string_2);
                        Display_String(2,0,Display);
                        Display_String(3,0,Display_1);
                        Display_String(4,0,Display_2);
                               
             }
         }

使用特权

评论回复
15
NE5532| | 2012-4-8 09:29 | 只看该作者
兄弟,不要继续粘程序了,你的程序连一行注释都没有,你自己都不想看的东西,谁会帮你看呢??

使用特权

评论回复
16
wujianguo789| | 2012-5-9 21:35 | 只看该作者
语法错误,数组不能这么赋值呀。
你可以用
strcpy(Display_2, "星期一“);

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:改掉不良习惯,充实提高自已!

31

主题

188

帖子

0

粉丝