×
单片机 > 单片机程序设计 > 详情

【ARM】2440裸机系列-RTC数字时钟

发布时间:2020-12-28 发布时间:
|

功能

裸机程序,实现LCD显示数字时钟

 

主要代码

1)背景绘制

1
2
3
4
5
6
7
8
9
10
11
void Brush_ U32  c)
{
    int x,y ;
    for ( y = 0 ; y < LCD_HEIGHT ; y++ )
    {
        for ( x = 0 ; x < LCD_WIDTH ; x++ )
        {
            LCD_BUFFER[y][x] = c ;
        }
    }
}

2)文字绘制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
void Draw_Text16(U32 x,U32 y,U32 color,U32 backColor,const unsigned char ch[])
{
    unsigned short int i,j;
    unsigned char mask,buffer;
    /*一个汉字16行*/
    for (i=0;i<16;i++)
    {
        /*汉字左半部分*/
        mask=0x80;                        //从bit7开始判断
        buffer=ch[i*2];                   //提取一行的第一个字节
        /*一个字节有8个位,每一位代表字模数据对应的点是否描颜色*/
        for (j=0;j<8;j++)
        {
            if (buffer&mask)
            {
                PutPixel(x+j,y+i,color);  //为笔画上色
            }
            else
            {
                PutPixel(x+j,y+i,backColor); //背景色
            }
            mask=mask>>1;                 //移位,为判断下一位作准备
        }
        /*汉字右半部分*/
        mask=0x80;                        //从bit7开始判断
        buffer=ch[i*2+1];                 //提取一行的第二个字节
        /*一个字节有8个位,每一位代表字模数据对应的点是否描颜色*/
        for (j=0;j<8;j++)
        {
            if (buffer&mask)
            {
                PutPixel(x+j+8,y+i,color); //为笔画上色
            }
            else
            {
                PutPixel(x+j+8,y+i,backColor);//背景色
            }
            mask=mask>>1;                 //移位,为判断下一位作准备
        }
    }
}

3)时钟设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void RTC_Time_Set( void )
{
    /*RTC读写使能,选择BCD时钟、计数器,无复位,1/32768*/
    rRTCCON = 1 ;  
    rBCDYEAR = 0x13;        /*年*/
    rBCDMON  = 0x05;        /*月*/
    rBCDDATE = 0x09;        /*日*/
    rBCDDAY  = 0x04;        /*星*/
    rBCDHOUR = 0x10;        /*小时*/
    rBCDMIN  = 0x57;        /*分*/
    rBCDSEC  = 0x20;        /*秒*/
    /*关读写使能*/
    rRTCCON &= ~1 ;
}

4)数字绘制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
void Draw_Text_8_16(U32 x,U32 y,U32 color,U32 backColor,const unsigned char *chs)
{
    U32 i=0;
    while (*chs != '')
    {   //汉字内码都是大于0xa0
        if (*chs > 0xa0)
        {
            /*查汉字表*/
            for (i=0 ;i < GB16_NUM();i++)
            {
                /*换行*/
                if(x>235)
                {
                    x=0;
                    y=y+16;
                }
                /*判断汉字是否匹配*/
                if ((*chs == hz_index[i]) && (*(chs+1) == hz_index[i+1]))
                {
                    /*写汉字*/
                    Draw_Text16(x,y,color,backColor,&hz[16*(i)]);
                    /*增加X坐标值,为写下一个汉字或字符作准备*/
                    x +=16;
                    break;
                }
            }
            /*字符串指针加2,一个汉字编译后内码占两个字节*/
            chs+=2;
        }
        /*如果是字符*/
        else
        {
            /*换行*/
            if(x>230)
            {
                x=0;
                y=y+16;
            }
            /*查字符表*/
            for (i=0 ;i < ASCII_NUM();i++)
            {
                /*判断字符是否匹配*/
                if (*chs == zf_index[i])
                {
                    /*写字符*/
Draw_ASCII(x,y,color,backColor,&zf[16*i]);

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计