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

📄 serial port.c

📁 功能:开机检验数码管好坏
💻 C
字号:
/**********************
编写时间:2008年8月10日
编辑:小鱼儿
功能:开机检验数码管好坏,用串口通讯发送一个十六进制数,两位数码管显示,并有八个发光二极管
      以二进制的形式点亮,其十六进值与数码管显示一致。
***********************/

#include "reg52.h"   //头文件
#include "intrins.h"

#define uchar unsigned char
#define uint unsigned int 
uchar a,b,flag;
sbit dula=P2^6;//数码管段选
sbit wela=P2^7;//数码管位选
sbit beep=P2^3;//蜂鸣器引脚定义
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};



void delay(uint z)//延时子程序
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=125;y>0;y--);
}

/***********************
函数名:beep200ms
功能:数码管全亮,闪烁三次后,前两个数码管显示0.
************************/
void beep200ms()//开机指示灯和数码管全闪 
{
	for(b=0;b<3;b++)//重复三次
	{
		P1=0x00;	
	    dula=0;
	    P0=0xff;
	    dula=1;
	    dula=0;
	
	    wela=0;
	    P0=0xc0;
	    wela=1;
		wela=0;
		delay(500);
	
		P1=0xff;	
	    dula=0;
	    P0=0x00;
	    dula=1;
	    dula=0;
	
	    wela=0;
	    P0=0xc0;
	    wela=1;
		wela=0;
		delay(500);
	}
    dula=0;
    P0=0x3f;//十位显示0
    dula=1;
    dula=0;

    wela=0;
    P0=0xfe;
    wela=1;
	wela=0;
	delay(10);

    dula=0;
    P0=0x3f;//个位显示0
    dula=1;
    dula=0;

    wela=0;
    P0=0xfd;
    wela=1;
	wela=0;
	delay(10);	
}
void display1(uint temp)//发送0x01,显示1
{
	uint aa,bb;	
	aa=temp/16;
	bb=temp%16;

    dula=0;
    P0=table[aa];//显示十位
    dula=1;
    dula=0;

    wela=0;
    P0=0xfe;
    wela=1;
	wela=0;
	delay(10);

    dula=0;
    P0=table[bb];//显示个位 
    dula=1;
    dula=0;

    wela=0;
    P0=0xfd;
    wela=1;
	wela=0;
	delay(10);
}


void move()//流水灯 
{
	uchar x,temp;
	x=0;
	P1=0xfe;
	for(x=0;x<8;x++)
	{			
		temp=P1;
		P1=_crol_(temp,1);
		delay(50);
	}
	for(x=0;x<8;x++)
	{		
		temp=P1;
		P1=_cror_(temp,1);
		delay(50);
	}	
}


void main()
{
	beep200ms();
	TMOD=0x20;//设置定时/计数器T1的工作方式为方式2
	TH1=0xfd;
	TL1=0xfd;
	TR1=1;//运行控制位 
	SM0=0;
	SM1=1;//SCON 串行口的工作方式为方式1
	REN=1;//允许串行接受
	EA=1; //开总中断
	ES=1;//开串行口中断允许位
	PCON=0x00;
	beep=1;//关蜂鸣器	
	while(1)
	{
		display1(SBUF);
		if(flag==1)
		{
			ES=0;//
			flag=0;
			SBUF=a;
			while(!TI); 
			TI=0;//TI为发送中断标志位,硬件置1,软件置0
			ES=1;			
		}
		switch(SBUF)
		{
			case 01:move();
				break;
			case 02:beep200ms();
				break;			
		}	
	}
}

void serial() interrupt 4
{
	P1=SBUF;
	a=SBUF;
	flag=1;
	RI=0;//接受中断标志位,硬件置1,软件置0
}




⌨️ 快捷键说明

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