易码技术论坛

 找回密码
 加入易码
搜索
查看: 101859|回复: 0

[转帖][技巧]用左上角的七段数码显示数字的函数

[复制链接]
发表于 2005-12-30 12:01:59 | 显示全部楼层 |阅读模式
文曲星所有的大屏幕型号的特殊显示的内存地址,相对与_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();
}
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-8-24 17:53 , Processed in 0.008690 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表