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

📄 disp.c

📁 C51开发板测试程序 C51开发板测试程序
💻 C
字号:
#include<reg52.h>
#ifndef 	__STC12C5410AD_H__
#define 	__STC12C5410AD_H__

bdata unsigned char flag;
sbit led_fleg	=flag^0;	//3秒切换显示标志

sbit J1			=P2^2;
sbit J2			=P2^3;
sbit KEY_1		=P3^4;
sbit KEY_2		=P3^5;
sbit SPEAKER	=P2^4;
sbit LED_A		=P1^5;
sbit LED_B		=P1^6;
sbit LED_C		=P2^0;
sbit LED_D		=P1^1;
sbit LED_E		=P1^2;
sbit LED_F		=P1^4;
sbit LED_G		=P1^7;
sbit LED_H		=P1^3;
sbit LED_S0		=P2^6;		//流水灯			
sbit LED_S2		=P2^7;		//左2,十位
sbit LED_S1		=P3^7;		//左3,个位
sbit LED_S3		=P2^1;		//左1,百位
sbit LED_S4		=P2^5;		//左4,符号位
sbit INT_0		=P3^2;
sbit INT_1		=P3^3;
void warter();
char warter_led;

char l_bai;
char l_shi;
char l_ge;
char t_shi;
char t_ge;
unsigned int	disptimer;
char gPulseCount;
char scan;
char TimeSub;
unsigned int	TimeAdd;
unsigned char	buff	=0;
unsigned char code table[]=
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x38,0xb9,		//38=L,b9=度
0x39,0x5e,0x79,0x71
};

void Initialization()
{	
//	AUXR	=0x10;						//f=fosc/12
	TMOD	=0x21;						//定时器0设为方式1定时器1设为方式2自动重装
	TH1=TL1	=0xE8;						//11.0592MHz时1200波特率
	TH0		=(65536-1000)/256;
	TL0		=(65536-1000)%256;			//定时器0定时1ms
	TR1		=1;							//启动定时器1	
	TR0		=1;							//启动定时器0
	ET0		=1;							//开定时器0中断
	EA		=1;							//开总中断
//	IE		=0x07;						//外部中断
//	IP		=0x05;
	IT1		=1;							//external interrupt falling edge take effect
	IT0		=1;							//下沿触发
}
/*************显示数送端口**************/
void send_port()
{
	LED_A			=!(buff>>0 & 0x01);		//send data to IO port
	LED_B			=!(buff>>1 & 0x01);
	LED_C			=!(buff>>2 & 0x01);
	LED_D			=!(buff>>3 & 0x01);
	LED_E			=!(buff>>4 & 0x01);
	LED_F			=!(buff>>5 & 0x01);
	LED_G			=!(buff>>6 & 0x01);
	LED_H			=!(buff>>7 & 0x01);}
/*********************流水灯********************************/
void warter()
{	
	switch (warter_led)
	{
		case 0:
			LED_F = 1;				//流水灯高低次序
			LED_C = 0;
			LED_E = 0;
			LED_D = 0;
			LED_B = 1;
			LED_A = 0;
			LED_H = 0;
			LED_G = 0;
			break;
		case 1:
			LED_F = 0;				//流水灯高低次序
			LED_C = 0;
			LED_E = 0;
			LED_D = 1;
			LED_B = 0;
			LED_A = 0;
			LED_H = 0;
			LED_G = 1;
			break;
		case 2:
			LED_F = 0;				//流水灯高低次序
			LED_C = 0;
			LED_E = 1;
			LED_D = 0;
			LED_B = 0;
			LED_A = 0;
			LED_H = 1;
			LED_G = 0;
			break;
		case 3:
			LED_F = 0;				//流水灯高低次序
			LED_C = 1;
			LED_E = 0;
			LED_D = 0;
			LED_B = 0;
			LED_A = 1;
			LED_H = 0;
			LED_G = 0;
	}
}

//*********************三秒显示切换************************************
void Disp()
{	

	char bai	=0;
	char shi	=0;
	char ge		=0;
	char fuha;
	buff = 0;
	if(disptimer>3000)						//disptimer放在定时中断中递减
	{
		disptimer=0;						//3秒显示切换定时值
		led_fleg=led_fleg^1;				//每执行一次,标志改变一次
	}
	else if(led_fleg==1)	
	{
		bai = l_bai;						//流量百位
		shi = l_shi;						//流量十位
		ge  = l_ge;							//流量个位
		fuha= 10;
	}
	else
		{									//百位不显示,段码送全1
		bai = t_bai;
		shi = t_shi;						//温度十位
		ge  = t_ge;							//温度个位
		fuha= 11;
		}
//*********显示位选择**********
	LED_S0			=1;						//disable all bits
	LED_S1			=1;						//关显示
	LED_S2			=1;
	LED_S3			=1;
	LED_S4			=1;
	switch (scan)							//
	{
		case 0:							  	//s4显示设置脉冲计数
			warter();						//led dynamic scan
			LED_S0			=0;	
			break;
		case 1:								
			buff=table[ge];					//
			send_port();					//显示段送端口
			LED_S1			=0;
			break;
		case 2:								
			if(bai||shi>0)
				{
				buff=table[shi];				//
 				send_port();					//显示段送端口
	//			LED_H = 1;						//小数点显示
				LED_S2		=0;
				}
			else
				LED_S2		=1;	
			break;
		case 3:								
			if(bai>0)
				{
				buff=table[bai];			//
				send_port();				//显示段送端口
				LED_S3	=0;
				}
			else 
				LED_S3	=1;
			break;
		case 4:								
			buff=table[fuha];				//改A字码为L(x038),B为C符号
			send_port();					//显示段送端口
			LED_S4			=0;
			break;
	}
	scan++;
	if(scan==5)	scan=0;
}
/*************定时器1中断服务*********/
void Timer0Srv() interrupt 1 			//定时器1ms定时中断
{
	TH0		=(65536-1000)/256;
	TL0		=(65536-1000)%256;			//定时器0初装值定时1ms
	TimeAdd++;							//最大计数值:65535ms
	TimeSub--;							//最大计数值:256ms
	disptimer++;						//显示计时
//	warter();  	
	Disp();								//定时器中断时扫描显示一次
}
void main()
{
	Initialization();
	while(1)
		{
		J1		= 1;
		J2		= 0;
		l_bai	= 1;
		l_shi	= 7;
		l_ge	= 4;
		t_shi	= 0;
		t_ge	= 6;

		if(TimeAdd==500)			//流水灯流动触发,0.5秒滚动一次
			{
			warter_led++;
			TimeAdd=0;
			}
		if(warter_led==4) (warter_led=0);

//		if(TimeAdd==0) (gPulseCount++);
//		if(TimeAdd==9) (TimeAdd=0);
//		warter();
//	   	LED_S0 =1;
		};

}

⌨️ 快捷键说明

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