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

📄 显示时间.c

📁 当前时间送电脑同时显示,用RS232运用串口通信送数据给电脑
💻 C
字号:
/********************************************************************************
	当前时间送电脑同时显示
********************************************************************************/
#include <reg51.h>
#include <intrins.h>
#include <stdio.h>
sbit P2_6=P2^6;					//八字高位选通位
sbit P2_7=P2^7;					//八字底位选通位
sbit P3_6=P3^6;					//按扭触动定义
unsigned char Num;				//显示时间定义
unsigned char times;			//按键次数定义


/********************************************************************************
			延长时间程序
********************************************************************************/
void delay_1us (unsigned int time)
{
 unsigned int i;
 for (i=0;i<time;i++)
  {
   _nop_();	//调用延长1us时间程序
  }
}

/********************************************************************************
	数码管显示
********************************************************************************/

unsigned char code dispcode[]=
{
 0xcf,0x03,0x5d,0x5b,0x93,0xda,0xde,0x43,0xdf,0xdb
};



void disp_num (unsigned char Disp_Num)
{
  unsigned char i,j,high,low;
    for(j=0;j<70;j++)
    {
	  low=Disp_Num%10;	//取低位
	  P0=dispcode[low];	//取显示码
	  P2_7=0;			//选通亮
	  delay_1us(100);	//延长时间100us
 	  P2_7=1;			//选通灭

	  high=Disp_Num/10;	//通上,这次换高位亮
	  P0=dispcode[high];
	  P2_6=0;
	  delay_1us (100);
	  P2_6=1;
     }
}


/********************************************************************************
		按键识别
********************************************************************************/
void key_scan (void)
{
	while(1)
	{
		while (P3_6){disp_num (Num);}	//等待按键按下,同时不断显示
		delay_1us (500);				//延时500us,去抖
		if (P3_6==1) {continue;}		//如果没有就跳到while从新扫描按键
		while(1)						 
		{
	 		delay_1us (200);
			if (P3_6==0) {disp_num (Num);continue;} ////如果没有就跳到while从新扫描按键
			return;					//确定按键后跳到主程序执行按键后程序
		}
	}
}

/*******************************************************************************
	电脑串口通信
*******************************************************************************/
void s_communication (unsigned char number)
{
	SCON=0x40;				//串口初始化
	PCON=0x80;				//串口初始化
	TH1=0xf3;				//串口初始化
	TL1=0xf3;				//串口初始化
	TR1=1;					//启动记数
	SBUF=number;			//送数到电脑
	while(!TI);				//查询送完了没有
	TI=0;					//送完了把TI置"0"准备下一次送数
}
/********************************************************************************
	中断服务程序
********************************************************************************/
void inter_rupt (void) interrupt 1   using 1
{
	unsigned char i;
	if (i<20)
    {
	 	TH0=(-50000)/256;				//定时时间为50MS
	 	TL0=(-50000)%256;
	 	i++;							//单位50ms加1,因为50ms*20=1000ms=1秒
	 	return;							//返回主程序
	 }
	 else if (Num<60)					//1分钟为60秒
 	 {
	    TH0=(-50000)/256;				//定时时间为50MS
	    TL0=(-50000)%256;
	 	i=0;							//50ms记数单位重新给植为0
	 	Num=++Num;						//显示数加1
		return;
	 }
	 else {Num=0;}						//显示数记到60重新给0
}
	
/********************************************************************************
	主程序
********************************************************************************/

void main (void)
{
  while (1)
  {
	times=00;
  	Num=00;
	key_scan ();
	TMOD=0x21;				//T0定时模式1
	TH0=(-50000)/256;		//定时时间为50MS
	TL0=(-50000)%256;
	ET0=1;					//允许T0中断
    EA=1;					//允许中断
	TR0=1;					//启动记数
	while(1)
	{
	 key_scan ();			//扫描按键
	 times=++times;			//按键次数加1
	 s_communication(times);//送按键次数到电脑
	 s_communication(Num);	//送当前时间到电脑
	}
  }
}
   

⌨️ 快捷键说明

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