TFT实现表盘显示功能

客户要求在320x240TFT的彩屏上实现手表显示的功能,我的项目没有跑GUI,只是简单点亮屏目,开始是一筹莫展,没思路,经过几天琢磨,我把实现的方法记录下来。

1,首先是贴图贴个表盘,这个可以把图片转成数组,可以直接刷到TFT屏上。

2,接下来就是如何实现刷时针分针和秒针,刷的原理,把圆分成120等份(60等份也可以),也就是360/60,也就是秒走一步的角度是6度,秒表跑可以看成半径指定长度按6度进行旋转(个人是这理解)。

3,画线,TFT彩屏画线,两个点的坐标就可以画线,表盘的原点是固定的,另一个点坐标也就半径指定长度圆上的点,计算公式是:

                                

 根据公式可以算出圆盘120点的坐标

#include <stdio.h>
#include <math.h>

int main(char argc,char *argv[])
{
    double x1 = 0,y1 = 0;
    double input_table[4] ={0,159,119,60};
    int i = 0,t,j;
    FILE * p;
    if(argc != 4)
    {
        printf("\n输入三个参数原点坐标和半径格式【x y z】");
        system("pause");
        return;
    }
     if(argv[3][0] >= '5')
    {
        p = fopen ("minute_hand_table.c", "w+");
        if(p == NULL)
        {
            printf("\n创建gFontAsci文件失败!");
            return 0;
        }
        fputs("\ncode uint8_t minute_hand_table[] = {\n",p);
    }
    else
    {
        p = fopen ("hour_hand_table.c", "w+");
        if(p == NULL)
        {
            printf("\n创建gFontAsci文件失败!");
            return 0;
        }
        fputs("\ncode uint8_t hour_hand_table[] = {\n",p);
    }
    //fprintf(p,"\n%s",argv[0]);
    for(j = 1; j < argc; j++)
    {
        input_table[j] = 0;
        i = 0;
        input_table[j] += argv[j][i] - '0';
        for(i = 1; argv[j][i]; i++)
        {
            input_table[j] *= 10;
            input_table[j] += (argv[j][i] - '0');

        }
        fprintf(p,"\n/*argy[%02d]=%03.0lf*/",j,input_table[j]);
    }
    for(i = 0; i < 360; i = i + 3)
    {
        if(i <= 90)
            t = 90 - i;
        else
            t = (450 - i);
        x1   =   input_table[3]   *   cos(t   *   3.14   /180   );
        y1   =   input_table[3]   *   sin(t   *   3.14   /180   );
        fprintf(p,"\n/*%03d*/\t%3.0lf,%3.0lf,",t,x1 + input_table[1],y1 + input_table[2]);
    }
    fputs("\n};\n",p);
    fclose(p);

}

我输入参数 circle.exe 160 120 36

原点的坐标【160,120】
半径为36个单位。
生成圆的数据如下:
 


code uint8_t hour_hand_table[] = {

/*argy[01]=160*/
/*argy[02]=120*/
/*argy[03]=036*/
/*090*/	160,156,
/*087*/	162,156,
/*084*/	164,156,
/*081*/	166,156,
/*078*/	168,155,
/*075*/	169,155,
/*072*/	171,154,
/*069*/	173,154,
/*066*/	175,153,
/*063*/	176,152,
/*060*/	178,151,
/*057*/	180,150,
/*054*/	181,149,
/*051*/	183,148,
/*048*/	184,147,
/*045*/	185,145,
/*042*/	187,144,
/*039*/	188,143,
/*036*/	189,141,
/*033*/	190,140,
/*030*/	191,138,
/*027*/	192,136,
/*024*/	193,135,
/*021*/	194,133,
/*018*/	194,131,
/*015*/	195,129,
/*012*/	195,127,
/*009*/	196,126,
/*006*/	196,124,
/*003*/	196,122,
/*000*/	196,120,
/*357*/	196,118,
/*354*/	196,116,
/*351*/	196,114,
/*348*/	195,112,
/*345*/	195,111,
/*342*/	194,109,
/*339*/	194,107,
/*336*/	193,105,
/*333*/	192,104,
/*330*/	191,102,
/*327*/	190,100,
/*324*/	189, 99,
/*321*/	188, 97,
/*318*/	187, 96,
/*315*/	185, 94,
/*312*/	184, 93,
/*309*/	183, 92,
/*306*/	181, 91,
/*303*/	180, 90,
/*300*/	178, 89,
/*297*/	176, 88,
/*294*/	175, 87,
/*291*/	173, 86,
/*288*/	171, 86,
/*285*/	169, 85,
/*282*/	167, 85,
/*279*/	166, 84,
/*276*/	164, 84,
/*273*/	162, 84,
/*270*/	160, 84,
/*267*/	158, 84,
/*264*/	156, 84,
/*261*/	154, 84,
/*258*/	152, 85,
/*255*/	151, 85,
/*252*/	149, 86,
/*249*/	147, 86,
/*246*/	145, 87,
/*243*/	144, 88,
/*240*/	142, 89,
/*237*/	140, 90,
/*234*/	139, 91,
/*231*/	137, 92,
/*228*/	136, 93,
/*225*/	134, 95,
/*222*/	133, 96,
/*219*/	132, 97,
/*216*/	131, 99,
/*213*/	130,100,
/*210*/	129,102,
/*207*/	128,104,
/*204*/	127,105,
/*201*/	126,107,
/*198*/	126,109,
/*195*/	125,111,
/*192*/	125,113,
/*189*/	124,114,
/*186*/	124,116,
/*183*/	124,118,
/*180*/	124,120,
/*177*/	124,122,
/*174*/	124,124,
/*171*/	124,126,
/*168*/	125,128,
/*165*/	125,129,
/*162*/	126,131,
/*159*/	126,133,
/*156*/	127,135,
/*153*/	128,136,
/*150*/	129,138,
/*147*/	130,140,
/*144*/	131,141,
/*141*/	132,143,
/*138*/	133,144,
/*135*/	135,145,
/*132*/	136,147,
/*129*/	137,148,
/*126*/	139,149,
/*123*/	140,150,
/*120*/	142,151,
/*117*/	144,152,
/*114*/	145,153,
/*111*/	147,154,
/*108*/	149,154,
/*105*/	151,155,
/*102*/	153,155,
/*099*/	154,156,
/*096*/	156,156,
/*093*/	158,156,
};

