[开源硬件] M453使用自带RTC并驱动农行金e顺变身桌面小时钟

[复制链接]
3416|15
 楼主 | 2018-6-30 17:02 | 显示全部楼层 |阅读模式
本帖最后由 springvirus 于 2018-6-30 17:17 编辑

继点亮建行E路通后,接着点农行金e顺,开始一直认为主控是UC1604,折腾一番后效果不对读一些例子程序和研读ST7567的手册后,觉得应该是此主控,着手进行测试

屏是FPC连接,型号为FT12864T29-16.35,共12pin   
引脚有2个未接,以此作为参考点
1. N.C.   2. N.C.  3. C2    4. C1    5. C1'    6.GND    7. VCC(3.3V)    8.DAT   9.CLK    10.  C/D    11. RESET    12. CS   

若直接给屏的VCC 3.3V的话,背光LED有些暗,这里把原来USB线去掉,在丝印为红,黑的连接点,接入5V,背光效果不错
注意将原来的控制芯片要去掉。。。 当然也可以看时序和数据再去除

按ST7567手册,设置一些初始化指令,显示字符正常


开闪光灯效果


调整显示格式和内容


背面图,底端的M3用长一些,正好在桌面上做支撑

本帖子中包含更多资源

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

x

评论

dirtwillfly 2018-7-1 20:41 回复TA
厉害了 
xyz549040622 2018-7-3 14:57 回复TA
厉害了我的哥。 
 楼主 | 2018-6-30 17:08 | 显示全部楼层
给出屏的初始化程序和M453 RTC的初始化设置,记得要打开RTC时钟

void InitLCD_ST7567(void)
{

       
        FT12864_SDAT = FT12864_SCLK = FT12864_CD = FT12864_RST = FT12864_CS =  0;
        //这里片选拉低后,就不再操作它了
       

        delay_lcd(1000);
        //待测此时间
       
    //timer(30);//复位前的延时必须大于3ms   

               

        FT12864_RST = 1;

        //timer(10);//复位完成后写入操作命令前的延时必须大于150ms


        delay_lcd(1000*30);
        //待测此时间,此时间应大于150ms



        //0xE2
        wlc(LCD_RESET);

        //注意这里COM的输出要设置成反向 否则显示不对
        //2018.6.30
        wlc(SEG_DIRECTION_NORMAL);
        wlc(DISPLAY_NORMAL);
        wlc(COMOUTPUT_REVERSE);

        //0xA2
        wlc(LCDBIAS_1_9_SET);
       
       
        //wlc(0x2C);
        //wlc(0x2E);
        //0x2F
        wlc(POWER_CONTROL);
       
        //0x23
        wlc(DUIBIDU_CU_ADJUST_4);

        //0x81 0x30
        wlc(DUIBIDU_XI_ADJUST);
        wlc(DUIBIDU_XI_VALUE);
       

        //0x40 0xB0 0x00 0x10
        wlc(STARTLINE_SET|0x00);
        wlc(PAGEADDR_SET|0x00);
        wlc(COLUMNADDR_LOW4BITS_SET|0x00);
        wlc(COLUMNADDR_HIGH4BITS_SET|0x00);

       
        //0xAF
        wlc(DISPLAY_ON);
       


}


其中各个指令宏的定义如下
//command st7567

#define DISPLAY_ON  0xAF
#define DISPLAY_OFF 0xAE


#define STARTLINE_SET 0x40
//使用时为 STARTLINE_SET | 0x00  -  STARTLINE_SET | 0x3F

#define PAGEADDR_SET 0xB0
//使用时为 PAGEADDR_SET | 0x00 - PAGEADDR_SET | 0x08  (PAGE 0-8)
//page8 is icon page



#define COLUMNADDR_LOW4BITS_SET  0x00
#define COLUMNADDR_HIGH4BITS_SET 0x10
//使用时为 COMMAND | 0x00 - COMMAND | 0x83  (column 0-131)


#define SEG_DIRECTION_NORMAL 0xA0
//normal

#define SEG_DIRECTION_REVERSE 0xA1
//reverse


#define DISPLAY_NORMAL 0xA6

//反显
#define DISPLAY_REVERSE 0xA7



#define DISPLAY_ALLPOINTS_OFF 0xA4
#define DISPLAY_ALLPOINTS_ON 0xA5


//1/65 duty, 1/9 bias
#define LCDBIAS_1_9_SET 0xA2

//1/65 duty, 1/7 bias
#define LCDBIAS_1_7_SET 0xA3


#define LCD_RESET 0xE2



#define COMOUTPUT_NORMAL 0xC0
#define COMOUTPUT_REVERSE 0xC8


