欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
LCD12864_DS32231單片機時鐘程序在設置時間參數時閃爍
[打印本頁]
作者:
zying
時間:
2020-2-27 12:17
標題:
LCD12864_DS32231單片機時鐘程序在設置時間參數時閃爍
用STC15F408AS單片機驅動LCD12864的時鐘,現在還存在設置時間參數時閃爍問題沒有得到解決,希望壇友高手幫忙指導來解決。
單片機源程序如下:
#include<INC\STC15F.H>
#include<intrins.h>
#include <INC\DS3231.h>
#include<DS32231.c>
#include<LCD12864.c>
#include <KEY.c> //按鍵
#define uint unsigned int
#define uchar unsigned char
uchar K1;
void key_zx() //按鍵執行程序
{
uchar n1,n2;
uchar A,B,C,D,E,F,G,X;
switch(B1)
{
case 1: //短按鍵執行程序
if(K1 == 1) //調整 秒
{
A ++;
if(A > 59)
A = 0;
}
if(K1 == 2) //調整 分
{
B ++;
if(B > 59)
B = 0;
}
if(K1 == 3) //調整 時
{
C++;
if(C > 23)
C = 0;
}
if(K1 == 4) //調整 日
{
D ++;
if(D > 31)
D = 1;
}
if(K1 == 5) //調整 月
{
E ++;
if(E > 12)
E = 1;
}
if(K1 == 6) //調整 年
{
F ++;
if(F > 50)
F = 20;
}
if(K1 == 7) //調整 星期
{
G ++;
if(G > 8)
G = 1;
}
B1 = 0;
break;
case 2: //按鍵長按程序
if(bz2 == 0) //設置時預讀日期、時間數據
{
X = read_random(DS3231_SEC);; //秒
A = BCD2HEX(X);
X = read_random(DS3231_MIN); //分
B = BCD2HEX(X);
X = read_random(DS3231_HOUR); //時 24小時制
C = BCD2HEX(X);
X = read_random(DS3231_DATE); //日
D = BCD2HEX(X);
X = read_random(DS3231_MONTH); //月
E = BCD2HEX(X);
X = read_random(DS3231_YEAR); //年
F = BCD2HEX(X);
G = read_random(DS3231_DAY); //星期;
bz2 = 1;
}
bz3 = 1;
K1 ++; //切換調整項目
B1 = 0;
break;
}
switch(K1) //短按鍵執行程序
{
case 1: //調整 秒
sfm_rst(0x97,0x90,0x8f,0x80); //清除秒位置字符
sfm_rst(0x96,0x90,0x8e,0x80);
for(n1 = 0;n1 < 250;n1 ++)
{
delay(1);
}
datafl(A); //秒閃爍
a1 = 0x96;
a3 = 0x8e;
lcd_disdata(sw);
a1 = 0x97;
a3 = 0x8f;
lcd_disdata(gw);
for(n2 = 0;n2 < 250;n2 ++)
{
delay(1);
}
break;
case 2://調整 分
sfm_rst(0x94,0x90,0x8c,0x80); //清除分位置字符
sfm_rst(0x93,0x90,0x8b,0x80);
for(n1 = 0;n1 < 250;n1 ++)
{
delay(1);
}
datafl(B); //分閃爍
a1 = 0x93;
a3 = 0x8b;
lcd_disdata(sw);
a1 = 0x94;
a3 = 0x8c;
lcd_disdata(gw);
for(n2 = 0;n2 < 250;n2 ++)
{
delay(1);
}
break;
case 3://調整 時
sfm_rst(0x91,0x90,0x89,0x80); //清除時位置字符
sfm_rst(0x90,0x90,0x88,0x80);
for(n1 = 0;n1 < 250;n1 ++)
{
delay(1);
}
datafl(C);//時閃爍
a1 = 0x90;
a3 = 0x88;
lcd_disdata(sw);
a1 = 0x91;
a3 = 0x89;
lcd_disdata(gw);
for(n2 = 0;n2 < 250;n2 ++)
{
delay(1);
}
break;
case 4: //調整 日
lcd_addr(0x85);
lcd_data(0xa1);
lcd_data(0xa0);
for(n1 = 0;n1 < 250;n1 ++)
{
delay(1);
}
datafl(D);//日閃爍
lcd_addr(0x85);
lcd_data(0x30+sw);
lcd_data(0x30+gw);
for(n2 = 0;n2 < 250;n2 ++)
{
delay(1);
}
break;
case 5: //調整 月
lcd_addr(0x83);
lcd_data(0xa1);
lcd_data(0xa0);
for(n1 = 0;n1 < 250;n1 ++)
{
delay(1);
}
datafl(E);//月閃爍
lcd_addr(0x83);
lcd_data(0x30 + sw);
lcd_data(0x30 + gw);
for(n2 = 0;n2 < 250;n2 ++)
{
delay(1);
}
break;
case 6: //調整 年
lcd_addr(0x81);
lcd_data(0xa1);
lcd_data(0xa0);
for(n1 = 0;n1 < 250;n1 ++)
{
delay(1);
}
datafl(F);//年閃爍
lcd_addr(0x81);
lcd_data(0x30 + sw);
lcd_data(0x30 + gw);
for(n2 = 0;n2 < 250;n2 ++)
{
delay(1);
}
break;
case 7: //調整 星期
lcd_addr(0x9a);
lcd_data(0xa1);
lcd_data(0xa0);
for(n1 = 0;n1 < 250;n1 ++)
{
delay(1);
}
datafl(G);
week_disp(G);
for(n2 = 0;n2 < 250;n2 ++)
{
delay(1);
}
break;
case 8:
K1 = 0; //退出設置狀態
bz2 = 0;
bz3 = 0;
SetTime(F,E,D,C,B,A,G); //修改年月日時分秒星期
break;
}
}
void main(void)//
{
TMOD |= 0x01;
ET0 = 1;
TR0 = 1;
TL0 = 0xAE; //
TH0 = 0xFB; //
EA = 1; //開總中斷
lcd_init(); //
lcd_clear(); //
lcd_disp(0x92,0x90,0x8a,0x80,tabm);//
lcd_disp(0x95,0x90,0x8d,0x80,tabm);//
nyrhz();//固定年月日周漢字顯示
while(1)//
{
if(bz3 == 0)
{
Readtime();
ReadDate();
ReadDtemp();
}
key_zx();
}
}
void tinme0() interrupt 1
{
TL0 = 0xAE; //
TH0 = 0xFB; //
key_sm1();//按鍵處理
}
復制代碼
所有資料51hei提供下載:
LCD12864_DS32231時鐘程序.rar
(88.23 KB, 下載次數: 13)
2020-2-27 12:16 上傳
點擊文件名下載附件
作者:
man1234567
時間:
2020-2-27 13:36
在設置時間時,被修改的對象反顯,是這個意思 ?
如果是,將新建個反顯漢字的函數,或將現有字庫求反使用。
如果正反顯來閃爍可用中斷來實現,心痛閃存容量的同時感覺在脫放
作者:
zying
時間:
2020-2-27 16:53
設置時間參數時閃爍的問題已解決了,增加閃爍延時。
作者:
zying
時間:
2020-2-27 16:55
設置時間參數時閃爍問題已解決,增加閃爍延時時間,都改為10倍。
作者:
billy_2005
時間:
2020-2-27 17:11
閃爍代表刷新頻率低于人眼的感受了,直接用定時刷新數據就不會閃了
作者:
hantu
時間:
2020-2-28 09:31
你這個閃爍處理的框架不夠好
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1