⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawing_line.lst

📁 液晶屏显示花样proteus仿真 液晶屏显示花样proteus仿真
💻 LST
📖 第 1 页 / 共 2 页
字号:
 149   1        {
 150   2              p=number+16*temp[i];
 151   2              DisWord(i,1,1,p);
 152   2        }
 153   1      }
 154          
 155          void display_date(void)
 156          {
 157   1        unsigned char i;
 158   1        uchar *p;
 159   1        if(year>2099) year=2099;
 160   1        temp1[0]=year%100/10;
 161   1        temp1[1]=year%10;
 162   1        temp1[2]=11;
 163   1        temp1[3]=month/10;
 164   1        temp1[4]=month%10;
 165   1        temp1[5]=11;
 166   1        temp1[6]=day/10;
 167   1        temp1[7]=day%10; 
 168   1        for(i=0;i<8;i++)
 169   1        {
 170   2               p=number+16*temp1[i];
 171   2               DisWord(i,0,1,p);
 172   2        }
 173   1      }
 174          
 175          /******************************** 表针显示 **********************************************************/
 176          
C51 COMPILER V8.02   DRAWING_LINE                                                          08/04/2008 00:19:51 PAGE 4   

 177          void hand(uchar time,uchar lenth,uint angle,uchar draw)  //表针
 178          {                                                                                                                
 179   1        uchar dx,dy;                                                                                   //     每秒钟时,分,秒针都调一下,但是角度不同
 180   1        unsigned int sec,temp,temp1;                                                   //
 181   1      
 182   1        if(time==second)      {sec=second;temp1=59;}                       // 某个时刻秒针指向的位置
 183   1        if(time==minute&&second!=minute)      {sec=minute*60+second,temp1=3599;}//分针指向的位置      
 184   1        if(time==hour&&second!=hour)  {sec=(hour%12)*3600+minute*60+second;temp1=43199;}//时针
 185   1      
 186   1        temp=sec-1;                                                                                    
 187   1        if(temp>temp1) temp=temp1;                                                    //如果没有这句当second=0时sec会溢出,出错
 188   1      
 189   1        dx=96+lenth*sin(3.14*temp/angle);
 190   1        dy=32-lenth*cos(3.14*temp/angle);
 191   1        DrawLine(96,32,dx,dy,Graphic_Clear);
 192   1      
 193   1        dx=96+lenth*sin(3.14*sec/angle);
 194   1        dy=32-lenth*cos(3.14*sec/angle);
 195   1        DrawLine(96,32,dx,dy,draw);
 196   1      }
 197          
 198          /******************************** 判闰年 **********************************************************/
 199          
 200          void leap_year(uchar x)                                         //判段闰年
 201          {
 202   1        if((x%4==0&&x%100!=0)||x%400==0)  mon[1]=29;  
 203   1        else mon[1]=28;
 204   1      }
 205          
 206          /******************************** 键扫子程序 **********************************************************/
 207          
 208          void keyscan(void)                                                              // 键盘扫描
 209          {
 210   1       unsigned char keyvalue;
 211   1       keyvalue=P1&0X07;
 212   1       if(keyvalue!=0x07)
 213   1        delay_us(50);
 214   1       if(keyvalue!=0x07)
 215   1        {
 216   2         key=keyvalue;
 217   2         flag=1;
 218   2        }
 219   1        else flag=0;
 220   1       }
 221          
 222          /******************************** 调试加子程序 **********************************************************/
 223           
 224          unsigned int add(uint i,uint top,uint bottem)  //调时间函数,按键则加一
 225          {
 226   1       if(add_flag)
 227   1       {
 228   2        i++;
 229   2        if(i==top)
 230   2         {
 231   3          i=bottem;
 232   3         }
 233   2       }
 234   1       add_flag=0;
 235   1       return(i);
 236   1      }
 237          
 238          /******************************** 调试减子程序 **********************************************************/
C51 COMPILER V8.02   DRAWING_LINE                                                          08/04/2008 00:19:51 PAGE 5   

 239          
 240          unsigned int sub(uint i,uint top,uint bottem)  // 调时间函数,按键则减一
 241          {
 242   1       if(sub_flag)
 243   1       {
 244   2        i--;
 245   2        if(i==bottem)
 246   2        {
 247   3         i=top;
 248   3        } 
 249   2       }
 250   1       sub_flag=0; 
 251   1       return(i);
 252   1      }
 253          
 254          /******************************** 判星期子程序 **********************************************************/
 255          
 256          void week(uint x,uchar y,uchar z)                     //判断某一天是星期几
 257          { 
 258   1              unsigned long temp;                                               //我的方法是查出2000年1月1日是星期六
 259   1              uint deta_day=0;
 260   1              uchar i,k;
 261   1              int j;                                                                //要求哪年哪天就把那天与2000年1月1日
 262   1              uchar *p;
 263   1              for(j=2000;j<=x;j++)                                      //相隔的天数对7取余
 264   1              {
 265   2                  if(j==x) k=y-1;
 266   2                      else k=12;
 267   2                      leap_year(j);                                         
 268   2                      for(i=0;i<k;i++)
 269   2                              {deta_day+=mon[i];}     
 270   2              }                                 
 271   1              temp=deta_day+z-1;
 272   1              weekday=temp%7;
 273   1              p=xingqi+32*weekday;
 274   1              DisWord(2,2,2,p);
 275   1      }
 276          
 277          /******************************** 键功能子程序 **********************************************************/
 278          
 279          void keyprocess(void)                                           // 键功能程序
 280          {
 281   1              keyscan();
 282   1              while((P1&0X07)!=0x07);                                 //判按键释放
 283   1              switch(key)
 284   1              {
 285   2                      case 0x06:
 286   2                              if(flag)
 287   2                      {
 288   3                                      count++;
 289   3                                      if(count==7)
 290   3                              count=0;
 291   3                              }
 292   2              break;
 293   2                      case 0x05:                                                 //  加一键
 294   2                              if(flag)
 295   2                              {
 296   3                              if(count!=0)                       //  为一年加一,为二月加一以此类推
 297   3                                      {
 298   4                                              add_flag=1;                        //  加的标志
 299   4                                      }
 300   3                              switch(count)                      
C51 COMPILER V8.02   DRAWING_LINE                                                          08/04/2008 00:19:51 PAGE 6   

 301   3                              {
 302   4                                              case 1:TR0=0;year=add(year,2100,2000);display_date();week(year,month,day);break;
 303   4                                              case 2:TR0=0;month=add(month,13,1);display_date();week(year,month,day);break;
 304   4                                              case 3:TR0=0;leap_year(year);day=add(day,mon[month-1]+1,1);display_date();week(year,month,day);bre
             -ak;
 305   4                                              case 6:TR0=0;hand(second,26,30,Graphic_Clear);second=add(second,60,0);flag_sec=1;break;         //加之前

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -