找回密码
 立即注册
查看: 638|回复: 1

STC89C52单片机控制8位共阳数码管扫码显示程序

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-03-17 16:39:04

43

主题

7

回帖

253

积分

中级会员

积分
253
发表于 2023-7-10 09:54:19 | 显示全部楼层 |阅读模式
GYJ-0276淘宝描述362.png

GYJ-0276淘宝描述370.png


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

实现功能:八位数码管显示模块测试程序
使用芯片:STC89C52RC
晶振:11.0592MHZ
编译环境:Keil 5
【声明】此程序仅用于学习与参考!     

*********************************************************************/
#include<reg52.h>                 //库文件
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int  //宏定义无符号整型

#define DUAN P0          //P0口控制段
#define WEI  P2          //P2口控制位
sbit k_shi=P1^0;// 更改小时按键
sbit k_fen=P1^1;// 更改分钟按键
sbit k_miao=P1^2;// 更改秒按键
/********************************************************************
                            初始定义
*********************************************************************/
code uchar seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0XBF}; //显示段码 数码管字跟
uchar wei[8]={0XFE,0XFD,0XFB,0XF7,0XEf,0XDf,0XBf,0X7f};                                 //位的控制端
uchar numb[8];         //定义字符串
uint miao=0,fen,shi;
/********************************************************************
                            延时函数
*********************************************************************/
void delay(uchar t)
{
  uchar i,j;
   for(i=0;i<t;i++)
   {
            for(j=13;j>0;j--);
         { ;
         }
   }
}
/********************************************************************
                            求值函数
*********************************************************************/
void t_to_dis()
{
numb[0]=shi/10;        //显示小时十位
numb[1]=shi%10;        //显示小时个位
numb[2]=10;                //显示横杠
numb[3]=fen/10; //显示分十位
numb[4]=fen%10;        //显示分个位
numb[5]=10;                //显示横杠
numb[6]=miao/10;//显示秒十位
numb[7]=miao%10;//显示秒个位
  }

/********************************************************************
                            显示函数
*********************************************************************/        
void display()//显示函数
{
/*****************数据转换*****************************/
      P2=0XFF;
          P0=seg7code[numb[0]];
          P2=wei[0];
          delay(80);
          P2=0XFF;  
      P0=seg7code[numb[1]];
          P2=wei[1];
          delay(80);
          P2=0XFF;  
             P0=seg7code[numb[2]];
          P2=wei[2];
          delay(80);
          P2=0XFF;  
      P0=seg7code[numb[3]];
          P2=wei[3];
          delay(80);
          P2=0XFF;
          P0=seg7code[numb[4]];
          P2=wei[4];
          delay(80);
          P2=0XFF;  
      P0=seg7code[numb[5]];
          P2=wei[5];
          delay(80);
          P2=0XFF;  
             P0=seg7code[numb[6]];
          P2=wei[6];
          delay(80);
          P2=0XFF;  
      P0=seg7code[numb[7]];
          P2=wei[7];
          delay(80);
          P2=0XFF;
}
/********************************************************************
                           按键函数
*********************************************************************/        
void key()//函数
{
if(k_shi==0){shi++;while(!k_shi);if(shi>=24)shi=0;}
if(k_fen==0){fen++;while(!k_fen);if(fen>=60)fen=0;}
if(k_miao==0){miao++;while(!k_miao);if(miao>=60)miao=0;}
}

/********************************************************************
                           定时器中断函数
*********************************************************************/
void timer1(void)interrupt 3
{
uchar i;
TH1=0X3c;//定时初值
TL1=0Xaf;//定时初值
  i++;
if(i>=20)
   {i=0;
    miao++;//秒加1
     if(miao>=60)
       {miao=0;//秒清零
             fen++;//60秒后分加1
               if(fen>=60)
                {fen=0;//分清零
                   shi++;//60分后时加1
                     if(shi>=24)
                           shi=0;//时清零
                                                  }
                                   }
                                  }
}
/********************************************************************
                           中断初始化
*********************************************************************/
void cshh()
{
TMOD=0X10;//定义定时器工作方式
TH1=0X3c;
TL1=0Xaf;
ET1=1;
TR1=1;//开定时器
EA=1;//开中断
}
/********************************************************************
                            延时函数
*********************************************************************/
void delay1()//延时程序
{
uchar m,n,s;
for(m=80;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
/********************************************************************
                            主函数
*********************************************************************/

main()
{
cshh();         //中断初始化
//0
P2=0X00;
P0=0xc0;
delay1();
//1
P2=0X00;
P0=0xf9;
delay1();
//2
P2=0X00;
P0=0xa4;
delay1();
//3
P2=0X00;
P0=0xb0;
delay1();
//4
P2=0X00;
P0=0x99;
delay1();
//5
P2=0X00;
P0=0x92;
delay1();
//6
P2=0X00;
P0=0x82;
delay1();
//7
P2=0X00;
P0=0xf8;
delay1();
//8
P2=0X00;
P0=0x80;
delay1();
//9
P2=0X00;
P0=0x90;
delay1();

P2=0XFE;
P0=0x00;
delay1();

P2=0XFD;
P0=0x00;
delay1();

P2=0XFB;
P0=0x00;
delay1();

P2=0XF7;
P0=0x00;
delay1();

P2=0XEF;
P0=0x00;
delay1();

P2=0XDF;
P0=0x00;
delay1();

P2=0XBF;
P0=0x00;
delay1();

P2=0X7F;
P0=0x00;
delay1();


while(1)
{
key();//按键函数
t_to_dis();//确定秒分时值
display();        //显示秒分时值
}
}
       
/********************************************************************
                              结束
*********************************************************************/


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-04-27 10:40:24

11

主题

425

回帖

1971

积分

版主

积分
1971
发表于 2023-7-10 11:10:25 | 显示全部楼层
感谢分享
QQ:2269694595     微信:18106296594
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 03:12 , Processed in 0.309944 second(s), 57 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表