|
一個(gè)很弱的問(wèn)題,四位數(shù)碼管由單片機(jī)直接驅(qū)動(dòng),計(jì)時(shí)到99分停止計(jì)時(shí)并作0.5秒閃爍提示。現(xiàn)在就差閃爍功能如何設(shè)置,雖然網(wǎng)上一大堆資料,但別人的思路看不懂,特在這里向各位大神討教。謝謝!- #include<SC92F725X_C.H>
- #include"intrins.h"
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
- void LED_Data(uchar da);
- void KeyScan(void);
- void DisplayScan(void);
- void Timer0();
- void t1_sim();
- void time_Init();
- sbit Rese=P1^3; //復(fù)位鍵
- sbit STAT_PAS=P1^2;//啟動(dòng)/暫停
- sbit q_wei=P1^0;
- sbit Bia_wei=P1^1;
- sbit shi_wei=P1^6;
- sbit ge_wei=P1^7;
- sbit Px0= P0^0;
- sbit Px1= P0^1;
- sbit Px2= P0^2;
- sbit Px3= P0^3;
- sbit Px4= P2^0;
- sbit Px5= P2^1;
- sbit Px6= P2^4;
- sbit Px7= P2^5;
- uint stemp_1=0,stemp_2=0,stemp_3=0,stemp_4=0,cont=0,t=0,flash_acc=0,flash_500ms;
- uchar fen=0,sec=0,num=1;
- bit flag=0,flag1=0,shan_flag=0,T_4ms_flag=0;
- uchar code wei[]={0x00,0xc2,0xc1,0x83,0x43,0xc3};//位
- uchar code LED[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//0-9,段
- /************定時(shí)器初始化¯**********/
- void time_Init()
- {
- TMCON=0x07; //
- TMOD|=0x01;
- TL0=(65536-12000)%256; //1ms;
- TH0=(65536-12000)/256;
- TR0=0;
- TF0=0;
- ET0=1;
- TR0=0;
- // EA=1;
- TMOD|=0x01;
- TL1=(65536-48000)%256; //4ms;
- TH1=(65536-48000)/256;
- TR1=0;
- TF1=0;
- ET1=1;
- TR1=1;
- EA=1;
- /* T2MOD = 0x00;
- T2CON = 0x00;
- RCAP2H = (65536-240)/256; //????:???Fsys,?48000*(1/Fsys)=4ms;
- RCAP2L = (65536-240)%256;
- TR2 = 0;
- ET2 = 1;//
- TR2 = 0;//
- EA = 1; */
-
- }
- /**************定時(shí)器0*************/
- void Timer0() interrupt 1
- {
- TL0=(65536-12000)%256; //1ms;
- TH0=(65536-12000)/256;
-
-
- cont++;
- if(cont==1000)
- {
- cont=0;
- sec++;
-
- if(sec>59)
- {
- sec=0;
- fen++;
- if(fen==1)
- {
- fen=1;
- flag=1;
- }
- }
- }
- }
- /************定時(shí)器1******************/
- void t1_sim() interrupt 3
- {
- TL1=(65536-48000)%256; //4ms;
- TH1=(65536-48000)/256;
-
- DisplayScan();
-
- KeyScan();
-
- }
- void DisplayScan(void)//四位數(shù)碼管掃描
- {
- stemp_4=fen/10;
- stemp_3=fen%10;
- stemp_2=sec/10;
- stemp_1=sec%10;
- P0=0x00;
- q_wei=1;
- Bia_wei=1;
- shi_wei=1;
- ge_wei=1;
-
-
- switch(num)
- {
- case 1:
- LED_Data(LED[stemp_1]);
-
- q_wei=0;
- Bia_wei=1;
- shi_wei=1;
- ge_wei=1;
-
- break;
- case 2:
- LED_Data(LED[stemp_2]);
-
- q_wei=1;
- Bia_wei=0;
- shi_wei=1;
- ge_wei=1;
-
- break;
- case 3:
- LED_Data(LED[stemp_3]);
-
-
- P1=wei[3];
- q_wei=1;
- Bia_wei=1;
- shi_wei=0;
- ge_wei=1;
-
- break;
- case 4:
- LED_Data(LED[stemp_4]);
- q_wei=1;
- Bia_wei=1;
- shi_wei=1;
- ge_wei=0;
-
- break;
- }
- num++;
- if(num>4)
- {
- num=1;
- }
- }
- /***************按鍵掃描**************/
- void KeyScan(void)
- {
- static uchar key_lock1;
- static uchar key_cnt1;
- static uchar key_lock2;
- static uchar key_cnt2;
-
- if(0!=Rese) //歸零/復(fù)位鍵
- {
- key_lock1=0;
- key_cnt1=0;
- }
- else
- if(0==key_lock1)
- {
- key_cnt1++;
- if(key_lock1>=250&&TR0==0)//長(zhǎng)按1秒觸發(fā)
- {
- key_lock1=1;
- fen=0;
- sec=0;
- }
- }
- if(0!=STAT_PAS) //啟動(dòng)/暫停鍵
- {
- key_lock2=0;
- key_cnt2=0;
- }
- else if(0==key_lock2)
- {
- key_cnt2++;
- if(key_cnt2>5) //消抖并觸發(fā)
- {
- key_lock2=1;
- TR0=~TR0;
- }
- }
- }
- /****************Ö÷³ÌÐò*****************/
- void main( )
- {
- IO_Init();
- time_Init();
-
- while(1)
- {
-
- if((fen==1)&&(sec==0)&&(TR0==1)&&(flag==1))//¼ÆÊ±µ½Í£Ö¹
- {
- TR0=0;
- flag=0;
- TR2=1;
-
- }
- }
- }
復(fù)制代碼
|
|