Altium Designer畫的帶數碼管延時模塊原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.jpg (53.67 KB, 下載次數: 40)
下載附件
2018-3-3 04:13 上傳
0.png (66.29 KB, 下載次數: 42)
下載附件
2018-3-3 04:14 上傳
0.png (45.73 KB, 下載次數: 32)
下載附件
2018-3-3 04:14 上傳
制作出來的實物圖如下:
alim0104.jpg (136.45 KB, 下載次數: 39)
下載附件
2018-3-2 11:25 上傳
單片機源程序如下:
- /********************************************************************
- 匯誠科技
- 實現功能:繼電器通、斷時間都可調控制程序(eeprom)
- 使用芯片:STC12C5204AD
- 晶振:11.0592MHZ
- 編譯環境:Keil
- 硬件環境:四位數顯兩路輸入三按鍵
- 作者:yang
- QQ:790244909
- 【聲明】此程序僅用于學習與參考,引用請注明版權和作者信息!
- /********************************************************************
- /********************************************************************
- 功能說明:繼電器循環通斷控制程序
- 繼電器通、斷時間可調,
- key1功能鍵:調節模式與實時顯示模式轉換
- keynum=0:實時顯示計時模式
- keynum=1:調整繼電器設定閉合秒
- keynum=2:調整繼電器設定閉合分
- keynum=3:調整繼電器設定斷開秒
- keynum=4:調整繼電器設定斷開分
- 以上四個設定值設定好后都存入eeprom,掉電可記憶
- 上電時,繼電器吸合,數顯開始計時,到達設定閉合時間后斷開;數顯清零,
- 數顯開始計時,到設定時間,繼電器閉合,數顯清零。。。
- 循環下去。。
- 設定斷開時間最大是10分59秒
- 設定閉合時間最大是10分59秒
- ********************************************************************/
- #include<STC12C5A60S2.H> //庫文件
- #include <intrins.h>
- #include"eprom.h"
- #define uchar unsigned char//宏定義無符號字符型
- #define uint unsigned int //宏定義無符號整型
- #define DUAN P2 //P0口控制段
- #define WEI P1 //P2口控制位
- sbit jdq= P3^7;
- sbit key1=P3^2; //功能按鍵
- sbit key2=P3^3; //增加
- sbit key3=P3^4; //減小
- /********************************************************************
- 初始定義
- *********************************************************************/
- code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //顯示段碼 數碼管字跟
- uchar wei[4]={0X01,0X02,0X04,0X08}; //位的控制端
- uchar numb[4]; //定義字符串
- uchar cnt,keynum;
- uchar setfen,setmiao;
- uchar setdf,setdm;
- uchar miao,fen;
- void IapEraseSector(uint addr);
- void IapProgramByte(uint addr,uchar dat);
- uchar IapReadByte(uint addr);
- bit flag=1; //閉合斷開標志位
- /********************************************************************
- 延時函數
- *********************************************************************/
- void delay(uchar x) //延時程序 0.1秒
- {
- uchar m,n,s;
- for(m=x;m>0;m--)
- for(n=20;n>0;n--)
- for(s=248;s>0;s--);
- }
- /********************************************************************
- 顯示函數
- *********************************************************************/
- void display(uchar a ,uchar b) //顯示函數
- {
- WEI&=0XF0;
- DUAN=seg7code[a/10];
- WEI=wei[0];
- delay(2);
- WEI&=0XF0;
- DUAN=seg7code[a%10]&0x7f;
- WEI=wei[1];
- delay(2);
- WEI&=0XF0;
- DUAN=seg7code[b/10];
- WEI=wei[2];
- delay(2);
- WEI&=0XF0;
- DUAN=seg7code[b%10];
- WEI=wei[3];
- delay(2);
-
- WEI&=0XF0;
- }
- /********************************************************************
- 按鍵掃描
- *********************************************************************/
- void keyscan(void)
- {
- if(key1==0)
- { delay(1);
- if(key1==0)
- {
- while(!key1);
- keynum++;
- TR0=0;
- jdq=0;
- if(keynum>=5)
- {
- keynum=0;
- miao=fen=0;
- TR0=1;
- jdq=1;
- }
- }
- }
- switch(keynum)
- {
- case 1: if(key2==0)
- {
- delay(5);
- if(key2==0)
- {
- while(!key2)display(setfen,setmiao);
- setmiao++;
- if(setmiao>59)
- setmiao=59;
- IapEraseSector(0);
- IapProgramByte(0,setmiao); //寫入函數
- }
- }
- if(key3==0)
- {
- delay(5);
- if(key3==0)
- {
- while(!key3)display(setfen,setmiao);
- setmiao--;
- if(setmiao==0||setmiao>=250)
- setmiao=0;
- IapEraseSector(0);
- IapProgramByte(0,setmiao); //寫入函數
- }
- }
- display(setfen,setmiao);
- break;
- case 2: if(key2==0)
- {
- delay(5);
- if(key2==0)
- {
- while(!key2)display(setfen,setmiao);
- setfen++;
- if(setfen>99)
- setfen=99;
- IapEraseSector(512);
- IapProgramByte(512,setfen); //寫入函數
- }
- }
- if(key3==0)
- {
- delay(5);
- if(key3==0)
- {
- while(!key3)display(setfen,setmiao);
- setfen--;
- if(setfen==0||setfen>=250)
- setfen=0;
- IapEraseSector(512);
- IapProgramByte(512,setfen); //寫入函數
- }
- }
- // display(setfen,setmiao);
- break;
- case 3:
- if(key2==0)
- {
- delay(5);
- if(key2==0)
- {
- while(!key2)display(setdf,setdm);
- setdm++;
- if(setdm>59)
- setdm=59;
- IapEraseSector(0);
- IapProgramByte(0,setmiao); //寫設定閉合時間秒
- IapProgramByte(1,setdm); //寫設定斷開時間秒
- }
- }
- if(key3==0)
- {
- delay(5);
- if(key3==0)
- {
- while(!key3)
- display(setdf,setdm);
- setdm--;
- if(setdm==0||setdm>=250)
- setdm=0;
- IapEraseSector(0);
- IapProgramByte(0,setmiao); //寫設定閉合時間秒
- IapProgramByte(1,setdm); ////寫設定斷開時間秒
- }
- }
- break;
- case 4:if(key2==0)
- {
- delay(5);
- if(key2==0)
- {
- while(!key2)
- display(setdf,setdm);;
- setdf++;
- if(setdf>10)
- setdf=10;
- IapEraseSector(512);
- IapProgramByte(512,setfen); //寫設定閉合時間分
- IapProgramByte(513,setdf); //寫設定斷開時間秒
- }
- }
- if(key3==0)
- {
- delay(5);
- if(key3==0)
- {
- while(!key3)
- display(setdf,setdm);
- setdf--;
- if(setdf==0||setdf>=250)
- setdf=0;
- IapEraseSector(512);
- IapProgramByte(512,setfen); //寫設定閉合時間分
- IapProgramByte(513,setdf); //寫設定斷開時間分
- }
- }
- //
- break;
- default : break;
- }
- }
- /********************************************************************
- 定時器T0初始化
- *********************************************************************/
- void cshh()
- {
- TMOD|=0X01; //定義定時器工作方式
- TH0=0Xa6;
- TL0=0X01;
- ET0=1;
- TR0=1; //開定時器
- EA=1; //開中斷
- }
- /********************************************************************
- 初始化函數
- *********************************************************************/
- void init_all(void)
- {
- P2M1=0;
- P2M0=0xff;
- P1M1=0;
- P1M0=0x0f;
- P3M1&=0x7f;
- P3M0|=0x80;
- P3=0xff;
- }
- /********************************************************************
- 主函數
- *********************************************************************/
- void main()
- {
- init_all();
- setfen=IapReadByte(512); //讀設定閉合秒
- setdf= IapReadByte(513); //讀設定斷開秒
- setmiao=IapReadByte(0); //讀設定閉合分
- setdm=IapReadByte(1); //讀設定斷開秒
- cshh(); //定時器初始化
- while(1)
- {
- if(keynum==0) //實時計時模式
- {
- display(fen,miao);
- }
- if(keynum>0&&keynum<3) //設定閉合分和秒模式
- display(setfen,setmiao);
- if(keynum>=3&&keynum<5) //設定斷開分和秒模式
- display(setdf,setdm);
- keyscan();
- }
- }
- /********************************************************************
- 定時器中斷函數
- *********************************************************************/
- void timer1(void)interrupt 1
- {
- TH0=0Xa6; //定時初值
- TL0=0X01; //定時初值
- cnt++;
- if(cnt>=40)
- {
- cnt=0;
- miao++;
- if(miao>=60)
- {
- miao=0;
- fen++;
- }
- }
- if((fen>=setfen)&&(miao>=setmiao)&&flag)
- {
- flag=0;
- jdq=0;
- miao=0;
- fen=0;
- }
- if((fen>=setdf)&&(miao>=setdm)&&(flag==0))
- {
- jdq=1;
- miao=0;
- fen=0;
- flag=1;
- }
- }
復制代碼 【簡介】一、 尺寸:長88.1cmX寬44.7cmX高2cm 二、 工作電壓:直流12伏; 三、 特點: 1、可編程(通過下載排針可下載程序),比較靈活 2、具有兩路(IN0和IN1)控制/檢測信號輸入端(也可作為兩路AD采樣輸入) 3、有三個按鍵輸入可以用來編程作為調節參數 4、一路DS18B20溫度采集 5、具有繼電器吸合指示燈 6、可控制交流220V/10A一下設備。(最大控制設備2000W) 7、可實現一路信號(低電平有效)輸入控制繼電器延時閉合,延時通斷功能 8、具有繼電器吸合指示燈 四、默認功能: l 溫度設定要有存儲功能,斷電重新啟動時,設定的溫度值有記憶。 l 設定報警溫度值,設定溫度范圍是0到125度 l 溫度設定用三個按鍵完成。分別為:key1功能鍵、key2調節鍵 l 按鍵要有防抖動功能。 l 按功能鍵key1時顯示上次的溫度設定值。同時設定溫度的百位值閃爍,按上調鍵一次溫度升高一度,同理,再次按下功能鍵時,十位進行調節。。 l 開機顯示設定溫度值,過5秒后顯示實測溫度。 l 當超過設定溫度值時繼電器吸合,低于設定溫度時斷開 l 串口發送溫度值(注:需要改動板子,外加晶振) 五、可以根據顧客要求設計各種產品模塊,延時、溫度報警、電腦控制等等 六、DS18B20簡介 DS18B20數字溫度傳感器接線方便,封裝成后可應用于多種場合,如管道式,螺紋式,磁鐵吸附式,不銹鋼封裝式,型號多種多樣,有LTM8877,LTM8874等等。主要根據應用場合的不同而改變其外觀。封裝后的DS18B20可用于電纜溝測溫,高爐水循環測溫,鍋爐測溫,機房測溫,農業大棚測溫,潔凈室測溫,彈藥庫測溫等各種非極限溫度場合。耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設備數字測溫和控制領域。 1: 技術性能描述 ①、 獨特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實現微處理器與DS18B20的雙向通訊。 ② 、測溫范圍 -55℃~+125℃,固有測溫誤差(注意,不是分辨率,這里之前是錯誤的)0.5℃。 ③、支持多點組網功能,多個DS18B20可以并聯在唯一的三線上,最多只能并聯8個,實現多點測溫,如果數量過多,會使供電電源電壓過低,從而造成信號傳輸的不穩定。 ④、工作電源: 3~5V/DC ⑤ 、在使用中不需要任何外圍元件 ⑥、 測量結果以9~12位數字量方式串行傳送 ⑦ 、不銹鋼保護管直徑 Φ6 ⑧ 、適用于DN15~25, DN40~DN250各種介質工業管道和狹小空間設備測溫 ⑨、 標準安裝螺紋 M10X1, M12X1.5, G1/2”任選 ⑩ 、PVC電纜直接出線或德式球型接線盒出線,便于與其它電器設備連接
alim0051.jpg (125.21 KB, 下載次數: 35)
下載附件
2018-3-2 11:25 上傳
alim0050.jpg (148.76 KB, 下載次數: 38)
下載附件
2018-3-2 11:25 上傳
0.png (12.29 KB, 下載次數: 38)
下載附件
2018-3-3 04:16 上傳
全部資料51hei下載地址:
帶數碼管可編程可調節延時模塊DXP資料.rar
(289.32 KB, 下載次數: 65)
2018-3-2 11:26 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
原理圖.doc
(30.5 KB, 下載次數: 47)
2018-3-2 11:26 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
例程.rar
(271.33 KB, 下載次數: 62)
2018-3-2 11:26 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
產品使用手冊.docx
(4.54 MB, 下載次數: 49)
2018-3-2 11:26 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|