|
【簡(jiǎn)要說(shuō)明】 一、板子尺寸:長(zhǎng)54mmX寬72mmX高18mm
二、主要器件:?jiǎn)纹瑱C(jī)、數(shù)碼管、繼電器
三、工作電壓:有12V和24兩種可供選擇
四、板子功耗:小于300mA
GYJ-0057_寬電壓可編程數(shù)顯延時(shí)模塊電路原理圖如下:
0.png (64.94 KB, 下載次數(shù): 38)
下載附件
2018-2-8 14:05 上傳
pcb:
0.png (138.82 KB, 下載次數(shù): 44)
下載附件
2018-2-8 14:05 上傳
Altium Designer畫(huà)的單路數(shù)顯延時(shí)模塊寬電壓原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.jpg (40.32 KB, 下載次數(shù): 36)
下載附件
2018-2-8 14:07 上傳
DSC_0067.JPG (182.95 KB, 下載次數(shù): 36)
下載附件
2018-2-8 00:32 上傳
DSC_0064.JPG (187.31 KB, 下載次數(shù): 36)
下載附件
2018-2-8 00:32 上傳
模擬量0到5上限下限單片機(jī)源程序如下:
- #include<STC12C2052AD.h> //庫(kù)文件
- #include<intrins.h>
- #define uchar unsigned char //宏定義字符型變量
- #define uint unsigned int //宏定義整型變量
- /****************************模擬量開(kāi)始*********************************************/
- /*聲明 SFR 相關(guān) 與 的 IAP*/
- sfr IAP_DATA = 0xE2;
- sfr IAP_ADDRH = 0xE3;
- sfr IAP_ADDRL = 0xE4;
- sfr IAP_CMD = 0xE5;
- sfr IAP_TRIG = 0xE6;
- sfr IAP_CONTR = 0xE7;
- #define ADC_POWER 0x80 //ADC 電源控制位
- #define ADC_FLAG 0x10 //ADC 轉(zhuǎn)換結(jié)束標(biāo)志位
- #define ADC_START 0x08 //ADC 開(kāi)始轉(zhuǎn)換控制位
- #define ADC_SPEEDLL 0x00 //210 個(gè)時(shí)鐘周期轉(zhuǎn)換一次
- #define ADC_SPEEDL 0x20 //420 個(gè)時(shí)鐘周期轉(zhuǎn)換一次
- #define ADC_SPEEDH 0x40 //630 個(gè)時(shí)鐘周期轉(zhuǎn)換一次
- #define ADC_SPEEDHH 0x60 //840 個(gè)時(shí)鐘周期轉(zhuǎn)換一次
- /******************************模擬量結(jié)束*******************************************/
- /********************************************************************
- 定義 ISP/IAP/EEPROM 命令
- *********************************************************************/
- #define CMD_IDLE 0jm
- #define CMD_READ 1
- #define CMD_PROGRAM 2
- #define CMD_ERASE 3
- #define ENABLE_IAP 0x83//SYSCLK<12MH
- #define IAP_ADDRESS 0x0000 //存儲(chǔ)地址
- void IapIdle();//禁用 ISP/IAP/EEPROM functionmake 單片機(jī) 在 一 安全 狀態(tài)
- uchar IapReadByte(uint addr);//讀數(shù)據(jù)
- void IapProgramByte(uint addr, uchar dat);//寫(xiě)數(shù)據(jù)
- void IapEraseSector(uint addr);//擦除數(shù)據(jù)
- sbit P10=P1^0;//數(shù)碼管段
- sbit P11=P1^1;//數(shù)碼管段
- sbit P12=P1^2;//數(shù)碼管段
- sbit P13=P1^3;//數(shù)碼管段
- sbit P14=P1^4;//數(shù)碼管段
- sbit P15=P1^5;//數(shù)碼管段
- sbit P16=P1^6;//數(shù)碼管段
- sbit P32=P3^2;//數(shù)碼管位
- sbit P33=P3^3;//數(shù)碼管位
- sbit P35=P3^5;//數(shù)碼管位
- sbit AIN1=P1^7;//AD信號(hào)輸入
- sbit key1=P3^0;//按鍵輸入
- sbit key2=P3^1;//按鍵輸入
- sbit OUT=P3^7; //繼電器輸出
- static uchar presstime=0;//用于延時(shí)
- uint tcnt1=0;//用于刷新數(shù)碼管
- uint bainum1,shinum1,genum1;//數(shù)碼管上顯示
- uint bainum11=0,shinum11=0,genum11=0,shinum12=0,genum12=0;//用于傳到數(shù)碼管上顯示
- uint kf0=1,if0=0;//按鍵用的標(biāo)志位
- uint kt0=0;//按鍵用的標(biāo)志位
- uint keynum=0;//數(shù)碼管的位
- uint datas=0;
- bit flag_eeprom1=1;//掉電存儲(chǔ)的標(biāo)志位
- uint inum1=0;//觸發(fā)端子用的計(jì)數(shù)
- uchar inum11=0,inum12=0;//掉電存儲(chǔ)
- uint ad=0,ad1=0;
- code uchar seg7code[13]={0x84,0xf6,0x8a,0xa2,0xf0,0xa1,0x81,0xb6,0x80,0xa0,0x6f,0x3e,0x72}; //顯示段碼 數(shù)碼管字跟
- extern void p31s();//將p3口的235置為1
- uint GetADCResult(uchar px);
- uint meanval1,meanval2;//平均值
- void InitADC();
- void keycan();
- void keyflag();//按鍵結(jié)束調(diào)用
- void displaynum();//將數(shù)字傳到數(shù)碼管上顯示
- void saveeepro();
- void timer0(void)interrupt 1 {//定時(shí)器0
- //500等于1秒
- TL0 = 0xCD; //重新設(shè)置定時(shí)器0時(shí)間為2ms
- TH0 = 0xF8; //重新設(shè)置定時(shí)器0的初始值
- tcnt1++;//用于刷新數(shù)碼管
- presstime++;
- if (if0==0){
- meanval1++;
- if(meanval1==50){
- meanval2=GetADCResult(7)/5;
- meanval1=0;
- }
- }
- switch(tcnt1){//數(shù)碼管部分
- case 1: p31s(); P1=seg7code[bainum1];P32=0;break;
- case 2: p31s(); P1=~seg7code[shinum1];if(keynum==1 || keynum==3 || keynum==0){P33=0;}break;
- case 3: p31s(); P1=~seg7code[genum1]; if(keynum==2 || keynum==4 || keynum==0){P35=0;}break;
- default: tcnt1=0; p31s(); break;
- }
- }//定時(shí)器0結(jié)束
- void displaynum(){//將數(shù)字傳到數(shù)碼管上顯示
- if (if0==0){//當(dāng)if0==0時(shí)num1三個(gè)數(shù)碼管進(jìn)行顯示
- AIN1=1;
- ad=meanval2;
- if((ad<inum11)||(ad>inum12)){OUT=0;}else{OUT=1;}
- genum1=ad%10;//個(gè)位
- shinum1=ad/10%10;//十位
- bainum1=10;//百
- }else{
- if(keynum<3){
- bainum1=11;
- shinum1=shinum11;
- genum1=genum11;
- inum11=shinum11*10+genum11; //將num1三個(gè)數(shù)碼管的值付給inum
- }else{
- bainum1=12;
- shinum1=shinum12;
- genum1=genum12;
- inum12=shinum12*10+genum12; //將num1三個(gè)數(shù)碼管的值付給inum
-
- }
- }
- }
- void timer0_1init(void){//定時(shí)配置
- TMOD=0x11;//將定時(shí)器0,1都設(shè)置為模式1
- TL0 = 0xCD;//設(shè)置定時(shí)器0時(shí)間為2ms
- TH0 = 0xF8;//設(shè)置定時(shí)器0的初始值
- TR0=1;//開(kāi)啟定時(shí)器0
- TR1=1;//開(kāi)啟定時(shí)器1
- EA=1;//開(kāi)總中斷
- ET0=1;//開(kāi)定時(shí)器0的中斷
- }
- void main(){
- P1M0=0X00;//強(qiáng)推挽輸出
- P1M1=0X7F;//強(qiáng)推挽輸出
- AIN1=1;
- InitADC(); //AD轉(zhuǎn)換初始化
- timer0_1init(); //定時(shí)器配置
- inum11= IapReadByte(0x01);//讀取存儲(chǔ)的值
- inum12= IapReadByte(0x02);
- // inum1=inum11*100+inum12;
- shinum11=inum11/10%10;
- genum11=inum11%10;
- shinum12=inum12/10%10;
- genum12=inum12%10;
- while(1){
- keycan();
- }
- }
- void keycan(){//按鍵
- if(keynum==0){//當(dāng)按鍵值等于0的時(shí)候調(diào)用顯示
- displaynum();
- }
- if(key1==0){//當(dāng)按鍵1按下
- if(kf0){//當(dāng)標(biāo)志位kf0=1的時(shí)候進(jìn)行
- if(presstime>50){//當(dāng)時(shí)間值大于一百的時(shí)候
- kf0=0;//標(biāo)志位kf0=0
- kt0=1;//標(biāo)志位kt0=0
- if0=1;
- presstime=0;//時(shí)間清零,重新進(jìn)行
- keynum++;//數(shù)碼管的位
- if(keynum==5){//當(dāng)位到7則置位0
- keynum=0;if0=0;
- }
- }
- }
- }else{//當(dāng)按鍵松開(kāi)
- keyflag();displaynum();
- }//按鍵1結(jié)束
- if(key2==0){if(kf0){if(presstime>50){kf0=0;kt0=1;presstime=0;flag_eeprom1=1;//掉電存儲(chǔ)的標(biāo)志位改為1,進(jìn)行存值操作
- switch(keynum){
- case 0:if(if0==1){if0=0;}else{if0=1;}break;
- case 1:shinum11++;if(shinum11>9){shinum11=0;}break;
- case 2:genum11++;if(genum11>9){genum11=0;}break;
- case 3:shinum12++;if(shinum12>9){shinum12=0;}break;
- case 4:genum12++;if(genum12>9){genum12=0;}break;
- default:break;
- }
- }}}else{keyflag();displaynum();
- if(bainum11==1){shinum11=0;genum11=0;}
- if((flag_eeprom1==1))//加掉電存儲(chǔ),必需加到這,不然有一些小問(wèn)題
- { flag_eeprom1=0;
- saveeepro();//掉電存儲(chǔ)
- }
- }//松開(kāi)按鍵進(jìn)行顯示
- }
- void saveeepro(){//掉電存儲(chǔ)
- inum11=shinum11*10+genum11; //將num1三個(gè)數(shù)碼管的值付給inum
- inum12=shinum12*10+genum12; //將num1三個(gè)數(shù)碼管的值付給inum
- // inum11=inum1/100;//把int型的值拆分到char型
- // inum12=inum1%100;
- IapEraseSector(0); //擦除扇區(qū)
- IapProgramByte(0x01,inum11);//寫(xiě)入數(shù)據(jù)
- IapProgramByte(0x02,inum12);//寫(xiě)入數(shù)據(jù)
- // IapProgramByte(0x03,inum13);//寫(xiě)入數(shù)據(jù)
- // IapProgramByte(0x04,inum14);//寫(xiě)入數(shù)據(jù)
- }
- void p31s(){//將p3口的235置為1
- P32=1;P33=1;P35=1;
- }
- void keyflag(){//按鍵結(jié)束調(diào)用,按鍵的建議使用,這樣可以減小code,但是觸發(fā)的不建議
- if(kt0){//當(dāng)標(biāo)志位kt0=1的時(shí)候進(jìn)行
- if(presstime>50){//當(dāng)時(shí)間值大于一百的時(shí)候
- kf0=1;//標(biāo)志位kf0=1
- kt0=0;//標(biāo)志位kt0=0
- presstime=0;//時(shí)間清零,重新進(jìn)行
- }
- }
- }
- // AD轉(zhuǎn)換初始化程序
- void InitADC(){
- // P1 = P1M0 = P1M1 = 0xff; //設(shè)置P1口為開(kāi)漏模式,使用AD功能
- ADC_DATA = 0; //AD數(shù)據(jù)寄存器清空
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL;//打開(kāi)AD電源,轉(zhuǎn)換周期210
- _nop_(); //延時(shí)
- }
- //AD轉(zhuǎn)換控制程序
- uint GetADCResult(uchar px){ //轉(zhuǎn)換輸出的數(shù)據(jù) (PX為通道口)
- uint t=0;
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL |px| ADC_START;//開(kāi)始轉(zhuǎn)換
- _nop_();
- _nop_();
- _nop_();
- while (!(ADC_CONTR & ADC_FLAG));//等待轉(zhuǎn)換結(jié)束
- ADC_CONTR &= ~ADC_FLAG; //關(guān)閉AD轉(zhuǎn)換
- t=(ADC_DATA<<2)|ADC_LOW2;
- return ADC_DATA; //返回?cái)?shù)據(jù)
- }
- void IapIdle(){//禁用 ISP/IAP/EEPROM functionmake 單片機(jī) 在 一 安全 狀態(tài)
- IAP_CONTR = 0; //
- IAP_CMD = 0; //
- IAP_TRIG = 0; //
- IAP_ADDRH = 0x80; //
- IAP_ADDRL = 0; //
- }
- uchar IapReadByte(uint addr){//讀數(shù)據(jù)
- uchar dat;
- IAP_CONTR = ENABLE_IAP;
- IAP_CMD = CMD_READ;
- IAP_ADDRL = addr;
- IAP_ADDRH = addr >> 8;
- IAP_TRIG = 0x46;
- IAP_TRIG = 0xb9;
- _nop_();
- dat = IAP_DATA;
- IapIdle();
- return dat;
- }
- void IapProgramByte(uint addr, uchar dat){//寫(xiě)數(shù)據(jù)
- IAP_CONTR = ENABLE_IAP;
- IAP_CMD = CMD_PROGRAM;
- IAP_ADDRL = addr;
- IAP_ADDRH = addr >> 8;
- IAP_DATA = dat;
- IAP_TRIG = 0x46;
- IAP_TRIG = 0xb9;
- _nop_();
- IapIdle();
- }
- void IapEraseSector(uint addr){//擦除數(shù)據(jù)
- IAP_CONTR = ENABLE_IAP;
- IAP_CMD = CMD_ERASE;
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
57板周期內(nèi)倒計(jì)時(shí)(喂魚(yú))單片機(jī)源程序如下:
DSC_0063.JPG (159.1 KB, 下載次數(shù): 29)
下載附件
2018-2-8 00:32 上傳
DSC_0062.JPG (206.58 KB, 下載次數(shù): 33)
下載附件
2018-2-8 00:32 上傳
0.png (51.15 KB, 下載次數(shù): 44)
下載附件
2018-2-8 14:12 上傳
全部資料51hei下載地址:
GYJ-0057_寬電壓可編程數(shù)顯延時(shí)模塊發(fā)貨資料.rar
(1.21 MB, 下載次數(shù): 25)
2018-2-8 00:33 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
一代產(chǎn)品資料.rar
(1.7 MB, 下載次數(shù): 23)
2018-2-8 00:33 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|