8个数码管上分两组动态显示年月日与时分秒,刚开始是25年10月2日,9点30分40秒。_AD,Allegro,pads,PCB设计,电源模块,硬件,stm32,嵌入式,单片机,小北设计 Allegro,pads,PCB电路板设计,硬件及芯片资料分享—小北设计

8个数码管上分两组动态显示年月日与时分秒,刚开始是25年10月2日,9点30分40秒。

51单片机 by AD,Allegro,pads,PCB设计,电源模块,硬件,stm32,嵌入式,单片机,小北设计
二维数组中一行8个字符的持续刷新显示时间由变量shuaxin控制,时间近似等于shuaxinx5ms,增加shuaxin
值会延长一行字符保持显示在数码管上的时间长度。本例中t取值为1000,要注意将t定义为uint
类型。在一行8个字符保持显示若干时间后,i的增加会使数码管显示出下一行字符。
//8个数码管上分两组动态显示年月日与时分秒,刚开始是25年10月2日,9点30分40秒。
//本例的位显示延时用定时器实现,未使用前面案例中常用的延时函数。这个是模拟时钟

//通过网盘分享的文件:定时器中断0模式0_时钟
//链接: https://pan.baidu.com/s/1eF9rlxAuNqvOMZ3yMyfnNA 提取码: 3yh2

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code shu_zi[]={0XC0,0XF9,0XA4,
0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF};//存入0,1,2,3,4,5,6,7,8,9,-
uchar shu_zi_zaicu[][8]={
{0,0,10,0,0,10,0,0},
{0,0,10,0,0,10,0,0}};//分别存入时钟,年。
uint nian=25,yue=10,ri=2,shi=9,fen=30,
miao=40,qie_huan=0,shuzi=0,shuaxin=0,k=0;
//延时程序、
void yan_shi(uint ms)
{
uchar i,j;
for(i=0;i for(j=0;j<110;j++);
}
void xianshi_chengxu()
{
shu_zi_zaicu[0][0]=shi/10;//存入数组中
shu_zi_zaicu[0][1]=shi%10;
shu_zi_zaicu[0][3]=fen/10;
shu_zi_zaicu[0][4]=fen%10;
shu_zi_zaicu[0][6]=miao/10;
shu_zi_zaicu[0][7]=miao%10;
shu_zi_zaicu[1][0]=nian/10;
shu_zi_zaicu[1][1]=nian%10;
shu_zi_zaicu[1][3]=yue/10;
shu_zi_zaicu[1][4]=yue%10;
shu_zi_zaicu[1][6]=ri/10;
shu_zi_zaicu[1][7]=ri%10;
//数码管刷新
for(shuzi=0;shuzi<8;shuzi++)
{
  P3=_crol_(P3,1);
  P2=shu_zi[shu_zi_zaicu[qie_huan][shuzi]];//显示
  yan_shi(2);
}

}
//主程序
void main()
{
P3=0x80;
TMOD=0X00;//定时器0,模式0;
TH0=(8192-5000)/32;
TH0=(8192-5000)%32;//4ms定时
IE=0X82;//EA=1开总开关,ET0:定时器T0允许位
TR0=1;//定时器T0的运行控制位
while(1)
{
xianshi_chengxu();
}
}
void zhongduan_1() interrupt 1
{
TH0=(8192-5000)/32;
TH0=(8192-5000)%32;//50ms定时
//每组的8个字符位保持刷新一段时
k++;
if(k==100)//根据实际的值,调整秒中。
{ k=0;
miao++;
if(miao==60)//秒钟
{
miao=0;
fen++;
if(fen==61)//分钟
{
fen=0;
shi++;
if(shi==25)//时钟
{
shi=0;
ri++;
if(ri==31)//日
{
ri=0;
yue++;
if(yue==12)//月
{
yue=0;
nian++;
if(nian==99)//年
nian=0;
}

}
}

}
}
}
if(++shuaxin!=1000)return;//刷新若干遍数码管后切换,如果没到1000,就退出中断。
  shuaxin=0;//清零
  qie_huan=(qie_huan+1)%2; //数组shu_zi_zaicu[0][8]与shu_zi_zaicu[1][8]切换。
}
8个数码管上分两组动态显示年月日与时分秒,刚开始是25年10月2日,9点30分40秒。

    Message:

    Name:
    Email:
    Content:
PgUP ...
Allegro,pads,PCB电路板设计,电源模块件及芯片资料分享—小北设计