📄 50101586a63f001b19ae8cd3dda9ff5e
字号:
#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(i-0xfc0==0) // 键(1)
flg=0;
if(i-0xfe0==0) // 键(2)
flg=1;
if(i-0xfd0==0) // 月日键(3)
flg=2;
if(i-0xff0==0) // 月日键(4)
flg=3;
if(i-0xfc4==0) // 月日键(5)
flg=4;
if(i-0xfe4==0) // 月日键(6)
flg=5;
if(i-0xfd4==0) // 月日键(7)
flg=6;
if(i-0xff4==0) // 月日键(8)
flg=7;
if(i-0xfc2==0) // 月日键(9)
flg=8;
if(i-0xfe2==0) // 月日键(0)
flg=9;
if(i-0xfd2==0) // 月日键(A)
flg=10;
if(i-0xff2==0) // 月日键(B)
flg=11;
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -