c096041ca83f001b19ae8cd3dda9ff5e

来自「在DE2上显示时间的程序」· 代码 · 共 206 行

TXT
206
字号
#include <io.h>
#include "system.h"
int main(void)
{  
IOWR(SPI_0_BASE,1,0x201);
while(1)
  {
   if((IORD(SPI_0_BASE,2))&0x40)
    {IOWR(SPI_0_BASE,1,0x413);
      break;
    }
  }
while(1)
{
   if((IORD(SPI_0_BASE,2))&0x0040)
   {
    IOWR(SPI_0_BASE,1,0x5C0);
      break;
   }
}   
int mon=1,day=1,hou=0,min=0,sec=0,hse=0,flg=0,i;                           // 定时器变量
    IOWR(SPI_0_BASE,1,(0x800));
           IOWR(SPI_0_BASE,1,(0x900));
           IOWR(SPI_0_BASE,1,(0x0a00));
           IOWR(SPI_0_BASE,1,(0x0b00));
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;
              }
            }
          }
        }
      }
      IOWR(TIMER_0_BASE,0,0);                                  // 清除时间到标志
    }
 while(1)
 {   
 IOWR(SPI_0_BASE,1,0x700);
  IOWR(SPI_0_BASE,1,0);
i=IORD(SPI_0_BASE,0);
break;
 } 
  if(IORD(SPI_0_BASE,0)-0xfc0==0)   // 1
    flg=0; 
  if(IORD(SPI_0_BASE,0)-0xfe0==0)   // 2
    flg=1;
  if(IORD(SPI_0_BASE,0)-0xfd0==0)   // 3
   flg=2; 
  if(IORD(SPI_0_BASE,0)-0xff0==0)   // 4
    flg=3;
  if(IORD(SPI_0_BASE,0)-0xfc4==0)   // 5
    flg=4; 
  if(IORD(SPI_0_BASE,0)-0xfe4==0)   // 6
    flg=5; 
  if(IORD(SPI_0_BASE,0)-0xfd4==0)   // 7
    flg=6; 
  if(IORD(SPI_0_BASE,0)-0xff4==0)   // 8
    flg=7;  
  if(IORD(SPI_0_BASE,0)-0xfc2==0)   // 9
    flg=8; 
  if(IORD(SPI_0_BASE,0)-0xfe2==0)   // 0
    flg=9; 
  if(IORD(SPI_0_BASE,0)-0xfd2==0)   // 复位键(A)
    flg=10; 
   if(i-0xfd6==0)                                 // 月日键(C)
      flg=12;
 if(i-0xfe6==0)                                  // 时分键(D)
      flg=13;
  if(i-0xfc6==0)                                  // 分秒键(E)
      flg=14;
    switch(flg)
    {
      case 0:                                        
      { 
       IOWR(SPI_0_BASE,1,0x300); 
      IOWR(SPI_0_BASE,1,(0x800+(flg)));
      
        break;
      }
      case 1:                                        
      {
      IOWR(SPI_0_BASE,1,0x300);
      IOWR(SPI_0_BASE,1,(0x800+(flg)));
      
        break;
      }
      case 2:                                        
      {
      IOWR(SPI_0_BASE,1,0x300);
      IOWR(SPI_0_BASE,1,(0x800+(flg)));
      
        break;
      }
      case 3:                                        
      {
      IOWR(SPI_0_BASE,1,0x300);
      IOWR(SPI_0_BASE,1,(0x800+(flg)));
      
        break;
      }
      case 4:                                        
      {
      IOWR(SPI_0_BASE,1,0x300);
      IOWR(SPI_0_BASE,1,(0x800+(flg)));
      
        break;
      }
      case 5:                                        
      {
      IOWR(SPI_0_BASE,1,0x300);
      IOWR(SPI_0_BASE,1,(0x800+(flg)));
      
        break;
      }
      case 6:                                        
      {
      IOWR(SPI_0_BASE,1,0x300);
      IOWR(SPI_0_BASE,1,(0x800+(flg)));
      
        break;
      }
      case 7:                                        
      {
      IOWR(SPI_0_BASE,1,0x300);
      IOWR(SPI_0_BASE,1,(0x800+(flg)));
      
        break;
      }
      case 8:                                        
      {
      IOWR(SPI_0_BASE,1,0x300);
      IOWR(SPI_0_BASE,1,(0x800+(flg)));
      
        break;
      }
      case 9:                                        
      {
      IOWR(SPI_0_BASE,1,0x300);
      IOWR(SPI_0_BASE,1,(0x800+(flg)));
      
        break;
      }
      case 10:                                        
      {
      IOWR(SPI_0_BASE,1,0x302);
      
        break;
      }
      case 12:                                                        // 显示月日
      {
        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)+0x80));//显示分个位
           IOWR(SPI_0_BASE,1,(0x0b00+((min&0xf0)>>4)));//显示分十位  
        break;
      }
      case 13:                                                        // 显示时分
      {
        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 14:                                                        // 显示分秒
      {
        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;
      }
    }    
  }
}     

⌨️ 快捷键说明

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