c实现动态时间打印. 请教。

calvary 发布于 2013/11/21 16:49
阅读 913
收藏 1

   如题, 是前几年一公司面试的题.  获取系统时间, 动态打印时间.按照LED显示格式  . 

当时用java来做的。想想用c来做.该怎么实现..?  目前在学习c的东西,请教oscer  们...!

加载中
0
3_14159265359
3_14159265359

好吧,无聊写了一下特别垃圾的,分辨率太低就直接很多条printf了,懒得for循环了。linux环境。3X5的分辨率。

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <time.h>

uint8_t hehe[10][5] = { { 7, 5, 5, 5, 7 }, // 0
		{ 1, 1, 1, 1, 1 }, // 1
		{ 7, 1, 7, 4, 7 }, // 2
		{ 7, 1, 7, 1, 7 }, // 3
		{ 5, 5, 7, 1, 1 }, // 4
		{ 7, 4, 7, 1, 7 }, // 5
		{ 7, 4, 7, 5, 7 }, // 6
		{ 7, 1, 1, 1, 1 }, // 7
		{ 7, 5, 7, 5, 7 }, // 8
		{ 7, 5, 7, 1, 7 }, // 9
		};

uint8_t mask1 = 4;
uint8_t mask2 = 2;
uint8_t mask3 = 1;

int main() {
	struct tm * st;
	system("clear");
	int i;
	int t1, t2, t3, t4, t5, t6;
	while (1) {
		time_t timep;
		time(&timep);
		st = localtime(&timep);
		t1 = st->tm_hour / 10;
		t2 = st->tm_hour % 10;
		t3 = st->tm_min / 10;
		t4 = st->tm_min % 10;
		t5 = st->tm_sec / 10;
		t6 = st->tm_sec % 10;
		for (i = 0; i < 5; i++) {
			printf(((hehe[t1][i] & mask1) == 0) ? " " : "█");
			printf(((hehe[t1][i] & mask2) == 0) ? " " : "█");
			printf(((hehe[t1][i] & mask3) == 0) ? " " : "█");
			printf(" ");
			printf(((hehe[t2][i] & mask1) == 0) ? " " : "█");
			printf(((hehe[t2][i] & mask2) == 0) ? " " : "█");
			printf(((hehe[t2][i] & mask3) == 0) ? " " : "█");
			printf((i==1 || i==3)?" █ ":"   ");
			printf(((hehe[t3][i] & mask1) == 0) ? " " : "█");
			printf(((hehe[t3][i] & mask2) == 0) ? " " : "█");
			printf(((hehe[t3][i] & mask3) == 0) ? " " : "█");
			printf(" ");
			printf(((hehe[t4][i] & mask1) == 0) ? " " : "█");
			printf(((hehe[t4][i] & mask2) == 0) ? " " : "█");
			printf(((hehe[t4][i] & mask3) == 0) ? " " : "█");
			printf((i==1 || i==3)?" █ ":"   ");
			printf(((hehe[t5][i] & mask1) == 0) ? " " : "█");
			printf(((hehe[t5][i] & mask2) == 0) ? " " : "█");
			printf(((hehe[t5][i] & mask3) == 0) ? " " : "█");
			printf(" ");
			printf(((hehe[t6][i] & mask1) == 0) ? " " : "█");
			printf(((hehe[t6][i] & mask2) == 0) ? " " : "█");
			printf(((hehe[t6][i] & mask3) == 0) ? " " : "█");
			printf("\n");
		}
		fflush(stderr);
		system("sleep 1");
		system("clear");
	}

	return 0;
}



0
calvary
calvary

@中山野鬼 来看下.

  好像你问题想的太多了.  来调整下心情.

0
中山野鬼
中山野鬼
做两个进程或者线程。其中一个是死循环有个sleep,sleep完了折腾该折腾的,折腾完成后读取一个全局值判定是否有退出要求,没有就继续循环,有就推出这个循环。另一个就是等外部触发,给那个全局值发信息。就这么简单。没必要搞其他复杂的东西。哈
中山野鬼
中山野鬼
回复 @crazyer : 你说的是7段数码管的打印方式吗?这个驱动实现方法外面有,我就不写了,以前也写过。最简单的是查表处理。哈。
calvary
calvary
野鬼. 求一部分代码.. 只要 打印 出 电子手表或者 LED广告屏 显示的那种格式 算法. 其他的 我可以整.
0
calvary
calvary

 没有人来看下吗... ?

   .. c来做  打印格式就是诸如:  

        

0
泡不烂的凉粉
泡不烂的凉粉

门电路控制, 7个开关, 从0到9定义一个长度为10字节的数组, 将控制信息放进数组里. 数组索引从0到9对应10个显示控制信息.显示部分基本上就完成了.

获取部分就是调用时钟,获取信息, 查表法获取信息, 更新显示就完成了. 我记得<编译原理>还是<编码大全>里面有标准的程序. 似乎有现成的例子,作为学习还行,如果应用直接拿来就好.这样的代码资源很丰富的.

calvary
calvary
THANKS .. 说的很好.
返回顶部
顶部