0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >工业控制 > 基于STC12C2052AD单片机控制的数码管时钟程序电路设计方案

基于STC12C2052AD单片机控制的数码管时钟程序电路设计方案

来源: elecfans
2021-10-20
类别:工业控制
eye 34
文章创建人 拍明

原标题:基于STC12C2052AD单片机控制的数码管时钟程序电路设计方案

  STC12C2052AD单片机控制的数码管时钟,数码管是共阳4位时钟数码管,由于使用单片机真驱,电路比较简单,且使用的材料和工具也很简单,用数码管显示,单片机控制,两个按键调时,蜂鸣器整点报时。所需要的元件如下:

  材料有以下这些:

  STC12C2052AD单片机一片

  黄色共阳4位时钟数码管一块

  6mm×6mm按键两个

  杜邦线插针2p两个

  无源蜂鸣器一个

  20脚+14脚芯片座各一个

  洞洞板一块(截取一小部分)

  100欧电阻4个

  

1.jpg


  程序如下:

  /************************************************************************************/

  #include 《STC12C2052AD.h》 //声明头文件

  sbit key1=P3^4; //按键接口定义

  sbit key2=P3^5; //按键接口定义

  sbit speaker=P3^7; //蜂鸣器接口定义

  /************************************************************************************/

  unsigned char code LED[10]={0x20,0xA7,0x90,0x82,0x07,0x42,0x40,0xA6,0x00,0x02};//数码管段位码定义

  unsigned int time; //全局秒基准定义

  /*-------------------------------------延时函数-------------------------------------*/

  void delayms (unsigned int a){

  unsigned int i;

  while( --a != 0){

  for(i = 0; i 《 600; i++);

  }

  }

  /*----------------------------------蜂鸣器驱动函数----------------------------------*/

  void beep (void)

  {

  unsigned char i=30;

  while(i--)

  {

  speaker=~speaker;

  delayms(3);

  }

  }

  /*----------------------------------数码管驱动函数----------------------------------*/

  void display (unsigned char hour,min)

  {

  unsigned char H1,H2,M1,M2;

  P3=0xf8; //数码管位选

  P1 = LED[H1]; //数码管段选

  delayms (2); //扫描延时

  P3=0xf4; //数码管位选

  P1 = LED[H2]; //数码管段选

  delayms (2); //扫描延时

  P3=0xf2; //数码管位选

  P1 = LED[M1]; //数码管段选

  delayms (2); //扫描延时

  P3=0xf1; //数码管位选

  P1 = LED[M2]; //数码管段选

  delayms (2); //扫描延时

  /*--------------------------------------分定义--------------------------------------*/

  M1=min/10;//取分十位

  min=min%10;//取余

  M2=min;//取分个位

  /*--------------------------------------时定义--------------------------------------*/

  H1=hour/10;//取时十位

  hour=hour%10;//取余

  H2=hour;//取时个位

  }

  /*-----------------------------------按键去抖函数-----------------------------------*/

  void qudou (unsigned char hour,min)

  {

  unsigned char i;

  for(i=0;i《25;i++){//循环显示,等于键盘去抖的功能

  display (hour,min);

  }

  }

  /*--------------------------------------主函数--------------------------------------*/

  void main(void)

  {

  ////定时器初始设置

  TMOD=0x01;//定时器工作方式1

  TH0=0x3C;//定时器初始产生50ms时基信号

  TL0=0xB0;//定时器初始产生50ms时基信号

  ET0=1;//开定时器中断

  EA=1;//开总中断

  TR0=1;//启动定时器

  /*************************************************************************************/

  while(1)

  {

  unsigned char hour,min;//定义时分

  display (hour,min);//调用显示函数

  if (time》59)//60秒向分进1

  {

  time=0;

  min++;

  }

  if (min》59)//60分向时进1

  {

  min=0;

  hour++;

  beep ();

  }

  if (hour》23)//24时时分秒清零

  {

  hour=0;

  min=0;

  time=0;

  }

  /*-----------------------------------按键判断程序-----------------------------------*/

  if(key1==0)

  qudou (hour,min);

  if (key1==0) {hour++;}

  if(key2==0)

  qudou (hour,min);

  if (key2==0) {min++;}

  }

  }

  /*-----------------------------------中断服务程序-----------------------------------*/

  void Timer0_Routine(void) interrupt 1

  {

  unsigned char a;

  TH0=0x3C;//定时器初始产生50ms时基信号

  TL0=0xB0;//定时器初始产生50ms时基信号

  a++;//定时器循环计数20次为一秒

  if (a==20){//定时器循环计数20次为一秒

  a=0;//次数清零,从新循环计数

  time++;//秒加一

  }

  }

  /************************************************************************************/


责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