- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2025-03-17 16:39:04
中级会员
- 积分
- 253
|
/********************************************************
实现功能:八位数码管显示模块测试程序
使用芯片: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(); //显示秒分时值
}
}
/********************************************************************
结束
*********************************************************************/
|
|