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

功能

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

 


主要代码

 

1)背景绘制

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)文字绘制

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)时钟设置

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)数字绘制

void Draw_Text_8_16(U32 x,U32 y,U32 color,U32 backColor,const unsigned char *chs)
{
    U32 i=0;
    while (*chs != '\0')
    {   //汉字内码都是大于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]);
                    /*增加X坐标值,为写下一个汉字或字符作准备*/
                    x += 8;
                    break;
                }
            }
            /*字符串指针加1,一个字符编译后内码占1个字节*/
            chs++;
        }
    }
}

 

 


5)时钟显示

void rtc_display_lcd(void)
 {
                          //0   1   2   3   4
     unsigned char time[]={'2','0','1','3','-',
                          //5   6   7   8   9  10
                           '0','5','-','0','9',' ',
                          //11  12  13  14  15  16  17  18
                           '1','5',':','2','1',':','5','9',
                           '\0'};
     time[2]=rBCDYEAR/16+'0';   //年十位,16进制
     time[3]=rBCDYEAR%16+'0';   //年个位
     time[5]=rBCDMON/16+'0';    //月十位
     time[6]=rBCDMON%16+'0';    //月个位
     time[8]=rBCDDATE/16+'0';   //天十位
     time[9]=rBCDDATE%16+'0';   //天个位
     time[11]=rBCDHOUR/16+'0';   //时十位
     time[12]=rBCDHOUR%16+'0';   //时个位
     time[14]=rBCDMIN/16+'0';    //分十位
     time[15]=rBCDMIN%16+'0';    //分个位
     time[17]=rBCDSEC/16+'0';   //秒十位
     time[18]=rBCDSEC%16+'0';   //秒个位
     /*调用LCD显示时间程序*/
     if(time[18]%2==1)
     {
      time[16]=':';
     }
     else
     {
      time[16]=' ';
     }
     Draw_Text_8_16(50,220,0x0,0xffff,(const unsigned char * )time);   
}

 

 


6)实时刷新

    while (1)
    {
        /*读取时间,并LCD显示*/                       
        rtc_display_lcd();
        for(r=0;r<3;r++)
    {
        for(a=0;a<(2*PI);)
        {
            X=(int)(r*cos(a)+120);
            Y=(int)(r*sin(a)+120);
            LCD_BUFFER[Y][X]=0X00;
            a=a+(PI/360);
        }
    }
/************秒指针的显示*************/ 
        n=(rBCDSEC/16)*10+(rBCDSEC%16);
        if(secondbit!=n)
        {
            for(w=0;w<66;w++)//清前一秒秒表指针,必须要清掉      
            {
                X=(int)(w*cos((3*PI/2)+secondbit*(PI/30))+120);
                Y=(int)(w*sin((3*PI/2)+secondbit*(PI/30))+120);
                LCD_BUFFER[Y][X]=0Xffff;
            }
            for(w=0;w<66;w++)    //显示当前秒表指针
            {
                X=(int)(w*cos((3*PI/2)+n*(PI/30))+120);
                Y=(int)(w*sin((3*PI/2)+n*(PI/30))+120);
                LCD_BUFFER[Y][X]=0X00;
            } 
        }
/************分指针的显示*************/
        m=(rBCDMIN/16)*10+(rBCDMIN%16);
        if(minbit!=m||m==secondbit)
        {
            for(w=0;w<55;w++)//清前一秒分钟指针    
            {
                X=(int)(w*cos((3*PI/2)+minbit*(PI/30))+120);
                Y=(int)(w*sin((3*PI/2)+minbit*(PI/30))+120);
                LCD_BUFFER[Y][X]=0Xffff;      
            }
            for(w=0;w<55;w++)    //显示当前分钟指针
            {     
                X=(int)(w*cos((3*PI/2)+m*(PI/30))+120);
                Y=(int)(w*sin((3*PI/2)+m*(PI/30))+120);
                LCD_BUFFER[Y][X]=0X00;
            } 
        }
/************小时指针的显示*************/
        h=(rBCDHOUR/16)*10+(rBCDHOUR%16);
        if(h>12)
        h-=12;
        if(hourbit!=h||h==(minbit/5)||h==(secondbit/5))
        {
            for(w=0;w<38;w++)//清前一小时指针     
            {
                X=(int)(w*cos((3*PI/2)+hourbit*(PI/30))+120);
                Y=(int)(w*sin((3*PI/2)+hourbit*(PI/30))+120);
                LCD_BUFFER[Y][X]=0xffff;
            }
            for(w=0;w<38;w++)    //显示当前小时指针
            {     
                X=(int)(w*cos((3*PI/2)+h*(PI/6))+120);
                Y=(int)(w*sin((3*PI/2)+h*(PI/6))+120);
                LCD_BUFFER[Y][X]=0X00;
            } 
        }
        hourbit   = h;
        minbit    = m;
        secondbit = n;
    }

 

 


