[PIC®/AVR®/dsPIC®产品] 【ATSAMD51EVK测评报告】+利用ms级延时实现电子时钟功能

[复制链接]
1321|7
 楼主| jinglixixi 发表于 2022-12-15 19:32 | 显示全部楼层 |阅读模式
在不使用RTC计时器的情况下,使用函数库所提供的ms级延时函数可以自行完成一个电子时钟的制作。
为了配合后续串口屏的使用,这里的时间值的输出被设计成串口屏所接收的指令格式,见下图所示。
其中t9.txt是用于显示时间值的变量属性,由于这里的时间值无需进行计时处理,故被设置为字符型。
串口屏指令格式
此外,由于串口屏的常规波特率为9600bps,故需对其加以调整,经验证要产生9600bps的波特率,应做如下定义:

#defineSERCOM2_USART_INT_BAUD_VALUE      (65367U)

实现电子时钟功能的主程序为:
  1. int main ( void )
  2. {
  3.     float u;
  4.     uint8_t   
  5.     uint8_t b[20]={0x74,0x39,0x2E,0x74,0x78,0x74,0x3D,0x22,0x30,0x38,0x3a,0x31,0x32,0x3a,0x30,0x30,0x22,0xff,0xff,0xff};
  6.     // t9.txt="08:12:00"
  7.     uint8_t i,j,m,h;
  8.     SYS_Initialize ( NULL );
  9.     SYSTICK_TimerStart();
  10.     SERCOM2_USART_Initialize();
  11.     i=0;
  12.     j=0;
  13.     m=12;
  14.     h=8;
  15.     for(i=0;i<22;i++)
  16.     {
  17.        SERCOM2_USART_WriteByte(a[i]);
  18.        SYSTICK_DelayMs(10);
  19.     }
  20.    
  21.     while(1)
  22.     {
  23.         for(i=0;i<20;i++)
  24.         {
  25.            SERCOM2_USART_WriteByte(b[i]);
  26.            SYSTICK_DelayMs(10);
  27.         }
  28.         SYSTICK_DelayMs(800);
  29.         j=j+1;
  30.         if(j==60)
  31.         {
  32.            j=0;
  33.            m=m+1;
  34.         }
  35.         b[14]=(j/10)+'0';
  36.         b[15]=(j%10)+'0';
  37.         if(m==60)
  38.         {
  39.            m=0;
  40.            h=(h+1)%24;
  41.         }
  42.         b[11]=(m/10)+'0';
  43.         b[12]=(m%10)+'0';
  44.         b[8]=(h/10)+'0';
  45.         b[9]=(h%10)+'0';
  46.     }
  47. }

稍感不足的是,开发板上供调试用的串口2被专用化占有了,并没有像各厂商所采用的也能由用户使用的方式,应该增加2个焊盘将这2个引脚引出。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
gygp 发表于 2022-12-22 19:29 | 显示全部楼层
为什么不使用定时器呢?              
mollylawrence 发表于 2022-12-22 19:38 | 显示全部楼层
可以使用定时器实现精准延时。              
 楼主| jinglixixi 发表于 2022-12-23 00:11 | 显示全部楼层
gygp 发表于 2022-12-22 19:29
为什么不使用定时器呢?

当时没用到,因为MCC无法使用也就无法配置计时器了,其实延时函数用的也是计时器。
macpherson 发表于 2022-12-24 21:29 | 显示全部楼层
这个电子时钟还有精度要求吗?              
 楼主| jinglixixi 发表于 2022-12-25 10:24 | 显示全部楼层
macpherson 发表于 2022-12-24 21:29
这个电子时钟还有精度要求吗?

短时间内没问题
maqianqu 发表于 2023-1-6 17:51 | 显示全部楼层
如果使用指令,怎么实现1ms级别的延时?
 楼主| jinglixixi 发表于 2023-1-7 00:35 | 显示全部楼层
maqianqu 发表于 2023-1-6 17:51
如果使用指令,怎么实现1ms级别的延时?

调用库中提供的延时函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2950

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部