久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2795|回復: 5
打印 上一主題 下一主題
收起左側

LCD12864_DS32231單片機時鐘程序在設置時間參數時閃爍

[復制鏈接]
跳轉到指定樓層
樓主
ID:21740 發表于 2020-2-27 12:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
用STC15F408AS單片機驅動LCD12864的時鐘,現在還存在設置時間參數時閃爍問題沒有得到解決,希望壇友高手幫忙指導來解決。

單片機源程序如下:
  1. #include<INC\STC15F.H>
  2. #include<intrins.h>
  3. #include <INC\DS3231.h>
  4. #include<DS32231.c>
  5. #include<LCD12864.c>
  6. #include <KEY.c>                                        //按鍵
  7. #define uint unsigned int
  8. #define uchar unsigned char

  9. uchar K1;
  10.    
  11. void key_zx()                                 //按鍵執行程序
  12. {
  13.         uchar n1,n2;       
  14.         uchar A,B,C,D,E,F,G,X;
  15.         switch(B1)
  16.         {
  17.                 case 1:                           //短按鍵執行程序
  18.                 if(K1 == 1)                        //調整 秒
  19.                 {
  20.                         A ++;
  21.                         if(A > 59)
  22.                         A = 0;
  23.                 }
  24.                 if(K1 == 2)                        //調整 分
  25.                 {
  26.                         B ++;
  27.                         if(B > 59)
  28.                         B = 0;
  29.                 }
  30.                 if(K1 == 3)                        //調整 時
  31.                 {
  32.                         C++;
  33.                         if(C > 23)
  34.                         C = 0;
  35.                 }
  36.                 if(K1 == 4)                        //調整 日
  37.                 {
  38.                         D ++;
  39.                         if(D > 31)
  40.                         D = 1;
  41.                 }
  42.                 if(K1 == 5)                        //調整 月               
  43.                 {
  44.                         E ++;
  45.                         if(E > 12)
  46.                         E = 1;       
  47.                 }
  48.                 if(K1 == 6)                        //調整 年               
  49.                 {
  50.                         F ++;
  51.                         if(F > 50)
  52.                         F = 20;       
  53.                 }
  54.                 if(K1 == 7)                        //調整 星期
  55.                 {
  56.                         G ++;
  57.                         if(G > 8)
  58.                         G = 1;
  59.                 }
  60.                 B1 = 0;                 
  61.                 break;                     
  62.                 case 2:                           //按鍵長按程序
  63.                 if(bz2 == 0)                                                                                                //設置時預讀日期、時間數據
  64.                 {                                                       
  65.                         X = read_random(DS3231_SEC);;                  //秒
  66.                   A = BCD2HEX(X);
  67.                         X = read_random(DS3231_MIN);                  //分
  68.                         B = BCD2HEX(X);
  69.                         X = read_random(DS3231_HOUR);            //時 24小時制               
  70.                         C = BCD2HEX(X);
  71.                         X = read_random(DS3231_DATE);     //日
  72.                         D = BCD2HEX(X);
  73.                         X = read_random(DS3231_MONTH);    //月
  74.                         E = BCD2HEX(X);
  75.                         X = read_random(DS3231_YEAR);     //年
  76.                         F = BCD2HEX(X);
  77.                         G = read_random(DS3231_DAY);                        //星期;
  78.                         bz2 = 1;
  79.                 }
  80.                 bz3 = 1;
  81.                 K1 ++;                            //切換調整項目
  82.                 B1 = 0;   
  83.                 break;
  84.         }
  85.                 switch(K1)                                  //短按鍵執行程序
  86.                 {
  87.                 case 1: //調整 秒                                
  88.                         sfm_rst(0x97,0x90,0x8f,0x80); //清除秒位置字符
  89.                         sfm_rst(0x96,0x90,0x8e,0x80);  
  90.                         for(n1 = 0;n1 < 250;n1 ++)
  91.                         {
  92.                                 delay(1);
  93.                         }
  94.                         datafl(A);  //秒閃爍
  95.                         a1 = 0x96;
  96.                         a3 = 0x8e;
  97.                         lcd_disdata(sw);
  98.                         a1 = 0x97;
  99.                         a3 = 0x8f;
  100.                         lcd_disdata(gw);
  101.                         for(n2 = 0;n2 < 250;n2 ++)
  102.                         {
  103.                                 delay(1);
  104.                         }
  105.                         break;
  106.                 case 2://調整 分
  107.                         sfm_rst(0x94,0x90,0x8c,0x80); //清除分位置字符
  108.                         sfm_rst(0x93,0x90,0x8b,0x80);  
  109.                         for(n1 = 0;n1 < 250;n1 ++)
  110.                         {
  111.                                 delay(1);
  112.                         }
  113.                         datafl(B);  //分閃爍
  114.                         a1 = 0x93;
  115.                         a3 = 0x8b;
  116.                         lcd_disdata(sw);
  117.                         a1 = 0x94;
  118.                         a3 = 0x8c;
  119.                         lcd_disdata(gw);
  120.                         for(n2 = 0;n2 < 250;n2 ++)
  121.                         {
  122.                                 delay(1);
  123.                         }
  124.                         break;
  125.                 case 3://調整 時
  126.                         sfm_rst(0x91,0x90,0x89,0x80); //清除時位置字符
  127.                         sfm_rst(0x90,0x90,0x88,0x80);  
  128.                         for(n1 = 0;n1 < 250;n1 ++)
  129.                         {
  130.                                 delay(1);
  131.                         }
  132.                         datafl(C);//時閃爍
  133.                         a1 = 0x90;
  134.                         a3 = 0x88;
  135.                         lcd_disdata(sw);
  136.                         a1 = 0x91;
  137.                         a3 = 0x89;
  138.                         lcd_disdata(gw);
  139.                         for(n2 = 0;n2 < 250;n2 ++)
  140.                         {
  141.                                 delay(1);
  142.                         }
  143.                         break;
  144.                 case 4: //調整 日
  145.                         lcd_addr(0x85);
  146.                         lcd_data(0xa1);
  147.                         lcd_data(0xa0);
  148.                         for(n1 = 0;n1 < 250;n1 ++)
  149.                         {
  150.                                 delay(1);
  151.                         }
  152.                         datafl(D);//日閃爍
  153.                         lcd_addr(0x85);
  154.                         lcd_data(0x30+sw);
  155.                         lcd_data(0x30+gw);
  156.                         for(n2 = 0;n2 < 250;n2 ++)
  157.                         {
  158.                                 delay(1);
  159.                         }
  160.                         break;                     
  161.                 case 5: //調整 月               
  162.                         lcd_addr(0x83);
  163.                         lcd_data(0xa1);
  164.                         lcd_data(0xa0);
  165.                         for(n1 = 0;n1 < 250;n1 ++)
  166.                         {
  167.                                 delay(1);
  168.                         }
  169.                         datafl(E);//月閃爍
  170.                         lcd_addr(0x83);
  171.                         lcd_data(0x30 + sw);
  172.                         lcd_data(0x30 + gw);
  173.                         for(n2 = 0;n2 < 250;n2 ++)
  174.                         {
  175.                                 delay(1);
  176.                         }                
  177.                         break;
  178.                 case 6: //調整 年       
  179.                         lcd_addr(0x81);
  180.                         lcd_data(0xa1);
  181.                         lcd_data(0xa0);
  182.                         for(n1 = 0;n1 < 250;n1 ++)
  183.                         {
  184.                                 delay(1);
  185.                         }
  186.                         datafl(F);//年閃爍
  187.                         lcd_addr(0x81);
  188.                         lcd_data(0x30 + sw);
  189.                         lcd_data(0x30 + gw);
  190.                         for(n2 = 0;n2 < 250;n2 ++)
  191.                         {
  192.                                 delay(1);
  193.                         }                
  194.                         break;
  195.                 case 7: //調整 星期
  196.                         lcd_addr(0x9a);
  197.                         lcd_data(0xa1);
  198.                         lcd_data(0xa0);
  199.                         for(n1 = 0;n1 < 250;n1 ++)
  200.                         {
  201.                                 delay(1);
  202.                         }
  203.                         datafl(G);
  204.                         week_disp(G);
  205.                         for(n2 = 0;n2 < 250;n2 ++)
  206.                         {
  207.                                 delay(1);
  208.                         }               
  209.                         break;
  210.                 case 8:                                
  211.                         K1 = 0;                                 //退出設置狀態
  212.                         bz2 = 0;
  213.                         bz3 = 0;
  214.                         SetTime(F,E,D,C,B,A,G);        //修改年月日時分秒星期
  215.                         break;

  216.         }
  217. }

  218. void main(void)//
  219. {        
  220.         TMOD |= 0x01;
  221.         ET0 = 1;
  222.         TR0 = 1;
  223.         TL0 = 0xAE;                //
  224.         TH0 = 0xFB;                //
  225.   EA  = 1;                                                //開總中斷
  226.         lcd_init();  //
  227.         lcd_clear(); //
  228.         lcd_disp(0x92,0x90,0x8a,0x80,tabm);//
  229.         lcd_disp(0x95,0x90,0x8d,0x80,tabm);//
  230.         nyrhz();//固定年月日周漢字顯示
  231.         while(1)//
  232.         {
  233.                 if(bz3 == 0)
  234.                 {
  235.                         Readtime();
  236.                         ReadDate();
  237.                         ReadDtemp();
  238.                 }
  239.                         key_zx();
  240.         }
  241. }

  242. void tinme0() interrupt 1
  243. {
  244.                 TL0 = 0xAE;                //
  245.                 TH0 = 0xFB;                //
  246.           key_sm1();//按鍵處理

  247. }
