?? 4000df70a83f001b19ae8cd3dda9ff5e
字號:
#include <io.h>
#include "system.h"
int main(void)
{
int i,j,k;
int key[10]={0xfc0,0xfe0,0xfd0,0xff0,0xfc4,0xfe4,0xfd4,0xff4,0xfc2};
int buf[10]={0,0,0,0,0,0,0,0,0,0};
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;
}
for(k=0;k<10;k++)
{
if(IORD(SPI_0_BASE,0)==key[k])
{
flg=0;
buf[j++]=k;
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)-0xfd2==0) // 復位鍵(A)
flg=15;
//顯示程序
switch(flg)
{
case 0:
{
flg=4;
IOWR(SPI_0_BASE,1,0x300);
IOWR(SPI_0_BASE,1,0x800+k);
break;
}
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 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,(0x0800+j)<<8);
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -