|
用STC15F2K60S2單片機(jī)控制,帶矩陣按鍵,大字顯示倒計(jì)時(shí),可實(shí)際用于比賽(為21日西門子邏輯控制比賽專做), 附所有項(xiàng)目代碼,供參考
單片機(jī)源程序如下:
- //LED屏控制程序 本程序驅(qū)動(dòng)32*64LED彩色屏
- //每一個(gè)單元屏傳送2路數(shù)據(jù)
- #include <stc15f2k60s2.H>
- #include "common.h"
- #include "delay.h"
- #include "arkey.h" //行列按鍵
- #include "ledping.h" //LED屏
- #include "zk.h"
- bit djs_F=0; //倒計(jì)時(shí)標(biāo)志
- bit sec_F=0; //秒標(biāo)志
- bit shun_F=0; //閃爍標(biāo)志
- u8 timecount=0; //時(shí)間計(jì)數(shù)
- u8 data min,sec;
- u8 data djs[4]; //倒計(jì)時(shí)數(shù)組
- void Timer0Init(void) //2ms@22.1184MHz晶振
- {
- AUXR |= 0x80; //?????1T??
- TMOD &= 0xF0; //???????
- TL0 = 0x33; //??????
- TH0 = 0x53; //??????
- TF0 = 0; //??TF0??
- TR0 = 1; //???0????
- }
- void main()
- {
- u8 data key,status;
- u16 m;
- Timer0Init(); //2ms定時(shí)初始始化
- SP=0xf0;
- while(1)
- {
- if (status==0)
- {
- key=KeyScan();
- if (key!=0) //判斷是否有按鍵
- {
- // T_keyF=0;
- switch(key)
- {
- case 0x01: status=5; break;
- case 0x02: status=6; break;
- case 0x03: status=7; break;
- case 0x04: status=8; break; //查詢溫度 DS18B20
- case 0x05: status=9; break;
- case 0x06: status=10; break;
- case 0x07: status=11; break;
- case 0x08: status=12; break;
- case 0x09: status=13; break; //90分鐘倒計(jì)時(shí)
- case 0x0a: status=14; break; //倒計(jì)時(shí)開始
- // case 0x0b: status=15; break;
- // case 0x0c: status=16; break;
- // case 0x0d: status=17; break;
- // case 0x0e: status=18; break;
- // case 0x0f: status=19; break;
- // case 0x10: status=20; break;
- default: status=0;
- }
- key=0; //清空按鍵值
- }
- if (djs_F)
- {
- djsrun(); //顯示總時(shí)間
- min=90; //分鐘 (倒計(jì)時(shí)總時(shí)長(zhǎng))
- sec=0; //秒
- }
- }
- else
- if (status==5)
- {
- dzdisp32(dz11,dz12,0); //顯示8個(gè)漢字
- m++;
- if (m>=500)
- {
- m=0;
- status=6;
- }
- }
- else
- if (status==6)
- {
- dzdisp32(dz21,dz22,0);
- m++;
- if (m>=500)
- {
- m=0;
- status=7;
- }
- }
- else
- if (status==7)
- {
- dzdisp32(dz31,dz32,1);
- m++;
- if (m>=200)
- {
- m=0;
- status=8;
- }
- }
- else
- if (status==8)
- {
- dzdisp32(dz41,dz42,2);
- m++;
- if (m>=200)
- {
- m=0;
- status=9;
- }
- }
- else
- if (status==9)
- {
- dzdisp32(dz51,dz52,1);
- m++;
- if (m>=200)
- {
- m=0;
- status=5;
- }
- }
-
- else
- if (status==13) //90分鐘倒計(jì)時(shí)
- {
- djs_F=1; //倒計(jì)時(shí)功能設(shè)置
- xsinit(); //顯示內(nèi)容初始化
- status=0;
- }
- else
- if (status==14) //90分鐘倒計(jì)時(shí)開始
- {
- ET0=1;
- EA=1;
- status=15;
- }
- else
- if (status==15) //倒計(jì)時(shí)
- {
- if (sec_F) //秒標(biāo)志
- {
- sec_F=0; //清除秒標(biāo)志
- if (sec==0)
- {
- if(min!=0)
- {
- sec=59;
- min--;
- }
- if ((min==0)&&(sec==0)) //分鐘和秒鐘均走完
- {EA=0;ET0=0;}
- }
- else
- sec--;
- djs[0]=min/10;
- djs[1]=min%10;
- djs[2]=sec/10;
- djs[3]=sec%10;
- // xsgx1(); //更新顯示緩沖區(qū) 1個(gè)緩沖區(qū)
- xsgx2(); //更新顯示緩沖區(qū) 2個(gè)緩沖區(qū)
- }
- djsrun(); //倒計(jì)時(shí)運(yùn)行
- }
- }
- }
- void time0() interrupt 1
- {
- timecount++;
- if (timecount==250) //500ms
- {
- timecount=0;
- shun_F=~shun_F; //閃爍標(biāo)志求反
- if (!shun_F)
- {
- sec_F=1; //產(chǎn)生1秒信號(hào)
- }
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
64X128比賽用倒計(jì)時(shí)器.rar
(133.91 KB, 下載次數(shù): 33)
2021-7-18 20:41 上傳
點(diǎn)擊文件名下載附件
|
|