这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » sacq的进程帖

共66条 4/7 |‹ 2 3 4 5 6 7 跳转至
高工
2012-09-02 10:48:04     打赏
31楼

在LCD1602 终于成功驱动后,继续——显示RTC

  RTC的主要源码严重地参照例程中的RTC部分,对着源码操作Applilet产生相近的初始代码,有少部分代码有区别,估计是不同版本的缘故。对于主程序及中断程序里的代码,尽量消化了采用。
  看着例程中的一些代码,也是一个不错的学习过程。比如中断程序里的对时间显示的处理,比较简洁,很值得学习。
  用Applilet产生INT是首次,产生初始及相应入口代码。目前只是学习模仿阶段。(与中断相关的文件名带有int,int_user)

部分代码:
=========================
/*
**-----------------------------------------------------------------------------
**
**  Abstract:
** This function is INTRTC interrupt service routine.
**
**  Parameters:
** None
**
**  Returns:
** None
**
**-----------------------------------------------------------------------------
*/
#pragma vector = INTRTC_vect
__interrupt void MD_INTRTC(void)
{
 RTC_ConstPeriodInterruptCallback();
}
/*
**-----------------------------------------------------------------------------
**
**  Abstract:
** This function is real-time clock constant-period interrupt service handler.
**
**  Parameters:
** None
**
**  Returns:
** None
**
**-----------------------------------------------------------------------------
*/
void RTC_ConstPeriodInterruptCallback(void)
{
 /* Start user code. Do not edit comment generated here */
 
        /* Read the RTC data */
//    R_RTC_Get_CounterValue(&stRTC_Data);  // 换个说法
    RTC_CounterGet(&stRTC_Data);

    /* Read the seconds value */
    lcd_buffer[7] = (stRTC_Data.Sec & 0x0F) + 0x30;
    lcd_buffer[6] = (stRTC_Data.Sec >> 4) + 0x30;
   
    /* Read the minutes value */
    lcd_buffer[4] = (stRTC_Data.Min & 0x0F) + 0x30;
    lcd_buffer[3] = (stRTC_Data.Min >> 4) + 0x30;

    /* Read the hours value */
    lcd_buffer[1] = (stRTC_Data.Hour & 0x0F) + 0x30;
    lcd_buffer[0] = (stRTC_Data.Hour >> 4) + 0x30;

   
    /* Display the time on the debug LCD */
   //  DisplayString(LCD_LINE2, lcd_buffer);
   //     ShowString(1, lcd_buffer);
       
 /* End user code. Do not edit comment generated here */
}

/* Start user code for adding. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */

=========================

(上段要点:读取RTC,并将各位拼成ASCII后送到显示缓冲器,在LCD第2行显示“时间”)

在原来的例程里,是在中断程序里做LCD显示的,我的实际效果并不理想,改在主程序的空闲时更新“时间”显示,似更合理吧。



院士
2012-09-02 13:19:01     打赏
32楼
对,中断的使用要越简洁越好~~
话说RTC的实验我还没有做呢……

高工
2012-09-02 16:10:43     打赏
33楼
中断要简洁
呵呵,来自现场的声音

高工
2012-09-06 18:06:33     打赏
34楼
原准备在RTC显示的基础上再加AD,可这几天进展并不顺利。可能是不大的问题,但就是不按要求工作。
正在继续仔细研究相关资料及例程中。

高工
2012-09-07 22:27:30     打赏
35楼
把驱动蜂鸣器的功能玩个够!——驱动蜂鸣器改变声音频率

用RL78的2个专用输出端驱动蜂鸣器,声音的调子的很有限的几种,视频中连续使用其中的6种。
编程要点:选副时钟是必须的;再用现成的改变频率的函数。

主要的程序段都在这:

       PCLBUZ0_Init() ;

         for(k=15;k>7;k--)
       {
             PCLBUZ0_ChangeFreq(k);
             PCLBUZ0_Start() ;
           delay2(150) ;
           PCLBUZ0_Stop() ;
           delay2(150) ;
       }

啥也不说了,翠花!上视频——





工程师
2012-09-07 23:35:14     打赏
36楼
楼主驾轻就熟,很佩服。学习了。

高工
2012-09-08 16:50:40     打赏
37楼

LCD1602显示RTC,ADC.

ADC:ANI2(P2.2),10位,软件触发;用Applilet产生AD初始代码,小心地选择。

【使用资源】
LCD1602 : P7 , P4.1~3
RTC: INTRTC(中断)
ADC:P2.2 ,INTAD(中断)

【关键程序】
AD中断程序是:
__interrupt void MD_INTAD(void)
{
 /* Start user code. Do not edit comment generated here */
 
         gADC_Result = ADCR >> 6;
         ADIF = 0;
 
 /* End user code. Do not edit comment generated here */
}

其实不用也罢。



【视频】 RTC和 ADC同时在LCD1602上显示



【看点】调节电位器(P2.2),ADC值变化,LCD的对比度同时变化(对比调节目前暂借用P2.2的电位器)


高工
2012-09-08 16:57:56     打赏
38楼

外部中断的实验

在LCD1602显示RTC,ADC的基础上加个外部中断.
响应按钮中断后,显示日期。在中断期间有蜂鸣器提示音。

【使用资源】
LCD1602 : P7 , P4.1~3
RTC: INTRTC(中断)
ADC:P2.2 ,INTAD(中断)
PCLBUZ0: P141
P5.0,  INTP1(中断)

【关键程序】(外部中断程序:日期数据送显示,蜂鸣器的启、停)
#pragma vector = INTP1_vect
__interrupt void MD_INTP1(void)
{
 /* Start user code. Do not edit comment generated here */
 
    PCLBUZ0_Start();
 
    /* Read the day value */
    lcd_buffer1[7] = (stRTC_Data.Day & 0x0F) + 0x30;
    lcd_buffer1[6] = (stRTC_Data.Day >> 4) + 0x30;
   
    /* Read the month value */
    lcd_buffer1[4] = (stRTC_Data.Month & 0x0F) + 0x30;
    lcd_buffer1[3] = (stRTC_Data.Month >> 4) + 0x30;

    /* Read the year value */
    lcd_buffer1[1] = (stRTC_Data.Year & 0x0F) + 0x30;
    lcd_buffer1[0] = (stRTC_Data.Year >> 4) + 0x30;
   
    lcd_buffer1[2]=lcd_buffer1[5]='-';
 
    ShowString(1, lcd_buffer1);  
   
 

    /* Clear interrupt flag */
    PIF1 = 0;
 
    PCLBUZ0_Stop();
 /* End user code. Do not edit comment generated here */
}

【视频】


【看点】按下按钮后,上一行显示被替换为日期显示。按钮作为外部中断,在执行这个中断期间,蜂鸣器是响的。时间较短,听到的是简短的“嗒”声。


高工
2012-09-09 12:14:22     打赏
39楼
定时器(500mS)控制ADC,显示温度值,进行中
目前已可以显示出:ADC源码(H),温度值(H),当然RTC也还在,就差把温度转换成10进制并显示了。

高工
2012-09-09 23:39:43     打赏
40楼
先上真相和视频,文字说明待后再补。




共66条 4/7 |‹ 2 3 4 5 6 7 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]