|
單位淘汰下的雙色LED單元板,大部分都能正常使用,拿來研究了一下,結(jié)合網(wǎng)上的一些程序,制作了一個(gè)電子鐘,初次發(fā)貼,見笑。。。
成品圖

亞克力板
 
粘合
 
打孔,安裝
合體
  
幾點(diǎn)說明:
1、單片機(jī)必須用STC12C5A60S2,不能用89C51,要用推挽輸出才能正常顯示。
2、溫度沒用18B20,用的是10K感溫頭。
3、單元板比較費(fèi)電,5W左右,單獨(dú)供電,所以用了兩5V電源(用一個(gè)電源時(shí)DS1302不能正常工作)。
單片機(jī)源程序如下:
- #include"STC12C5A60S2.h" /*頭文件的包含*/
- #include"zimo.h"
- #include <intrins.h>
- #include <ADC.H>
- #include"led_595.h"
- #include"DS1302.h"
- sbit K1=P3^0;
- sbit K2=P3^1;
- sbit K3=P3^2;
- sbit K4=P3^3;
- unsigned char SetState,SetPlace=0;
- void Int0Configuration();
- unsigned char code temp_table[]={67, 70, 72, 74, 76, 78, 81, 83, 85, 87,
- 89, 90, 91, 93, 95, 97, 100,103,106,110,
- 113,116,119,122,125,128,131,133,136,139,
- 141,143,146,148,150,152,154,157,159,161,
- 163,165,167,169,171,173,175,176,178,180,
- 182,184,186,187,189,191,193,194,196,198,
- 199,200,201,202};
- unsigned int temp_change(unsigned char temp1)
- {
- unsigned int i;
- for(i=0;i<=63;i++)
- {
- if(temp_table[i]>temp1) break;
- }
- if(temp_table[i]==0) return 0;
- else if(temp_table[i]==63) return 640;
- else
- {
- return (unsigned int)((temp1-temp_table[i-1])*10/(temp_table[i]-temp_table[i-1])+(i-1)*10+5);
- }
- }
- void SendTime(void)
- {
- unsigned int TempData;
- GetTime();
- TempData=GetADCResult(2);
- TempData=temp_change(TempData);
- line1_num[2]=TableDs1302[6]/10;
- line1_num[3]=TableDs1302[6]%10;
- line1_num[5]=TempData/100;
- line1_num[6]=TempData%100/10;
- line2_num[0]=TableDs1302[4]/10;
- line2_num[1]=TableDs1302[4]%10;
- line2_num[3]=TableDs1302[3]/10;
- line2_num[4]=TableDs1302[3]%10;
- line2_num[7]=TableDs1302[5]+10;
- line3_num[0]=TableDs1302[2]/10;
- line3_num[1]=TableDs1302[2]%10;
- line3_num[3]=TableDs1302[1]/10;
- line3_num[4]=TableDs1302[1]%10;
- line3_num[6]=TableDs1302[0]/10;
- line3_num[7]=TableDs1302[0]%10;
- }
- void main()
- {
- unsigned int i;
- LED_Init();
- DelayMS(100);
- InitADC();
- DelayMS(1000);
- Int0Configuration();
- if(K2==0)
- {
- DelayMS(1000);
- InitDS1302();
-
-
-
- }
- while(1)
- {
- if(SetState==0)
- {
- SendTime();
- for(i=0;i<10;i++) LED_Display();
- }
- else
- {
- SendTime();
- for(i=0;i<20;i++) LED_Display();
- for(i=0;i<2;i++)
- {
- if(SetPlace==0) {line3_num[6]=11;line3_num[7]=11;}
- if(SetPlace==1) {line3_num[3]=11;line3_num[4]=11;}
- if(SetPlace==2) {line3_num[0]=11;line3_num[1]=11;}
- if(SetPlace==3) {line2_num[3]=10;line2_num[4]=10;}
- if(SetPlace==4) {line2_num[0]=10;line2_num[1]=10;}
- if(SetPlace==5) {line2_num[7]=10;}
- if(SetPlace==6) {line1_num[2]=10;line1_num[3]=10;}
- LED_Display();
- }
-
- if(K1==0) //檢測(cè)按鍵K1是否按下
- {
- LED_Display(); //消除抖動(dòng)
- if(K1==0)
- {
- SetPlace++;
- if(SetPlace>=7)
- SetPlace=0;
- }
- while((i<50)&&(K1==0)) //檢測(cè)按鍵是否松開
- {
- LED_Display();
- i++;
- }
- i=0;
- }
- if(K2==0) //檢測(cè)按鍵K2是否按下
- {
- LED_Display(); //消除抖動(dòng)
- if(K2==0)
- {
- TableDs1302[SetPlace]++;
- if((TableDs1302[SetPlace]>=60)&&(SetPlace<2)) //分秒只能到59
- {
- TableDs1302[SetPlace]=0;
- }
- if((TableDs1302[SetPlace]>=24)&&(SetPlace==2)) //小時(shí)只能到23
- {
- TableDs1302[SetPlace]=0;
- }
- if((TableDs1302[SetPlace]>=32)&&(SetPlace==3)) //日只能到31
- {
- TableDs1302[SetPlace]=1;
- }
- if((TableDs1302[SetPlace]>=13)&&(SetPlace==4)) //月只能到12
- {
- TableDs1302[SetPlace]=1;
- }
- if((TableDs1302[SetPlace]>=8)&&(SetPlace==5)) //周只能到7
- {
- TableDs1302[SetPlace]=1;
- }
- if((TableDs1302[SetPlace]>=31)&&(SetPlace==6)) //年暫時(shí)到2030
- {
- TableDs1302[SetPlace]=0;
- }
- InitDS1302();
- }
-
- while((i<50)&&(K2==0)) //檢測(cè)按鍵是否松開
- {
- LED_Display();
- i++;
- }
- i=0;
-
- }
- }
- }
- }
- void Int0Configuration()
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png (8.93 KB, 下載次數(shù): 79)
下載附件
2018-1-9 16:56 上傳
所有資料51hei提供下載:
LED_595_1302.rar
(43.65 KB, 下載次數(shù): 101)
2018-1-9 16:24 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|