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

📄 f01e4975e93e001b1122f9ec2b17c8c1

📁 在DE2上显示时间的程序
💻
字号:
#include <io.h>
#include "system.h"
int main(void)
{ 
  int i,j;
  IOWR(SPI_0_BASE,1,0x201);//CH452内部复位
  while(!(IORD(SPI_0_BASE,2)&0x40));//读状态位
  IOWR(SPI_0_BASE,1,0x413);//设置452系统参数
  while(!(IORD(SPI_0_BASE,2)&0x0040));//读状态位  
  IOWR(SPI_0_BASE,1,0x5c0);//设置CH452显示参数,BCD译码方式,扫描极限4
  while(!(IORD(SPI_0_BASE,2)&0x40));//读状态位
  int year=0x2006,mon=1,day=1,hou=1,min=0,sec=0,hse=0,flg=0;                     // 定时器变量
  IOWR(TIMER_0_BASE,1,6);                                            // 启动定时器
  while(1)
  {
    //定时器程序
    if(IORD(TIMER_0_BASE,0)&1)                                       // 500ms定时时间到
    {
      if(++hse==2)                                                   // 1秒钟时间到
      {
        hse=0;++sec;                                                 // 秒加1
        if((sec&0xf)==0xa)
          sec+=6;                                                    // 二-十进制调整
        if(sec>=0x60)                                                // 1分钟时间到
        {
          sec=0;++min;                                               // 分加1
          if((min&0xf)==0xa)
            min+=6;                                                  // 二-十进制调整
          if(min>=0x60)                                              // 1小时时间到
          {
            min=0;++hou;                                             // 时加1
            if((hou&0xf)==0xa)
              hou+=6;                                                // 二-十进制调整
            if(hou>=0x24)                                            // 1日时间到
            {
              hou=0;++day;                                           // 日加1
              if((day&0xf)==0xa)
                day+=6;                                              // 二-十进制调整
              if(day>=0x31)                                          // 1月时间到
              {
                day=1;++mon;                                         // 月加1
                if((mon&0xf)==0xa)
                  mon+=6;                                            // 二-十进制调整
                if(mon>=0x13)                                        // 1年时间到
                  mon=1;
                  ++year;
              }
            }
          }
        }
      }
      IOWR(TIMER_0_BASE,0,0);                                  // 清除时间到标志
  }
  IOWR(SPI_0_BASE,1,0x000);
  i=IORD(SPI_0_BASE,0); 
  while(!IORD(SPI_0_BASE,0))
  {
    IOWR(SPI_0_BASE,1,0x700); 
    IOWR(SPI_0_BASE,1,0x000);//读取按键  
    i=IORD(SPI_0_BASE,0);  
    break;
 } 
 //按键程序
  if(IORD(SPI_0_BASE,0)-0xfc6==0)   // 年份键(C)
    flg=1;
  if(IORD(SPI_0_BASE,0)-0xfe6==0)   // 月日键(D)
    flg=2; 
  if(IORD(SPI_0_BASE,0)-0xfd6==0)   // 时分键(E)
    flg=3;
  if(IORD(SPI_0_BASE,0)-0xff6==0)   // 分秒键(F)
    flg=4;  
  if(IORD(SPI_0_BASE,0)-0xfc0==0)   // 1
    flg=5; 
  if(IORD(SPI_0_BASE,0)-0xfe0==0)   // 2
    flg=6;
  if(IORD(SPI_0_BASE,0)-0xfd0==0)   // 3
   flg=7; 
  if(IORD(SPI_0_BASE,0)-0xff0==0)   // 4
    flg=8;
  if(IORD(SPI_0_BASE,0)-0xfc4==0)   // 5
    flg=9; 
  if(IORD(SPI_0_BASE,0)-0xfe4==0)   // 6
    flg=10; 
  if(IORD(SPI_0_BASE,0)-0xfd4==0)   // 7
    flg=11; 
  if(IORD(SPI_0_BASE,0)-0xff4==0)   // 8
    flg=12;  
  if(IORD(SPI_0_BASE,0)-0xfc2==0)   // 9
    flg=13; 
  if(IORD(SPI_0_BASE,0)-0xfe2==0)   // 0
    flg=14; 
  if(IORD(SPI_0_BASE,0)-0xfd2==0)   // 复位键(A)
    flg=15;                                                                               
//显示程序
  switch(flg)
  {
    case 1:                                                        // 显示月日
    {
      IOWR(SPI_0_BASE,1,(0x800+(year&0x000f)));
      IOWR(SPI_0_BASE,1,(0x900+((year&0x00f0)>>4)));
      IOWR(SPI_0_BASE,1,(0x0a00+((year&0x0f00)>>8)));
      IOWR(SPI_0_BASE,1,(0x0b00+((year&0xf000)>>12)));
      break;
    }
    case 2:                                                        // 显示月日
    {
      IOWR(SPI_0_BASE,1,(0x800+(day&0x0f)));
      IOWR(SPI_0_BASE,1,(0x900+((day&0xf0)>>4)));
      IOWR(SPI_0_BASE,1,(0x0a00+(mon&0x0f))+0x80);
      IOWR(SPI_0_BASE,1,(0x0b00+((mon&0xf0)>>4)));
      break;
    }
    case 3:                                                        // 显示时分
    {
      IOWR(SPI_0_BASE,1,(0x800+(min&0x0f)));
      IOWR(SPI_0_BASE,1,(0x900+((min&0xf0)>>4)));
      IOWR(SPI_0_BASE,1,(0x0a00+(hou&0x0f))+(hse<<7));
      IOWR(SPI_0_BASE,1,(0x0b00+((hou&0xf0)>>4)));
      break;
    }
    case 4:                                                        // 显示分秒
    {
      IOWR(SPI_0_BASE,1,(0x800+(sec&0x0f)));
      IOWR(SPI_0_BASE,1,(0x900+((sec&0xf0)>>4)));
      IOWR(SPI_0_BASE,1,(0x0a00+(min&0x0f))+(hse<<7));
      IOWR(SPI_0_BASE,1,(0x0b00+((min&0xf0)>>4))); 
      break;
    }
    case 5:
    {
      IOWR(SPI_0_BASE,1,0x800);
      j==0;
      break;
    }
    case 6:
    {
      IOWR(SPI_0_BASE,1,0x801);
      j==1;
      break;
    }
    case 7:
    {
      IOWR(SPI_0_BASE,1,0x802);
      j==2;
      break;
    }
      case 8:
    {
      IOWR(SPI_0_BASE,1,0x803); 
      j==3;     
      break;
    }
    case 9:
    {
      IOWR(SPI_0_BASE,1,0x804); 
      j==4;     
      break;
    }
    case 10:
    {
      IOWR(SPI_0_BASE,1,0x805);
      j==5 ;     
      break;
    }
    case 11:
    {
      IOWR(SPI_0_BASE,1,0x806);
      j==6;      
      break;
    }
    case 12:
    {
      IOWR(SPI_0_BASE,1,0x807);
      j==7;      
      break;
    }
    case 13:
    {
      IOWR(SPI_0_BASE,1,0x808); 
      j==8;     
      break;
    }
    case 14:
    {
      IOWR(SPI_0_BASE,1,0x809);
      j==9;      
      break;
    }
    
      case 15:
    {
      year=0x2006,mon=1,day=1,hou=0,min=0,sec=0,hse=0; 
      IOWR(SPI_0_BASE,1,0x800);
      IOWR(SPI_0_BASE,1,0x900);
      IOWR(SPI_0_BASE,1,0x0a00);
      IOWR(SPI_0_BASE,1,0x0b00);
      break; 
    }
  }
  IOWR(SPI_0_BASE,1,(0x800+j)<<8);
  }
}




⌨️ 快捷键说明

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