一个很弱的问题,四位数码管由单片机直接驱动,计时到99分停止计时并作0.5秒闪烁提示。现在就差闪烁功能如何设置,虽然网上一大堆资料,但别人的思路看不懂,特在这里向各位大神讨教。谢谢!- #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; //复位键
- sbit STAT_PAS=P1^2;//启动/暂停
- 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,段
- /************定时器初始化¯**********/
- 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; */
-
- }
- /**************定时器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;
- }
- }
- }
- }
- /************定时器1******************/
- void t1_sim() interrupt 3
- {
- TL1=(65536-48000)%256; //4ms;
- TH1=(65536-48000)/256;
-
- DisplayScan();
-
- KeyScan();
-
- }
- void DisplayScan(void)//四位数码管扫描
- {
- 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) //归零/复位键
- {
- key_lock1=0;
- key_cnt1=0;
- }
- else
- if(0==key_lock1)
- {
- key_cnt1++;
- if(key_lock1>=250&&TR0==0)//长按1秒触发
- {
- key_lock1=1;
- fen=0;
- sec=0;
- }
- }
- if(0!=STAT_PAS) //启动/暂停键
- {
- key_lock2=0;
- key_cnt2=0;
- }
- else if(0==key_lock2)
- {
- key_cnt2++;
- if(key_cnt2>5) //消抖并触发
- {
- 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;
-
- }
- }
- }
复制代码
|