|
正計(jì)時(shí)狀態(tài)
IMG_3192.JPG (1.7 MB, 下載次數(shù): 58)
下載附件
正計(jì)時(shí)顯示狀態(tài)
2018-7-28 18:39 上傳
倒計(jì)時(shí)狀態(tài)
IMG_3194.JPG (1.7 MB, 下載次數(shù): 57)
下載附件
倒計(jì)時(shí)顯示狀態(tài)
2018-7-28 18:41 上傳
鋰電池及帶保護(hù)的充電模塊
IMG_3190.JPG (1.67 MB, 下載次數(shù): 66)
下載附件
鋰電池及帶保護(hù)的充電模塊
2018-7-28 18:42 上傳
安裝中
IMG_3188.JPG (2.16 MB, 下載次數(shù): 68)
下載附件
安裝中1
2018-7-28 18:41 上傳
IMG_3189.JPG (1.95 MB, 下載次數(shù): 60)
下載附件
安裝中2
2018-7-28 18:42 上傳
電路圖
QQ截圖20180728184920.png (27.74 KB, 下載次數(shù): 68)
下載附件
電路圖
2018-7-28 18:51 上傳
單片機(jī)源程序如下:
- /* PIC16F630為核心的廚房定時(shí)器 注:所有的(12個(gè))I/O口都用完
- * 功能:倒(正)計(jì)時(shí)1秒-99分59秒
- * 顯示:數(shù)碼管顯示分鐘和秒鐘;雙色LED秒閃顯示秒狀態(tài);兩種LED分別顯示功能狀態(tài):倒計(jì)
- 時(shí)橙色燈和正計(jì)時(shí)綠色燈顯示。
- * 提示音:1、計(jì)時(shí)結(jié)束:嘟嘟嘟連續(xù)響五次;2、正計(jì)時(shí)逢5分鐘提示一個(gè)長(zhǎng)音:嘟;3正計(jì)時(shí)
- 逢10分鐘提示兩個(gè)半長(zhǎng)音:嘟-嘟
- * 人機(jī)交互:五個(gè)按鍵分別是啟動(dòng)/停止;正/倒計(jì)時(shí);加十分;加1分;加1秒/暫停/繼續(xù)
- * 電源開(kāi)啟:默認(rèn)倒計(jì)時(shí)狀態(tài)-加分加秒-啟動(dòng)
- * 計(jì)時(shí)精度依賴于PIC16F630內(nèi)部振蕩器(4M)的精度和程序設(shè)計(jì)定時(shí)器初值的設(shè)定
- */
- /* 本程序已經(jīng)成功制作出成品,外殼使用的是銀行點(diǎn)鈔機(jī)外顯示外殼
- #include<pic.h>
- __CONFIG(0x3184); //配置:禁止數(shù)據(jù)和程序的代碼保護(hù);禁止低電壓檢測(cè);RA3作為普通I/O口
- ;上電復(fù)位開(kāi);看門(mén)狗關(guān)閉;使用內(nèi)部振蕩器。
- //輸入鍵:RA3,RC1,RC3,RC4,RC5。其余鍵均為輸出
- #define BZZP RC2 //蜂鳴器接口
- #define CLK RA5 // 74HC164時(shí)鐘輸入
- #define DAT RA4 // 74HC164數(shù)據(jù)端口
- #define WEI3 RA0 // 秒十位
- #define WEI4 RA1 // 秒個(gè)位
- #define WEI1 RA2 // 分十位
- #define WEI2 RC0 // 分個(gè)位
- #define QID RC1 //啟動(dòng)/停止鍵
- #define ZDAO RC3 //正/倒計(jì)時(shí)
- #define JSHF RC4 //加十分
- #define JGOF RC5 //加個(gè)分
- #define JMIAO RA3 //加秒
- #define uchar unsigned char
- #define uint unsigned int
- uchar timecnt = 0,fs=0,fg=0,ms=0,mg=0;
- bit zhengdao,qidong,zhantin;
- //mss:秒閃爍;zdjs:正倒計(jì)時(shí)0倒1正;qdtz:啟動(dòng)停止0停1動(dòng);ztjx暫停/繼續(xù) 0暫停 1繼續(xù)
- const unsigned char LED[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
- //0-9十個(gè)數(shù)值的編碼(共陰數(shù)碼管)
- void delay(uint);//延時(shí)函數(shù)
- void dududu(void);//嘟嘟嘟
- void changdu(void);//長(zhǎng)嘟
- void dudu(void);//嘟嘟
- void smduan(uchar);//寫(xiě)串行數(shù)據(jù)入164
- void keytest(void); //鍵掃描函數(shù)
- void Init(void); //初始化子函數(shù)
- void zhengjishi(void); //正計(jì)時(shí)函數(shù)
- void daojishi(void); //倒計(jì)時(shí)函數(shù)
- void interrupt ISR(void) //PIC單片機(jī)的所有中斷都是這一個(gè)入口
- {
- if(TMR1IF==1) //需要進(jìn)一步判斷是否是T1中斷
- {
- TMR1H=0x0B; //重置初值
- TMR1L=0xEA; //重置初值 E9
- TMR1IF=0; //清中斷標(biāo)志位,以備下次中斷
- //***此處用戶自行添加定時(shí)器T1中斷處理程序***
- timecnt++;
- if(timecnt==2)
- {timecnt=0;
- if(qidong==1)
- { if(zhengdao==1) zhengjishi();
- else daojishi();
- }
- }
- }
- }
- main()
- {
- uchar x;
- Init();
- while(1)
- {
- keytest();
- if(fs>0)
- {smduan(LED[fs]);
- WEI1=0;
- delay(3);
- WEI1=1;
- }
- if(timecnt==1) x=LED[fg]+0x80;
- else x=LED[fg];
- smduan(x);
- WEI2=0;
- delay(3);
- WEI2=1;
- if(zhengdao==0) x=LED[ms]+0x80;
- else x=LED[ms];
- smduan(x);
- WEI3=0;
- delay(3);
- WEI3=1;
- if(zhengdao==1) x=LED[mg]+0x80;//正計(jì)時(shí)燈亮
- else x=LED[mg];
- smduan(x);
- WEI4=0;
- delay(3);
- WEI4=1;
- }
- }
- void zhengjishi(void) //正計(jì)時(shí)函數(shù)
- {
- mg++;
- if(mg==10)
- { mg=0;
- ms++;
- if(ms==6)
- {
- ms=0;
- fg++;
- if(fg==5) changdu();
- if(fg==10)
- {
- fg=0;
- fs++;
- dudu();
- if(fs==10)
- fs=0;
- }
- }
- }
- }
- void delay(uint x) //延時(shí)函數(shù)
- {
- uint a,b;
- for(a=x;a>0;a--)
- for(b=100;b>0;b--);
- }
- void dududu(void) //連續(xù)三聲嘟
- {
- uchar i,j;
- for(j=5;j>0;j--)
- {for(i=3;i>0;i--)
- {
- BZZP=1;
- delay(200);
- BZZP=0;
- delay(30);
- }
- delay(300);
- }
- }
- void changdu(void) //長(zhǎng)嘟
- {
- BZZP=1;
- delay(300);
- BZZP=0;
- }
- void dudu(void) //兩聲嘟
- {
- uchar i;
- for(i=2;i>0;i--)
- {
- BZZP=1;
- delay(200);
- BZZP=0;
- delay(20);
- }
- }
- //按鍵處理程序
- void keytest(void)
- {
- if(QID==0)
- {
- while(QID==0) //按鍵去抖
- { delay(100);}
- qidong=!qidong;
- if(qidong==0)
- {
- TMR1ON=0; //關(guān)閉定時(shí)器1
- fs=fg=ms=mg=0;
- zhengdao=0; //停止時(shí)默認(rèn)倒計(jì)時(shí)
- }
- else TMR1ON=1; //啟動(dòng)定時(shí)器1
- }
- ///////////////// 正倒計(jì)時(shí)轉(zhuǎn)換
- if(ZDAO==0)
- {
- while(ZDAO==0) //按鍵去抖
- { delay(100);}
- if(qidong==0) //停止?fàn)顟B(tài)有效
- zhengdao=!zhengdao;
- }
- //////////////// 加分十位
- if(JSHF==0)
- {
- while(JSHF==0) //按鍵去抖
- { delay(100);}
- if(zhengdao+qidong==0) // 倒計(jì)時(shí)和停止?fàn)顟B(tài)下才能運(yùn)行
- {
- fs++;
- if(fs==10) fs=0;
- }
- }
- /////////////////
- if(JGOF==0)
- {
- while(JGOF==0) //按鍵去抖
- { delay(100);}
- if(zhengdao+qidong==0) // 倒計(jì)時(shí)和停止?fàn)顟B(tài)下才能運(yùn)行
- {
- fg++;
- if(fg==10) fg=0;
- }
- }
- ////////////////
- if(JMIAO==0)
- {
- while(JMIAO==0) //按鍵去抖
- { delay(100);}
- if(zhengdao+qidong==0) // 倒計(jì)時(shí)和停止?fàn)顟B(tài)下才能運(yùn)行
- {
- mg++;
- if(mg==10)
- {
- mg=0;
- ms++;
- if(ms==6) ms=0;
- }
- }
- if(qidong==1) //暫停與繼續(xù)
- {
- zhantin=!zhantin;
- if(zhantin==0)
- TMR1ON=0; //暫停:關(guān)閉定時(shí)器1
- else
- TMR1ON=1; //繼續(xù):開(kāi)啟定時(shí)器1
- }
- }
- }
- void Init(void) //主函數(shù)初始化
- {
- OPTION=0b10000000; //禁止弱上拉
- WPUA= 0x00; //關(guān)閉弱上拉
- TRISA=0B00001000; //RA3 口做輸入,且只能作為輸入
- TRISC=0B00111010; //RC5,4,3,2做輸入,RC0,2做輸出
- PORTA=0B00001000;
- PORTC=0B00111010;
- //INTCON=0; //關(guān)中斷
- CMCON=0x07; // 設(shè)置全部為普通數(shù)字IO口 關(guān)閉所有比較器
- PIE1 = 0X01; //T1溢出中斷使能位
- PIR1 = 0X00; //T1溢出標(biāo)志位,每次溢出都要軟件清0
- T1CON = 0X05; //設(shè)置T1中斷參數(shù)
- //***定時(shí)器TMR1初始化***
- TMR1CS=0; //TMR1時(shí)鐘源選擇內(nèi)部指令周期時(shí)鐘(Fosc/4)
- T1CKPS0=1; //1:8預(yù)分頻比,T1CKPS0=1
- T1CKPS1=1; //1:8預(yù)分頻比,T1CKPS1=1
- TMR1H=0x0B; //定時(shí)62500×8微秒,置初值為65536-62500+13
- TMR1L=0xEA; //定時(shí)62500×8微秒,置初值為65536-62500+13
- TMR1ON=0; //啟動(dòng)定時(shí)器T1(暫停)
- TMR1IF=0; //清除T1的中斷標(biāo)志
- TMR1IE=1; //T1中斷允許
- PEIE=1; //外設(shè)中斷允許,TMR1屬于外設(shè)中斷范圍
- //**********************
- //***開(kāi)全局中斷設(shè)置****
- //定時(shí)器T1設(shè)置了中斷允許,此處要開(kāi)全局中斷
- GIE=1;
- WEI1=1;
- WEI2=1;
- WEI3=1;
- WEI4=1;
- zhantin=1;
- }
- void smduan(uchar udata) //向164傳輸段碼
- {
- uchar i;
- for (i=0;i<8;i++)
- {
- if(udata&0x80)
- DAT=1;
- else
- DAT=0;
- CLK=0;
- asm("NOP");
- asm("NOP");
- CLK=1;
- udata = udata<<1;
- CLK=0;
- }
- }
- void daojishi(void) //倒計(jì)時(shí)函數(shù)
- {
- if(fs+fg+ms+mg>0)
- {
- if(mg>0) mg--;
- else
- {
- if(ms>0)
- {
- ms--;
- mg=9;
- }
- else
- {
- if(fg>0)
- {
- fg--;
- ms=5;
- mg=9;
- }
- else
- {
- if(fs>0)
- {
- fs--;
- fg=9;
- ms=5;
- mg=9;
- }
- }
- }
- }
- }
- else
- {dududu(); //倒計(jì)時(shí)}時(shí)間到,蜂鳴器工作
- zhengdao=1; //正計(jì)時(shí)開(kāi)始
- }
- }
復(fù)制代碼 |
評(píng)分
-
查看全部評(píng)分
|