|
主控用的STC15W408AS,時(shí)鐘芯片用帶溫度補(bǔ)償功能的R8025T,以前用了不少精度也還不錯。VFD用SL041MG,驅(qū)動用了比較常見的PT6312。電源直接用MicroUSB數(shù)據(jù)線連接手機(jī)充電器等供電。
遙控手動調(diào)節(jié),一組鬧鐘,亮度自動手動控制,掉電記憶等,由于時(shí)間關(guān)系暫未加入年月日溫度等輪回顯示
用SL041MG 制作VFD顯示屏?xí)r鐘
5.png (128.84 KB, 下載次數(shù): 110)
下載附件
2018-5-17 02:15 上傳
4.png (205.72 KB, 下載次數(shù): 82)
下載附件
2018-5-17 02:15 上傳
3.png (185.26 KB, 下載次數(shù): 98)
下載附件
2018-5-17 02:15 上傳
2.png (175.62 KB, 下載次數(shù): 90)
下載附件
2018-5-17 02:15 上傳
1.png (165.03 KB, 下載次數(shù): 112)
下載附件
2018-5-17 02:15 上傳
電路原理圖如下:
0.png (127.45 KB, 下載次數(shù): 114)
下載附件
2018-5-17 02:15 上傳
0.jpg (24.43 KB, 下載次數(shù): 74)
下載附件
2018-5-17 02:15 上傳
SL041MG VFD R8025單片機(jī)源程序如下:
- //SL041MG VFD 小瓊數(shù)碼 2018-2-6 V1.0 無溫度
- //PT6312+STC15W408AS+R8025T
- #include<STC15.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- #include"IIC.h" //IIC驅(qū)動
- #include"PT6312.H" //VFD驅(qū)動
- #include"NEC6121.h" //遙控解碼
- #include"STC_ADC.h" //內(nèi)部ADC
- #include"STC_EEPROM1T.h" //內(nèi)部EEPROM
- // 0 1 2 3 4 5 6 7 8 9 a b c d e f - 空 H L P U
- uchar code table[] = {0x7d,0x05,0x6e,0x4f,0x17,0x5b,0x7b,0x0d,0x7f,0x5f,0x3f,0x73,0x78,0x67,0x7a,0x3a,0x02,0x00,0x37,0x70,0x3a,0x75}; //0~9顯示代碼
- sbit beep = P5^5; //蜂鳴器
- sbit kaiping = P3^2; //開關(guān)屏
- sbit k1 = P1^5; //按鍵1
- sbit k2 = P1^3; //按鍵2
- bit kk1=0,kk2; //按鍵標(biāo)志
- uchar tiao; //調(diào)整
- uint fan; //自動返回
- uint liangcai; //光控采集間隔
- uchar shan; //秒點(diǎn)閃
- uchar beeshu; //beep計(jì)時(shí)用
- bit nao=0; //鬧鐘標(biāo)志 0 不響 1 響
- char naoshi=0,naofen=0; //鬧鐘時(shí)間
- uchar naoji=0; //鬧鐘計(jì)數(shù)
- uchar guanji=0; //待機(jī)
- uchar naokaiguan=0; //鬧鐘開關(guān)
- uchar zishou=0; //自動手動亮度
- char shoushu=0; //手動亮度數(shù)值 0-7
- char liangdu=5; //亮度實(shí)際數(shù)值
- char hour,minute,second; //時(shí)間
- uchar disp[5]={0,0,0,0,0}; //顯示緩存
- uchar liangshu; //亮度ADC
- #define liang1 50 //可以修改亮度數(shù)據(jù)
- #define liang2 70
- #define liang3 100
- #define liang4 120
- #define liang5 150
- #define liang6 170
- #define liang7 200
- void delay(uint z) //延時(shí)子程序 約1MS
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=1000;y>0;y--);
- }
- void init() //初使化
- {
- delay(100);
- P3M0=0x04; //P3.2強(qiáng)上拉
- P3M1=0x00;
- init_IIC(); //IIC初使化
-
- AUXR |= 0x80;//Timer0 1T Timer1 12T
- EA=1; //開總中斷
- ET0=1; //開定時(shí)器0中斷
- TMOD=0x00; //定時(shí)器0,1模式0 自動重裝
- TL0 = T125US; //Initial timer0 low byte
- TH0 = T125US>>8; //Initial timer0 high byte
- TR0=1; //開定時(shí)器0運(yùn)行
- AUXR &= 0xFB; //定時(shí)器時(shí)鐘12T模式
- T2L = 0x00; //設(shè)置定時(shí)初值
- T2H = 0xB8; //設(shè)置定時(shí)初值
- AUXR |= 0x10; //定時(shí)器2開始計(jì)時(shí)
- IE2|=0x04; //開定時(shí)器2中斷
- PT6312_1(); //設(shè)置顯示方式 8位20段
- PT6312_2(); //數(shù)據(jù)設(shè)定 寫顯存 固定地址 正常模式
- beep=0;
- delay(100);
- beep=0;
- guanji=STC_read(0x0000);
- if(guanji>1)
- {
- guanji=1;
- STC_del(0x0000);
- STC_write(0x0000,guanji);
- }
-
- naokaiguan=STC_read(0x0200);
- if(naokaiguan>1)
- {
- naokaiguan=0;
- STC_del(0x0200);
- STC_write(0x0200,naokaiguan);
- }
-
- naoshi=STC_read(0x0400);
- if(naoshi>23)
- {
- naoshi=8;
- STC_del(0x0400);
- STC_write(0x0400,naoshi);
- }
-
- naofen=STC_read(0x0600);
- if(naofen>59)
- {
- naofen=0;
- STC_del(0x0600);
- STC_write(0x0600,naofen);
- }
-
- zishou=STC_read(0x0800);
- if(zishou>1)
- {
- zishou=0;
- STC_del(0x0800);
- STC_write(0x0800,zishou);
- }
-
- shoushu=STC_read(0x0A00);
- if(shoushu>7)
- {
- shoushu=5;
- STC_del(0x0A00);
- STC_write(0x0A00,shoushu);
- }
- }
- void read_RX8025() //讀時(shí)期和時(shí)間
- {
- uchar dat1,dat2,number;
- number=read_IIC(RX8025,0);
- dat1=number&0x7f;
- dat2=dat1/16; //數(shù)據(jù)進(jìn)制轉(zhuǎn)換
- dat1=dat1%16; //十六進(jìn)制轉(zhuǎn)十進(jìn)制
- dat1=dat1+dat2*10;
- second=dat1;
- number=read_IIC(RX8025,1);
- dat1=number&0x7f;
- dat2=dat1/16; //數(shù)據(jù)進(jìn)制轉(zhuǎn)換
- dat1=dat1%16; //十六進(jìn)制轉(zhuǎn)十進(jìn)制
- dat1=dat1+dat2*10;
- minute=dat1;
- number=read_IIC(RX8025,2);
- dat1=number&0x3f;
- dat2=dat1/16; //數(shù)據(jù)進(jìn)制轉(zhuǎn)換
- dat1=dat1%16; //十六進(jìn)制轉(zhuǎn)十進(jìn)制
- dat1=dat1+dat2*10;
- hour=dat1;
- }
- void huancun() //顯示數(shù)據(jù)送入緩存
- {
- switch(tiao)
- {
- case 0: //平時(shí)顯示
- if((hour/10)==0)
- disp[0]=17;
- else
- disp[0]=hour/10;
- disp[1]=hour%10;
- if(shan<25)
- disp[2]=0x44;
- else
- disp[2]=0x00;
- disp[3]=minute/10;
- disp[4]=minute%10;
-
- break;
- case 1: //調(diào)整小時(shí)
- if(shan<25)
- {
- disp[0]=hour/10;
- disp[1]=hour%10;
- disp[2]=0x44;
- }
- else
- {
- disp[0]=17;
- disp[1]=17;
- disp[2]=0;
- }
- disp[3]=minute/10;
- disp[4]=minute%10;
- break; //調(diào)整分鐘
- case 2:
- disp[0]=hour/10;
- disp[1]=hour%10;
- if(shan<25)
- {
- disp[2]=0x44;
- disp[3]=minute/10;
- disp[4]=minute%10;
- }
- else
- {
- disp[2]=0;
- disp[3]=17;
- disp[4]=17;
- }
- break;
- case 3: //調(diào)整秒
- disp[0]=17;
- disp[1]=17;
- if(shan<25)
- disp[2]=0x44;
- else
- disp[2]=0x00;
- disp[3]=second/10;
- disp[4]=second%10;
- break;
- case 4: //鬧鐘開關(guān)
- disp[0]=10;
- disp[1]=19;
- disp[2]=0x40;
- if(shan<25)
- {
- if(naokaiguan)
- {
- disp[3]=1;
- disp[4]=1;
- }
- else
- {
- disp[3]=0;
- disp[4]=15;
- }
- }
- else
- {
- disp[3]=17;
- disp[4]=17;
- }
- break;
- case 5: //鬧鐘小時(shí)
- if(shan<25)
- {
- disp[0]=naoshi/10;
- disp[1]=naoshi%10;
- }
- else
- {
- disp[0]=17;
- disp[1]=17;
- }
- disp[2]=0x04;
- disp[3]=naofen/10;
- disp[4]=naofen%10;
- break;
- case 6: //鬧鐘分鐘
- disp[0]=naoshi/10;
- disp[1]=naoshi%10;
- disp[2]=0x04;
- if(shan<25)
- {
- disp[3]=naofen/10;
- disp[4]=naofen%10;
- }
- else
- {
- disp[3]=17;
- disp[4]=17;
- }
- break;
- case 7: //自動手動亮度
- disp[0]=19;
- disp[1]=19;
- disp[2]=0x40;
- if(shan<25)
- {
- if(zishou)
- {
- disp[3]=5;
- disp[4]=13;
- }
- else
- {
- disp[3]=10;
- disp[4]=21;
- }
- }
- else
- {
- disp[3]=17;
- disp[4]=17;
- }
- break;
- case 8: //手動亮度數(shù)
- disp[0]=5;
- disp[1]=13;
- disp[2]=0x40;
- if(shan<25)
- {
- disp[3]=0;
- disp[4]=shoushu;
- }
- else
- {
- disp[3]=17;
- disp[4]=17;
- }
- break;
- }
- }
- void display() //送顯示數(shù)據(jù)
- {
- PT6312_3();
- write_PT6312(table[disp[4]]);
- write_PT6312(0x00);
-
- write_PT6312(table[disp[3]]);
- write_PT6312(0x00);
- write_PT6312(disp[2]);
- write_PT6312(0x00);
- write_PT6312(table[disp[1]]);
- write_PT6312(0x00);
- write_PT6312(table[disp[0]]);
- write_PT6312(0x00);
-
- PT6312_4(liangdu);
- }
- void yaokong() //遙控功能
- {
- if(IR_code==daiji)
- {
- if(guanji==0) guanji=1;
- else if(guanji==1)
- {
- guanji=0;
- tiao=0;
- }
- STC_del(0x0000);
- STC_write(0x0000,guanji);
- beep=0;
- }
- if(guanji)
- {
- if(IR_code==xiaoshi)
- {
- tiao++;
- if(tiao>=9)
- {
- tiao=0;
- beep=0;
- delay(100);
- }
- beep=0;
- fan=0;
- }
- if(IR_code==jing)
- {
- nao=0;
- naoji=0;
- beep=0;
- }
- if(tiao!=0)
- {
- if(IR_code==jia)
- {
- switch(tiao)
- {
- case 1:
- hour++;
- if(hour>=24)
- hour=0;
- write_IIC(RX8025,2,(hour/10)<<4|(hour%10));
- break;
- case 2:
- minute++;
- if(minute>=60)
- minute=0;
- write_IIC(RX8025,1,(minute/10)<<4|(minute%10));
- break;
- case 3:
- second++;
- if(second>=60)
- second=0;
- write_IIC(RX8025,0,(second/10)<<4|(second%10));
- break;
- case 4:
- if(naokaiguan==0) naokaiguan=1;
- else if(naokaiguan==1) naokaiguan=0;
- STC_del(0x0200);
- STC_write(0x0200,naokaiguan);
- break;
- case 5:
- naoshi++;
- if(naoshi>23)
- naoshi=0;
- STC_del(0x0400);
- STC_write(0x0400,naoshi);
- break;
- case 6:
- naofen++;
- if(naofen>59)
- naofen=0;
- STC_del(0x0600);
- STC_write(0x0600,naofen);
- break;
- case 7:
- if(zishou==0) zishou=1;
- else if(zishou==1) zishou=0;
- STC_del(0x0800);
- STC_write(0x0800,zishou);
- break;
- case 8:
- shoushu++;
- if(shoushu>=8)
- shoushu=0;
- STC_del(0x0A00);
- STC_write(0x0A00,shoushu);
- break;
- }
- beep=0;
- fan=0;
- }
-
- if(IR_code==jian)
- {
- switch(tiao)
- {
- case 1:
- hour--;
- if(hour<0)
- hour=23;
- write_IIC(RX8025,2,(hour/10)<<4|(hour%10));
- break;
- case 2:
- minute--;
- if(minute<0)
- minute=59;
- write_IIC(RX8025,1,(minute/10)<<4|(minute%10));
- break;
- case 3:
- second--;
- if(second<0)
- second=59;
- write_IIC(RX8025,0,(second/10)<<4|(second%10));
- break;
- case 4:
- if(naokaiguan==0) naokaiguan=1;
- else if(naokaiguan==1) naokaiguan=0;
- STC_del(0x0200);
- STC_write(0x0200,naokaiguan);
- break;
- case 5:
- naoshi--;
- if(naoshi<0)
- naoshi=23;
- STC_del(0x0400);
- STC_write(0x0400,naoshi);
- break;
- case 6:
- naofen--;
- if(naofen<0)
- naofen=59;
- STC_del(0x0600);
- STC_write(0x0600,naofen);
- break;
- case 7:
- if(zishou==0) zishou=1;
- else if(zishou==1) zishou=0;
- STC_del(0x0800);
- STC_write(0x0800,zishou);
- break;
- case 8:
- shoushu--;
- if(shoushu<0)
- shoushu=7;
- STC_del(0x0A00);
- STC_write(0x0A00,shoushu);
- break;
- }
- beep=0;
- fan=0;
- }
- }
- }
- }
-
- void keyscan()
- {
-
- if(!k1)
- kk1=1;
- if(kk1&&k1)
- {
- if(guanji==0)
- {
- tiao=0;
- guanji=1;
- beep=0;
- STC_del(0x0000);
- STC_write(0x0000,guanji);
- }
- else if(nao==1)
- {
- naoji=0;
- nao=0;
- }
- else
- {
- tiao++;
- if(tiao>=9)
- {
- tiao=0;
- beep=0;
- delay(100);
- }
- }
- beep=0;
- kk1=0;
- fan=0;
-
- }
- if(guanji==1)
- {
- if(!k2)
- kk2=1;
- if(kk2&&k2)
- {
- if(nao==1)
- {
- naoji=0;
- nao=0;
- }
- else
- {
- switch(tiao)
- {
- case 1:
- hour++;
- if(hour>=24)
- hour=0;
- write_IIC(RX8025,2,(hour/10)<<4|(hour%10));
- break;
- case 2:
- minute++;
- if(minute>=60)
- minute=0;
- write_IIC(RX8025,1,(minute/10)<<4|(minute%10));
- break;
- case 3:
- second++;
- if(second>=60)
- second=0;
- write_IIC(RX8025,0,(second/10)<<4|(second%10));
- break;
- case 4:
- if(naokaiguan==0) naokaiguan=1;
- else if(naokaiguan==1) naokaiguan=0;
- STC_del(0x0200);
- STC_write(0x0200,naokaiguan);
- break;
- case 5:
- naoshi++;
- if(naoshi>23)
- naoshi=0;
- STC_del(0x0400);
- STC_write(0x0400,naoshi);
- break;
- case 6:
- naofen++;
- if(naofen>59)
- naofen=0;
- STC_del(0x0600);
- STC_write(0x0600,naofen);
- break;
- case 7:
- if(zishou==0) zishou=1;
- else if(zishou==1) zishou=0;
- STC_del(0x0800);
- STC_write(0x0800,zishou);
- break;
- case 8:
- shoushu++;
- if(shoushu>=8)
- shoushu=0;
- STC_del(0x0A00);
- STC_write(0x0A00,shoushu);
- break;
- }
- }
- beep=0;
- kk2=0;
- fan=0;
- }
- }
- }
-
- void main()
- {
- init(); //初使化
- init_ADC(); //ADC初使化
-
- while(1)
- {
- if(tiao!=0) //自動返回
- {
- fan++;
- if(fan>400)
- {
- fan=0;
- tiao=0;
- beep=0;
- delay(100);
- beep=0;
- }
- }
- keyscan(); //按鍵掃描
-
- if(jie) //紅外線遙控?cái)?shù)據(jù)解碼
- {
- yaokong();
- jie =0;
- }
- liangcai++;
- if(liangcai>300)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
0.jpg (23.85 KB, 下載次數(shù): 110)
下載附件
2018-5-17 02:16 上傳
所有資料51hei提供下載:
用51單片機(jī)制作VFD顯示屏?xí)r鐘.rar
(1.16 MB, 下載次數(shù): 148)
2018-5-16 22:17 上傳
點(diǎn)擊文件名下載附件
用51單片機(jī)制作VFD顯示屏?xí)r鐘 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|