同样的方法生成时针数据和分针数据,原点一样,只是半径不同。

秒针的刷新也就是一秒种刷新一次,把(x0,y0)和(x1,y1)画一条线就可以了,

时针的刷新 360 / 12 = 30,我生成的数据是按3度为单位。

时针的偏移量 = 小时 * 30 + 分钟 * 30  / 60
比如时间15:45:40
秒针=40 * 120  /  60  = 80 也就是数组索引80的数据
分针=45 * 120  /  60  = 90 也就是数组索引90的数据

时针=((15- 12 )* 30  + (45 * 30) / 60)  * 120  /  360 =  44也就是数组索引44的数据
最终实现的效果如下:

 

### 回答1: 正点原子TFT-LCD显示屏可以通过使用相应的字库和控制程序来显示汉字。 首先,要在显示屏上显示汉字,需要一个包含汉字的字库。正点原子提供了一些常用的汉字字库,可以根据需要选择合适的字库。通过将字库文件下载到TFT-LCD显示屏的存储介质中,并在程序中引入字库文件,就可以在显示屏上显示汉字了。 其次,需要编写相应的控制程序。通过控制程序,可以将需要显示的汉字从字库文件中提取出来,并按照像素点的形式显示TFT-LCD屏幕上。控制程序需要根据显示屏的具体尺寸和分辨率进行调整,以确保汉字显示的清晰和准确度。 在编写控制程序时,还需要考虑到汉字显示的大小、颜色和位置等因素。可以通过设置程序参数来控制这些因素,以满足具体需求。 综上所述,正点原子TFT-LCD显示屏可以通过使用字库和控制程序来显示汉字。通过选择合适的字库文件,并编写相应的控制程序,可以在显示屏上清晰地显示汉字。这为使用TFT-LCD显示屏的用户提供了一个方便和灵活的汉字显示解决方案。 ### 回答2: 正点原子 TFT LCD 是一种显示屏,可以显示汉字。TFT 是“薄膜晶体管”的缩写,是一种用于液晶显示屏的技术。而 LCD 是“液晶显示”技术的缩写,是一种常见的显示技术。 正点原子 TFT LCD 的显示效果非常好,可以清晰地显示汉字。通过控制屏幕上的每一个像素点的亮度和颜色,可以组成文字和图形。利用正点原子 TFT LCD 的显示功能,可以在屏幕上显示各种汉字信息。 在正点原子 TFT LCD 上显示汉字需要通过微控制器或者其他控制设备来控制。首先,需要将需要显示的汉字转换为对应的字符编码。然后,通过控制正点原子 TFT LCD 的接口,将字符编码传输给显示屏。显示屏收到字符编码后,根据编码进行像素点的点亮操作,从而显示出对应的汉字。 通过正点原子 TFT LCD 的显示功能,我们可以实现各种应用。比如在手持设备中显示汉字输入法,使用户可以方便地输入和编辑汉字;还可以在数字广告牌、计算器、仪表盘等设备中显示各种信息,从而满足用户对汉字显示的需求。 总之,正点原子 TFT LCD 是一种能够清晰显示汉字的显示屏,可以通过控制接口实现汉字的显示,并且可以应用于多种设备和场景中。 ### 回答3: 正点原子TFT LCD显示汉字的原理是通过将汉字转换成像素点来显示。首先,将汉字进行数字化处理,将每个汉字划分为一个个字形,然后将字形转换成点阵的形式。每个点阵由一组二进制数据表示,其中1表示该点亮,0表示该点灭。 接下来,将转换后的点阵数据通过控制芯片传输到TFT LCD屏幕上。TFT LCD屏幕由许多微小的像素点组成,在每个像素点都有三种颜色的液晶单元,分别是红、绿、蓝,通过调控液晶单元的透明度来产生不同的颜色。 控制芯片按照点阵数据将相应像素点的液晶单元控制为透明或不透明的状态,从而实现对应汉字的显示。控制芯片还会根据TFT LCD的特性来调整像素点的亮度和对比度,确保显示出的汉字清晰可见。 最后,在显示汉字的过程中,还需要对TFT LCD屏幕进行电源控制和刷新操作,以保证汉字的显示效果持久稳定。这样,通过将汉字点阵数据转换成像素点来控制TFT LCD屏幕的液晶单元,就能够实现正点原子TFT LCD显示汉字的功能
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值