欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 對自己在使用LCD12864顯示1302時鐘過程的總結 附單片機程序 [打印本頁]

作者: yeyuemyl    時間: 2022-2-21 10:37
標題: 對自己在使用LCD12864顯示1302時鐘過程的總結 附單片機程序
單片機:89c51Rc 晶振:11.0592MHZ

錯誤記錄:
        1.誤把 &0x1f(11111)寫成 &11111 ,0x1f是二進制,11111是十進制
        2.再進行顯示的時候,把小時寄存器中D5(AM/PM)標志記反了,實際是(0-AM,1-PM)
        
實際記錄:
        1.對于1302在顯示屏上顯示,關于1302的數據顯示"?",而其它部分正常顯示,不用說,程序沒問題,1302壞了(我用到第三個1302才正常顯示,不是“?”)
        2.1302所具有的校準功能在顯示AM/PM方面,必須小時位變化(類似22->23)才會發生,所以在初始化的時候必須對小時寄存器中D5(AM/PM)標志位進行設置(在顯示AM/PM的前提下)

方式:
   1.是對于12/24小時制的選擇以及AM/PM的設定,我選擇的是在數組中放置標志位

uchar add_write[]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//寄存器地址
uchar add_read[]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
uchar tim0[]={22,7,2,11,11,59,55,1,1};//年、星期、月、日、時、分、秒、12/24、PM/AM
uchar tim_bcd[7];//保存讀出的時間日期
uchar tim[14];//保存分解開的十位、個位

前兩個是各個寄存器的讀寫地址,第三個是各寄存器的初始值設置,而第三個數組最后兩個元素就是12/24,AM/PM標志位(1-12,0-24)(1-PM,0-AM)
  2.我對12/24小時制的選擇以及AM/PM的設定是在初始化函數中對已經轉化為BCD碼的tim0[4](也就是對小時寄存器初始化寫入)進行操作的

            if(tim0[7]==1)//對12/24標志位進行判斷
                {
                        if(tim0[8]==1)
                                tim0[4]|=0xa0;//12小時PM
                        else
                                tim0[4]|=0x80;//12小時AM
                }
                else
                {
                        if(tim0[8]==1)//對AM/PM標志位進行判斷
                                tim0[4]|=0x20;//PM
                        else
                                tim0[4]|=0x00;//AM
                }
   3.對于AM/PM的顯示,我是在display_1302time顯示函數中寫的
主函數部分:
        initial_12864();
//        initial_1602();
        ds1302_initial();
        while(1)
        {        
                read_1302time();
                display_1302time();
        }

首先是在read_1302time()函數中把從小時寄存器讀出的數據(BCD碼)儲存在tim_bcd[14]中,然后只留下后五位數據用于轉化為十進制(小時時間數據只用到了后五位)
               if(i==4)
                {
                        tim_bcd[14] = tim_bcd[4];
                        tim_bcd[4] = tim_bcd[4]& 0x1f;//11111
                }

之后在display_1302time顯示函數中對顯示AM/PM進行判斷
         if(tim_bcd[14]&0x20==0x20)
                Putstring(" PM");
        else
                Putstring(" AM");        

學1302的時候,我是在B站上從零學電子的個人空間_嗶哩嗶哩_Bilibili這個UP主學的,我覺得講的很細。但是只有最基礎的24小時星期顯示,AM/Pm,12小時制需要自己加,而且硬件也很惡心,剛學的時候根本不知道是硬件還是軟件的問題,就尼瑪顯示"?",鬼知道為啥顯示“?”,折騰半天,三塊1302壞了兩塊,改顯示格式上下午的時間都沒在”?“上面卡的時間長



上圖.c和.h文件下載: 10.ds1302.zip (14.9 KB, 下載次數: 19)








歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1