#define POWER_CONTROL 0x2F
//booster circuit on
//voltage regulator circuit on
//voltage follower circuit on



#define DUIBIDU_CU_ADJUST_1 0x20
#define DUIBIDU_CU_ADJUST_2 0x21
#define DUIBIDU_CU_ADJUST_3 0x22
#define DUIBIDU_CU_ADJUST_4 0x23
#define DUIBIDU_CU_ADJUST_5 0x24
#define DUIBIDU_CU_ADJUST_6 0x25
#define DUIBIDU_CU_ADJUST_7 0x26
#define DUIBIDU_CU_ADJUST_8 0x27




//double-byte command
#define DUIBIDU_XI_ADJUST 0x81
#define DUIBIDU_XI_VALUE  0x30
//test with 45 first  
//0x2D = 45
//value range: 0x00 - 0x3F(0 - 64)




在SYS_Init()加入

/* Enable RTC module clock*/
        CLK_EnableModuleClock(RTC_MODULE);


CLK_SetModuleClock(RTC_MODULE, CLK_CLKSEL3_RTCSEL_LXT, 0);


void RTC_Init(void)
{
       
        if((RTC->INIT & RTC_INIT_ACTIVE_Msk) == 0)//判断RTC是否是第一次上电
        {
                //如果VBAT上电初始化RTC
                /* Enable RTC NVIC */
                NVIC_EnableIRQ(RTC_IRQn);

                /* Open RTC and start counting */
                sWriteRTC.u32Year       = 2018;
                sWriteRTC.u32Month      = 6;
                sWriteRTC.u32Day        = 22;
                sWriteRTC.u32DayOfWeek  = RTC_FRIDAY;
                sWriteRTC.u32Hour       = 11;
                sWriteRTC.u32Minute     = 10;
                sWriteRTC.u32Second     = 00;
                sWriteRTC.u32TimeScale  = RTC_CLOCK_24;
                RTC_Open(&sWriteRTC);

                /* Enable RTC tick interrupt, one RTC tick is 1 second */
                RTC_EnableInt(RTC_INTEN_TICKIEN_Msk);

                RTC_SetTickPeriod(RTC_TICK_1_SEC);
               
               
        }
        else
        {
                //芯片复位但是VBAT未断电,读取RTC的值
                RTC_GetDateAndTime(&sReadRTC);
        }
       
       
       
}



 楼主 | 2018-6-30 17:11 | 显示全部楼层
本帖最后由 springvirus 于 2018-6-30 17:18 编辑

汉字显示用的数据从读取AT45DB321存储的GBK字库得到,相关参考见之前的帖子

http://bbs.21ic.com/icview-2522292-1-1.html


时钟的主应用就是2个流程的相互切换,上电运行在运行模式,显示时钟,按下设置键后,进入设置模式,效果可以随意发挥,代码就不上了


M453 pin22是Vbat,这里接入3.3V的电池,保证MCU掉电后RTC的走时

| 2018-7-1 20:42 | 显示全部楼层
如果能把主控里的程序弄出来,就更厉害了。
或者通过测量主控的io逻辑来破解
| 2018-7-2 10:33 | 显示全部楼层
楼主动手能力那么强,何不来参加我们的这个大活动?http://bbs.21ic.com/icview-2521902-1-1.html
 楼主 | 2018-7-2 11:27 | 显示全部楼层
21ic小喇叭 发表于 2018-7-2 10:33
楼主动手能力那么强,何不来参加我们的这个大活动?http://bbs.21ic.com/icview-2521902-1-1.html ...

大赛的两个主题都没弄过,时间有些紧,恐怕准备不充分,就不参加了

评论

21ic小喇叭 2018-7-2 13:58 回复TA
8月份才结束呢,还来得及啊~ 
| 2018-7-2 13:58 | 显示全部楼层
springvirus 发表于 2018-7-2 11:27
大赛的两个主题都没弄过,时间有些紧,恐怕准备不充分,就不参加了

期待你的参与啊~
| 2018-7-2 15:55 | 显示全部楼层
这个农行金e顺之前的功能是干啥的呀
 楼主 | 2018-7-2 16:19 | 显示全部楼层
877049204 发表于 2018-7-2 15:55
这个农行金e顺之前的功能是干啥的呀

U盾
| 2018-7-3 08:04 | 显示全部楼层
快来参加Diy大赛
 楼主 | 2018-7-3 15:12 | 显示全部楼层

看那个互联网显示的命题,了解了一下相关知识点,我先准备准备,尽量参加
| 2018-7-5 23:20 | 显示全部楼层
好樣的
| 2018-7-19 15:13 | 显示全部楼层
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /5 下一条

快速回复 返回顶部 返回列表