復制代碼

所有資料51hei提供下載:
LCD12864_DS32231時鐘程序.rar (88.23 KB, 下載次數: 13)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:584814 發表于 2020-2-27 13:36 | 只看該作者
在設置時間時,被修改的對象反顯,是這個意思 ?
如果是,將新建個反顯漢字的函數,或將現有字庫求反使用。
如果正反顯來閃爍可用中斷來實現,心痛閃存容量的同時感覺在脫放
回復

使用道具 舉報

板凳
ID:21740 發表于 2020-2-27 16:53 | 只看該作者
設置時間參數時閃爍的問題已解決了,增加閃爍延時。
回復

使用道具 舉報

地板
ID:21740 發表于 2020-2-27 16:55 | 只看該作者
設置時間參數時閃爍問題已解決,增加閃爍延時時間,都改為10倍。
回復

使用道具 舉報

5#
ID:280014 發表于 2020-2-27 17:11 | 只看該作者
閃爍代表刷新頻率低于人眼的感受了,直接用定時刷新數據就不會閃了
回復

使用道具 舉報

6#
ID:462827 發表于 2020-2-28 09:31 | 只看該作者
你這個閃爍處理的框架不夠好
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: gav成人免费播放视频 | 亚洲精品乱码久久久久久按摩 | 成人视屏在线观看 | 伊人伊成久久人综合网站 | 剑来高清在线观看 | 久久国产美女视频 | 国产视频福利一区 | 黄色在线免费网站 | 亚洲国产精品久久久久婷婷老年 | 久久久久久久久久一区 | 亚洲一区二区三区久久久 | 91视频一区 | 孰女乱色一区二区三区 | 在线视频h | 成人二区| 精品影视 | 91在线精品秘密一区二区 | 国产成人精品免高潮在线观看 | 日韩欧美国产一区二区三区 | 久久精品视频12 | 国产成人精品久久二区二区91 | 黑人精品xxx一区一二区 | 国产精品视频一二三区 | 中文字幕亚洲一区二区va在线 | 欧美色综合一区二区三区 | 久久久一区二区三区 | 韩国精品在线观看 | 色桃网 | 国产精品日日做人人爱 | 草久在线视频 | 欧美性猛交一区二区三区精品 | 亚洲三级av | 亚洲精品欧美一区二区三区 | 亚洲精品片 | 亚洲欧美中文日韩在线v日本 | 国产精品一区二区av | 一本岛道一二三不卡区 | 欧美视频精品 | a级在线免费观看 | 日韩一区二区成人 | 亚洲精选久久 |