在不使用RTC计时器的情况下,使用函数库所提供的ms级延时函数可以自行完成一个电子时钟的制作。 为了配合后续串口屏的使用,这里的时间值的输出被设计成串口屏所接收的指令格式,见下图所示。 其中t9.txt是用于显示时间值的变量属性,由于这里的时间值无需进行计时处理,故被设置为字符型。 串口屏指令格式 此外,由于串口屏的常规波特率为9600bps,故需对其加以调整,经验证要产生9600bps的波特率,应做如下定义:
#defineSERCOM2_USART_INT_BAUD_VALUE (65367U)
实现电子时钟功能的主程序为: - int main ( void )
- {
- float u;
- uint8_t
- uint8_t b[20]={0x74,0x39,0x2E,0x74,0x78,0x74,0x3D,0x22,0x30,0x38,0x3a,0x31,0x32,0x3a,0x30,0x30,0x22,0xff,0xff,0xff};
- // t9.txt="08:12:00"
- uint8_t i,j,m,h;
- SYS_Initialize ( NULL );
- SYSTICK_TimerStart();
- SERCOM2_USART_Initialize();
- i=0;
- j=0;
- m=12;
- h=8;
- for(i=0;i<22;i++)
- {
- SERCOM2_USART_WriteByte(a[i]);
- SYSTICK_DelayMs(10);
- }
-
- while(1)
- {
- for(i=0;i<20;i++)
- {
- SERCOM2_USART_WriteByte(b[i]);
- SYSTICK_DelayMs(10);
- }
- SYSTICK_DelayMs(800);
- j=j+1;
- if(j==60)
- {
- j=0;
- m=m+1;
- }
- b[14]=(j/10)+'0';
- b[15]=(j%10)+'0';
- if(m==60)
- {
- m=0;
- h=(h+1)%24;
- }
- b[11]=(m/10)+'0';
- b[12]=(m%10)+'0';
- b[8]=(h/10)+'0';
- b[9]=(h%10)+'0';
- }
- }
稍感不足的是,开发板上供调试用的串口2被专用化占有了,并没有像各厂商所采用的也能由用户使用的方式,应该增加2个焊盘将这2个引脚引出。
|