⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 09_3_24_temer2_led数码管.c

📁 09_3_24_Temer2_Led数码管.rar
💻 C
字号:
/**********************************************************
* 文件名:
*
***********************************************************/
#include<reg52.H>
//#include<STC89C51RC.H>
#define uint unsigned long int
#define uchar unsigned char 

#define uart_buf_num  11  //定义串口接收数组的长度
uchar interrupt_timer2_a = 0,interrupt_timer2_ab = 0;


uchar  rcv_buf[uart_buf_num],num=0;             //定义用于存放主机发送的数据的数组
uchar  rcv_flag=0,uart_rcv_num=0;     //定义用于表示接收到主机发送数据的变量

sbit key=P3^0;

//0~f
/*uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
*/

//共阴数码管0~f显示
uchar code table[]={
0xC0,0xCF,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90
,~0x77,~0x7c,
~0x39,~0x5e,~0x79,~0x71,~0};

uchar  Disp_LED[8];//={}

void delay(uint z)
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}

//定时器二初始化
void Timer2init(void)
{	/*TR2=0;
	T2MOD=0x02;
	
	T2CON&=~0x02;
	//EA=1;                      /* interupt enable */
//	ET2=1;                     /* enable timer1 interrupt */
	//EXEN2=1;   
//下面两句是设置频率
/*	RCAP2H=0xff;//40kHz, 1S/40K=1000uS/40=25uS    现在是20Hz
	RCAP2L=181; //STC_Timer2第6页讲得很清楚,频率计算方法//183  41111Hz   182 40560Hz  181 40020Hz  180 39486Hz
    
//TH2 = 0;
//TL2 = 0;
T2MOD |= 0x02;
	TR2=1;
	*/

	T2CON=0x04;
    T2MOD=0x00;
    RCAP2H=0x3C;
    RCAP2L=0xB0;

 TL2 = (65536-1000) % 256;
 TH2 = (65536-1000) / 256;
 EA = 1;
 TR2 = 1;
 ET2 = 1;

}


void System_Initialize(void)
{
    EA=1;                                      //开启中断

	
	//TR0=1;//启动定时器0
	//EX0=1;//开外部中断0

	Timer2init();
	WDT_CONTR=0x3f; //看门狗,开启看门狗和喂狗都是这句话

}

main()
{   uchar i,j;
	System_Initialize();
		P0=~0x3f;P2=0x55;P2=0xaa;

		for(i=0;i<8;i++)
		{
		    Disp_LED[i]=i;
		}
	while(1)
	{
	delay(50);
	
delay(50);
	WDT_CONTR=0x3f; //看门狗,开启看门狗和喂狗都是这句话  
	
	}
}


//串口中断服务程序,接收LPC2148发送的命令,并做处理。
void serial(void) interrupt 4 using 1 				//serial interrupt
{
//	unsigned char temp;
//	unsigned char k;
	unsigned char i;
	
	if (RI)    				//RI为1时表明有数据进入中断                         
    {	
	    RI = 0;			       //将标志位RI软件清0
	    rcv_buf[uart_rcv_num] = SBUF;	//将数据赋给存储数组
	    uart_rcv_num++;
	    if(uart_rcv_num == uart_buf_num)
	    {
            uart_rcv_num = 0;            //若接收完数据,则清零该变量
	       
		    if(rcv_buf[0] == 0xee)  //数组首位是0xee表示数码管显示命令
            {
		        for(i=0;i<8;i++)
			    {
			        Disp_LED[i] = rcv_buf[i+1];
			    }
		    }

            else if(rcv_buf[0] == 0xe3) //数组首位是0xe3表示舵机控制命令
 		   {
 		       
 		   }
 	   }
	}
	
}


//中断号是5,在STC89C51芯片资料第20页
void timer2(void) interrupt 5 using 1
{
    TR2 = 0;                                   //关闭定时器1
TF2 = 0;

TL2 = (65536-1000) % 256;
TH2 = (65536-1000) / 256;  // -2000  或 1000时是可以的
 
interrupt_timer2_a++;
	P2 = 0xff; //先关闭所有数码管,再赋值,消隐
//	if(interrupt_timer2_a == 8) interrupt_timer2_a = 0;

//if(LED_EN) //若数码管显示被允许
//第0~7个共阴数码管动态扫描显示,P0为段选,P2位选
	switch(interrupt_timer2_a)
    {
	    case  1:  P0 = table[Disp_LED[0]];
		          P2 = ~0x01;
                  break;
		case  2:  P0 = table[Disp_LED[1]];
		          P2 = ~0x02;
                  break;
		case  3:  P0 = table[Disp_LED[2]];
		          P2 = ~0x04;
                  break;
		case  4:  P0 = table[Disp_LED[3]];  
		          P2 = ~0x08;
                  break;
		
				
		case  5:  P0 = table[Disp_LED[4]];
		          P2 = ~0x10;
                  break;
        case  6:  P0 = table[Disp_LED[5]];
		          P2 = ~0x20;
                  break;
		case  7:  P0 = table[Disp_LED[6]];
		          P2 = ~0x40;
                  break;
		case  8:  P0 = table[Disp_LED[7]];
		          P2 = ~0x80;
                  break;
		default: interrupt_timer2_a = 0;     //若interrupt_timer2_a加到0,则清零变量
                  break;
	}


    if(key == 1)                               //检查开关是否按下
    {    }
    else                                       //开关断开,则关闭小灯
    {    }

  // TH2 = 0x00;			               //将定时器重新赋值
  // TL2 = 0x18;			
   TR2 = 1;		                       //开启定时器1
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -