资讯详情

单片机制作时钟倒计时

用STC11F02E单片机制作的倒计时

  • STC11FO2E介绍
  • proteus电路图
  • 实际电路
  • 定时器工作过程
  • 单片机程序
  • 总结

STC11FO2E介绍

STC11F02E单片机是STC单时钟/机器周期(1)T)高性能单片机。采用增强型内核,STC11F02E保留普通8051的所有功能,并提供6个中断源、2个中断优先级、片内和晶体振荡器、1个看门狗。

增强型8051CPU,1T,单时钟/机器周期比普通8051快6-7倍。 工作电压:4.1V -5.5 V 工作频率:0 - 35MHz,相当于普通8051的0 - 420MHz 2K字节片内Flash程序存储器 片内256字节的SRAM 超强抗干扰,超低功耗 共有216位定时器/计数器,普通8051Timer0/Timer1完全一致 能唤醒掉电模式/停机模式的资源有:INT0/P3.2,INT1/P3.3,T0/P3.4,T1/P3.5,RxD/P3.0 可编程时钟输出功能。T0从P3.4输出时钟,T1从P3.5输出时钟,BRT从P1.0输出时钟。

封装:SOP-20,DIP-20

proteus电路图

由于数码管显示采用扫描显示方法,截图不能全亮三盏灯。(Proteus单片机不需要建立最小系统,所以省略了)

实际电路

用洞板搭建的电路,后面焊接不好就不发照片。由于条件有限,没有四位数字管只能用三位数代替,继电器也没有五位数v所以先不加也没关系。左边的第一个数字管是小时,剩下的两个数字管是分钟,下面有三个按钮,晶体振动是12M,记得输出单片机数码管I/O口加排阻,否则I/O电流不足以驱动数码管。

定时器工作过程

首先,上电后,调整固定时间。每次按下按钮,定期添加10分钟。减键也是如此。设置分钟后,按下设置键,等到数字管闪烁,松开按钮进入小时设置。每次按下按钮,定期增加一小时。设置分钟和小时后,按下设置键,启动定时。此时,控制三极管I/O口为1,定时完成后,数字管显示000,闪动5次,之后会收到三极管。I/O关闭口置零三极管输出继电器断开。

单片机程序

#include"reg52.h" //头文件  #define LED P1 ///数字管阴极 #define LED1 P3 ///数字管阳极 sbit jia = P3^3; sbit jian= P3^4; sbit she = P3^5;    //设置 sbit kai = P3^7;    //控制引脚  unsigned int cont = 0; unsigned int c,dod; unsigned int shi,fen,miao;  void Timer0_uint();                  ///定时器0初始化 void RTC();       ///计时函数 void displayRTC();     ///把个位和十位分开 void display();      //显示函数 void delay_ms(int n);    //延时 void stop);						//设置定时时间
void display_Z();					//到达时间之后关断输出

unsigned char code dm[]={ 
        0xf6,0x12,0xea,0x7a,0x1e,0x7c,0xfc,0x32,0xfe,0x3e};			//段码
unsigned char code wm[]={ 
        0xf6,0xfd,0xfb};     //位码
unsigned char LED_z[3];			//数码管轮流显示数组
void main()
{ 
        
	
	EA = 1;                          //打开总中断
	shi = 0;
	fen = 0;
	miao =0;
	jia =1;
	jian=1;
	she=1;
	stop();
	RTC();
	displayRTC();
	Timer0_uint();                   //调用Timer0初始化函数
	while(1)
	{ 
        
		displayRTC();
		display();
	}
}
void Timer0_uint()
{ 
        
		TMOD = 0x01;                  //定时器工作模式 1
		ET0 = 1;                      //定时器0中断开关
		TH0 = 0x3C;                    //初始值
		TL0 = 0xB0;
		TR0 = 1;                      //开始定时
		TF0 = 0;
}
void timer0interrupt() interrupt 1      
 //当定时器溢出时(TF0=1)就会进行中断服务函数
{ 
        
	TH0 = 0x3C;                           //再次赋初值
	TL0 = 0xB0;
	TF0 = 0;                              //TF0赋值为0
	cont++;
	if(cont>=10)							//一秒一次
	{ 
        
		display_Z();
		RTC();
		displayRTC();
		display();
		cont = 0;
	}
}

代码比较长,这里只给出一部分,想要完整代码可以评论区留言,

代码比较简单,而且已经写好注释就不用过多的解释了,如果有不明白的地方可以问我,但是本人能力有限问了也不一定能回答上来。

总结

如果有写的不对的地方欢迎指正。

标签: 积成电路二三极管单片机存储器sop二三极管

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台