时钟效果

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: List<Ticket> getAllTickets() { return ticketDAO.getAllTickets(); } @Override public void addTicket(Ticket ticket) { ticketDAO.addTicket(ticket); } } ``` 6. 创建View层。在View层中,你需要编Temper-RTC是一种集成了温度传感器和实时时钟RTC)功能的电子元器写一些页面,用于显示用户信息和票务信息。这些页面需要调用Service层的方法,并将返回的件。它通常用于需要同时测量温度和计时的应用场景,例如温度控制系统、数据显示在页面上。代码如下: - user.jsp ```jsp <%@ page language="java" contentType="text/html;环境监测系统、电子钟表等。 Temper-RTC的温度传感器通常采用数字式温 charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/j度传感器,可以提供高精度、高稳定性的温度测量结果。其RTC功能则可以提sp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>供高精度的时间计数和日期记录,可以用于实现时间戳、定时器、日历等功能。 个人中心</title> </head> <body> <h1>个人中心</h1> <h2在使用Temper-RTC时,需要注意正确配置温度传感器和RTC参数,以确保其测量精度>用户信息</h2> <table> <thead> <tr> <th>ID</th> <th和计时精度符合要求。同时,还需要注意电源和引脚连接等方面的问题,以避>用户名</th> <th>邮箱</th> </tr> </thead> <tbody> <tr免电路干扰和信号损失等问题。 ### 回答2: temper-rtc是一种温度记录器和控制器。它主要用于监测和控制温度,广泛应用于实验室、医疗、食品加工和其他需要精确温度控制的领域。 temper-rtc具有高精度的温度测量能力,可以实时监测温度变化,并显示在屏幕上。同时,它还可以将温度数据存储在内部存储器中,以便之后进行数据分析和记录。此外,temper-rtc还可以通过无线或有线方式与计算机或其他外部设备连接,以便实现远程监控和控制。 temper-rtc还具有温度控制功能。用户可以设置温度上下限,并根据实际需求进行调整。一旦温度超过或低于设定的限制,temper-rtc将自动触发报警系统,以提醒用户温度异常。此外,temper-rtc还可以根据预设的控制参数自动调整温度控制设备的工作,以维持温度稳定。 temper-rtc具有小巧、便携和易于操作的特点。它通常由一个控制器和一个温度传感器组成,用户可以轻松携带和安装。控制器上配备了直观的操作界面和显示屏,用户可以方便地设置参数和查看温度信息。 总而言之,temper-rtc是一种功能强大的温度记录器和控制器,可以准确测量和监控温度,并实现远程控制和报警功能。它在各种需要精确温度控制的环境中广泛应用,为用户提供了方便、灵活和可靠的温度管理解决方案。 ### 回答3: temper-rtc是一款基于实时时钟RTC)的温度传感器。RTC是一种能够实时测量和记录时间的电子设备,常用于计算机、电子设备和检测设备中。temper-rtc结合了RTC技术和温度传感器技术,提供了实时测量环境温度的功能。 temper-rtc的工作原理是通过温度传感器实时感知环境的温度,并将温度数据传输给RTCRTC通过内部的时钟来记录测量的时间,并保存温度数据。用户可以通过连接temper-rtc与电脑或其他设备,读取温度数据并进行分析和处理。 temper-rtc有多种用途。首先,它可以用于监控环境温度,例如在实验室、仓库或其他需要保持特定温度的场所。其次,temper-rtc可以用于数据记录和分析。用户可以使用temper-rtc来记录温度变化情况,比如在气象研究中分析气温的变化趋势。最后,temper-rtc也可以用于温度控制系统中。通过实时监测温度,并根据预设条件调整环境温度,实现温度的自动调控。 总之,temper-rtc是一款基于实时时钟的温度传感器,结合了RTC技术和温度传感器技术,能够实时感知环境温度并记录温度数据。它有广泛的应用领域,包括环境监测、数据记录和分析以及温度控制系统中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值