- 注册时间
- 2005-12-29
- 最后登录
- 1970-1-1
|
文曲星所有的大屏幕型号的特殊显示的内存地址,相对与_GRAPH都是在同一位置吧,如果不是的话,这个程序就是在PC2000C上用过的。
这是一个利用该函数在左上角显示时间的程序。
程序运行时按输入可以切换显示小时:分钟 或者是 分钟:秒
按跳出键退出程序。
int digmem[4][8] = {320, 340, 380, 420, 440, 300, 360, 180,
220, 260, 480, 500, 520, 200, 280, 460,
120, 140, 580, 600, 620, 100, 160, 540,
20, 40, 660, 680, 700, 0, 60, 640};
char diginf[16] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,
// 0 1 2 3 4 5 6 7 8 9
0x77, 0x7C, 0x58, 0x5E, 0x79, 0x71};
// A B C D E F
struct TIME
{
int year;
char month;
char day;
char hour;
char minute;
char second;
char week;
};
struct TIME time;
//
void DigShow(int dignum, char mode)
//用文曲星左上角的四个七段数码来显示数字,从右至左依次为0-3号。
//dignum从0至15每4位代表一个七段数码(0-3:0号,4-7:1号,8-11:3号,12-15:4号)
//mode的0-3位置1时,更新该七段数码显示
//mode的4-7位,分别代表冒号和由右至左3个小数点,置1时显示。
//3个小数点是它自身左边的七段数码的7位。冒号为第0号七段数码显示的7位。
{
int i;
int j;
char mem;
char code;
for(i=0; i<4; i++)
{
if(mode >> i & 0x0001)
{
code = dignum >> (i*4) & 0x000f;
code = diginf[code];
if(mode >> i & 0x10)
code = code | 0x80;
for(j=0; j<8; j++)
{
mem = *(_GRAPH + digmem[j]);
if(code >> j & 0x01)
mem = mem | 0x80;
else
mem = mem & 0x7f;
memset(_GRAPH + digmem[j], mem, 1);
}
}
}
}
void main()
{
int digi;
int mode;
char flag;
ClearScreen();
Refresh();
flag = 1;
while(!CheckKey(27))
{
if(CheckKey(13))
{
while(CheckKey(13)); file://防止按键过灵现象
flag = flag ^ 0x01;
}
GetTime(time);
if(flag)
digi = time.hour/10*4096 + time.hour%10*256 + time.minute/10*16 + time.minute%10;
else
digi = time.minute/10*4096 + time.minute%10*256 + time.second/10*16 + time.second%10;
if(Getms()<128) file://制造时间中间的冒号的闪烁
mode = 0x1f;
else
mode = 0x0f;
DigShow(digi, mode);
}
getchar();
}
|
|