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

📄 shizhongketiaoziqi1-3.c

📁 设计中主要是数态显示
💻 C
字号:
#include<reg51.h>//头文件
#define uint unsigned int
#define uchar unsigned char//宏定义,注意格式,不带分号*
unsigned char code table0[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//段码表共阳极
unsigned char code table2[]={0xFB,0xF7,0xEF,0xDF,0xBF,0x67F};//位码表
sbit k1=P3^3;
sbit k2=P3^4;
sbit k3=P3^5;//键盘定义部分
void chushihua();
void display5(uchar aa,uchar bb,uchar cc,uchar dd,uchar shi,uchar ge);
void delay(uchar z);//子程序声名部分
uchar aa,bb,cc,dd,shi,ge,ss,num,shu,temp;//定义全局变量
uint a;
void main()//主函数
{
  chushihua();
  while(1)
   {
	 display5(aa,bb,cc,dd,shi,ge);
    }
}
void delay(uchar z)//带参数的延时子程序
{
  uchar x,y;
  for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}
void chushihua()//初始化子程序
{
   num=23;
   shu=58;
   temp=0;//赋初值
   aa=num/10;
   bb=num%10;
   cc=shu/10;
   dd=shu%10;
   shi=temp/10;
   ge=temp%10;//位隔离部分
   P2=0xff;//先关所有数码管,为了防止有暗影和乱码出现
   delay(10);
  TMOD=0X01;//选择T0工作在模式1
  TH0=(65536-46080)/256;
  TL0=(65536-46080)%256;//赋初值50毫秒晶振11.0592MHZ
  EA=1;//开总中断
  ET0=1;//开定时器0中断
  TR0=1;//启动定时器0 
}
void display5(uchar aa,uchar bb,uchar cc,uchar dd,uchar shi,uchar ge)//显示之程序
{
	  if(ss==20)
	   {
	       ss=0;
		   temp++;
		}
	   if(k1==0)//键盘部分
		    {
			  TR0=0;//进来先关定时器
			  delay(10);//消抖语句
			  if(k1==0);
			  while(!k1);
			  delay(10);//消抖语句
			  while(!k1);//松手检测
			  temp++;
			  if(temp==60)temp=0;
			  TR0=1;//出去之前先开定时器
			}
		if(temp==60)
		  {
		   temp=0;
		   shu++;
		  }

	  	   if(k2==0)//键盘部分
		    {
			  TR0=0;//进来先关定时器
			  delay(10);//消抖语句
			  if(k2==0);
			  while(!k2);
			  delay(10);//消抖语句
			  while(!k2);//松手检测
			  shu++;
			  if(shu==60)shu=0;
			  TR0=1;//出去之前先开定时器
			}

	   shi=temp/10;
	   ge=temp%10;	   		  
	   P2=0xff;
	   delay(5);
	   P0=table0[shi];
	   delay(5);
	   P2=0xf7;
	   delay(5);

	   P2=0xff;
	   delay(5);
	   P0=table0[ge];
	   delay(5);
	   P2=0xfb;
	   delay(5);
	   if(shu==60)
	     {
	      shu=0;
		  num++;
	     }
	   	if(k3==0)//键盘部分
		    {
			  TR0=0;//进来先关定时器
			  delay(10);//消抖语句
			  if(k3==0);
			  while(!k3);
			  delay(10);//消抖语句
			  while(!k3);//松手检测
			  num++;
			  if(num==24)num=0;
			  TR0=1;//出去之前先开定时器
			}
       cc=shu/10;//分时隔离部分
	   dd=shu%10;	   		  
	   P2=0xff;
	   delay(5);
	   P0=table0[cc];//段选部分
	   delay(5);
	   P2=0xdf;//位选部分
	   delay(5);

	   P2=0xff;
	   delay(5);
	   P0=table0[dd];
	   delay(5);
	   P2=0xef;
	   delay(5);
	   if(num==24)num=0;
	   aa=num/10;
	   bb=num%10;	   		  
	   P2=0xff;
	   delay(5);
	   P0=table0[aa];
	   delay(5);
	   P2=0x7f;
	   delay(5);

	   P2=0xff;
	   delay(5);
	   P0=table0[bb];
	   delay(5);
	   P2=0xbf;
	   delay(5);  
}
void timer0()interrupt 1//中断部分,不用声明,中段T0
{
  TH0=(65536-46080)/256;
  TL0=(65536-46080)%256;//重赋初值 
  ss++;
}

⌨️ 快捷键说明

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