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

📄 dr.c

📁 用C语言写的程序
💻 C
字号:
//#pragma SMALL
//#pragma disable
#include<absacc.h>
#include<reg51.h>
#include<intrins.h>

//#include"D:\exercise_C51\_inc\keyword.h"					//在自己的电脑上
#include"F:\ldr\exercise_C51\_inc\keyword.h"				//在培训中心的电脑上

///////////////////////////////////////////
//PORT & COMMAND ADDRESS的定义
#define PORT_A8255	XBYTE[0x2000]	//chip enable & PortA
#define PORT_B8255	XBYTE[0x2001]	//在这里,用不到的pin应该设为1还是设为0好点呢?
#define PORT_C8255	XBYTE[0x2002]	//好像常见的都是设为1的.
#define COMMAND8255 XBYTE[0x2003]	//chip enable & A1A0=11

#define SEG7_COM	P1
//工作方式定义,之所以这样做是为了在函数调用时不会去改变之前的其它PORT的工作方式,
//一定程度上提高了代码的安全性.
#define KEY_PAD_SET0	0xfe	//for Port C
#define KEY_PAD_SET1	0x88
#define LED7SEG_SET0	0xf9		//for Port B
#define LED8BIT_SET0	0b8f	//for Port A	

///////////////////////////////////////
#define TIME_500MS	500
#define START_TIME	10000
#define STEP_TIME	700
#define OFF_TIME	20
#define DISPLAY_NUM_TIME 100
#define DISPLAY_TIMES 10
//	for lamp jmping 
#define MODE0_TIME 	80
#define MODE1_TIME1 50
#define MODE1_TIME2 80
#define DEBUG_TIME  00000
///////////////////////////////////////
void delay_self(ulong x);
void delay_display(ulong x);
void seg7_display(uchar *x);
void lamp_jmp_soft(uchar mode);
void pre_display(uint x);
///////////////////////////////////////
code uchar bcd_code_num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0 to 9
//code uchar bcd_code_char[]={0x77,0x7c,0x39,0x5e,0x79,0x71,					//A to F
//							0x73,	//P
//							0x3e,	//U
//							0xff,	//8.
//							0x00};	//"灭"		说明:全部为共阴之数据.
code uchar seg7com[]={0xf1,0xf2,0xf4,0xf8};
//						0		1		2		3		4		5		6		7		8		9
code uint log_data[256]={0,		0,		3010,	4771,	6021,	6990,	7782,	8451,	9031,	9541};
						
data uchar digit[]={0,1,2,3};
sbit cs138=P1^6;

void main(void)
{
	cs138=0;	//***
	COMMAND8255=0x81;	//抄世杰之程式.
	while(1)
	{
		lamp_jmp_soft(0);
		lamp_jmp_soft(1);
	}
}



////////////////////////////Begin of subroutine//////////
//*****************************

void lamp_jmp_soft(uchar mode)
{
//	uchar circle,
	uchar i=0,j;
	uchar light_data;
	
//	cs138=0;	//***
//	COMMAND8255=0x8f;

	switch(mode)
	{
		case 0:	//1-4>>2-5>>3-6>>...
		{
			for(j=0;j<10;j++)
			{
				pre_display(log_data[j]);
				
				light_data=0x77;
				for(i=0;i<4;i++)
				{
	//				COMMAND8255=0x8f;
					PORT_A8255=light_data;
	//				PORT_A8255=_cror_(light_data,i);
	
					light_data=_cror_(light_data,1);
					delay_display(MODE0_TIME);
	
					PORT_A8255=0xff;
				}
			}
	//			delay_display(MODE0_TIME);
				break;
		}

		case 1:	//1>>5>>2>>6>>3>>7...
		{
			for(j=0;j<10;j++)
			{
				pre_display(log_data[j]);
				
				light_data=0x7f;
				for(i=0;;i++)
				{
	//				COMMAND8255=0x8f;
					PORT_A8255=light_data;
					delay_display(MODE1_TIME1);
	
	//				COMMAND8255=0x8f;
					PORT_A8255=_cror_(light_data,2);
					delay_display(MODE1_TIME2);
					light_data=_cror_(light_data,1);
					if(5==i) break;
				}
			}
			delay_display(DEBUG_TIME);

		}
	}
}
//		case 2:	//4-5>>3-6>>...>>1-8>>2-7>>...
//		{
//			light_data=0xe7;
//			for(i=0;i<7;i++)
//			{
//				PORT_A8255=light_data;
//				delay(MODE2_TIME1);
				
void delay_display(ulong x)
{
	for(;x>0;x--)
	seg7_display(digit);
}
//*******************************
void delay_self(ulong x)
{
	for(;x>0;x--);
}
//***************
//说明:本subroutine没有对7SEG LED进行初始化.
void seg7_display(uchar *x)
{
	uchar i;
//	cs138=0;
//	COMMAND8255=LED7SEG_SET0;
	for(i=0;i<4;i++)
	{
		PORT_B8255=bcd_code_num[x[i]];
		
//		delay(DISPLAY_NUM_TIME);	
		SEG7_COM=seg7com[i];
		delay_self(DISPLAY_NUM_TIME);
		SEG7_COM=0x00;
	}
}
/*-----------------------------
digit[]要先被定义过.
------------------------------*/
void pre_display(uint x)	//change x to bcd code and transist to digit[]
{
	digit[0]=x/1000;
	digit[1]=(x%1000)/100;
	digit[2]=(x%100)/10;
	digit[3]=x%10;
}

⌨️ 快捷键说明

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