单片机 数码管 时分秒显示
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
dula=1;
P0=table[s%10];
dula=0;
delay(1);
}
}
void T1_time()interrupt 3//中断3
{
TH1=(65536-45872)/256;//重装初值
TL1=(65536-45872)%256;//
num1++;//num2每加一次判断一次是否到20次了
{
m=0;//把m清零,重新再计60次
h++; //h每加一次判断一次是否到24次了
if(h==24)//如果h到了24次,说明24小时到了
{
h=0; //把m清零,重新再计60次
}
}
}
}
}
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void init()//初始化
{
TMOD=0x10;// 0001 0001定时器0的工作方式1,定时器1的工作方式1
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
if(num1==20)//如果到了20次,说明1秒钟到了
{
num1=0;//把num1清零,重新再计20次
s++;//s每加一次判断一次,是否到60次了
if(s==60)//如果到了60次,说明1分钟到了
{
s=0;//把s清零,重新再计60次
m++;//m每加一次判断一次是否到60次了
if(m==60) //如果到了60次,说明1小时到了
dula=0;//关闭段选
delay(1);//延时5ms
wela=1;//打开位选
P0=0xef;//点亮数码管
wela=0;//关闭位选
dula=1;//打开段选
P0=table[s/10];//送入数据
dula=0;//关闭段选
delay(1);//延时5ms
wela=1;
P0=0xdf;
wela=0;
EA=1;//开总中断
ET1=1;//开定时器1中断
TR1=1;//启动定时器1
}
void main()//主函数
{
init();//初始化
while(1)//while循环
{
wela=1;//打开位选
P0=0xfe;//点亮数码管
wela=0;//关闭位选
dula=1;//打开段选
P0=table[h/10];//送入数据
/*****ห้องสมุดไป่ตู้ 2012-8-23日修改为XX-XX-XX,24小时制并成功显示*******/
#include<reg52.h>
#define uchar unsignedchar
#define uint unsigned int
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//0~9的数码管显示
sbit dula=P2^6;//声明段选
sbit wela=P2^7;//声明位选
uchar h,m,s,num1;//定义变量
void delay(uint xms)//延时函数
dula=0;//关闭段选
delay(1);//延时5ms
wela=1;//打开位选
P0=0xfd;//点亮数码管
wela=0;//关闭位选
dula=1;//打开段选
P0=table[h%10];//送入数据
dula=0;//关闭段选
delay(1);//延时5ms
wela=1;//打开位选
P0=0xfb;//点亮数码管
wela=0;//关闭位选
dula=1;//打开段选
P0=table[m/10];//送入数据
dula=0;//关闭段选
delay(1);//延时5ms
wela=1;//打开位选
P0=0xf7;//点亮数码管
wela=0;//关闭位选
dula=1;//打开段选
P0=table[m%10];//送入数据
P0=table[s%10];
dula=0;
delay(1);
}
}
void T1_time()interrupt 3//中断3
{
TH1=(65536-45872)/256;//重装初值
TL1=(65536-45872)%256;//
num1++;//num2每加一次判断一次是否到20次了
{
m=0;//把m清零,重新再计60次
h++; //h每加一次判断一次是否到24次了
if(h==24)//如果h到了24次,说明24小时到了
{
h=0; //把m清零,重新再计60次
}
}
}
}
}
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void init()//初始化
{
TMOD=0x10;// 0001 0001定时器0的工作方式1,定时器1的工作方式1
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
if(num1==20)//如果到了20次,说明1秒钟到了
{
num1=0;//把num1清零,重新再计20次
s++;//s每加一次判断一次,是否到60次了
if(s==60)//如果到了60次,说明1分钟到了
{
s=0;//把s清零,重新再计60次
m++;//m每加一次判断一次是否到60次了
if(m==60) //如果到了60次,说明1小时到了
dula=0;//关闭段选
delay(1);//延时5ms
wela=1;//打开位选
P0=0xef;//点亮数码管
wela=0;//关闭位选
dula=1;//打开段选
P0=table[s/10];//送入数据
dula=0;//关闭段选
delay(1);//延时5ms
wela=1;
P0=0xdf;
wela=0;
EA=1;//开总中断
ET1=1;//开定时器1中断
TR1=1;//启动定时器1
}
void main()//主函数
{
init();//初始化
while(1)//while循环
{
wela=1;//打开位选
P0=0xfe;//点亮数码管
wela=0;//关闭位选
dula=1;//打开段选
P0=table[h/10];//送入数据
/*****ห้องสมุดไป่ตู้ 2012-8-23日修改为XX-XX-XX,24小时制并成功显示*******/
#include<reg52.h>
#define uchar unsignedchar
#define uint unsigned int
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//0~9的数码管显示
sbit dula=P2^6;//声明段选
sbit wela=P2^7;//声明位选
uchar h,m,s,num1;//定义变量
void delay(uint xms)//延时函数
dula=0;//关闭段选
delay(1);//延时5ms
wela=1;//打开位选
P0=0xfd;//点亮数码管
wela=0;//关闭位选
dula=1;//打开段选
P0=table[h%10];//送入数据
dula=0;//关闭段选
delay(1);//延时5ms
wela=1;//打开位选
P0=0xfb;//点亮数码管
wela=0;//关闭位选
dula=1;//打开段选
P0=table[m/10];//送入数据
dula=0;//关闭段选
delay(1);//延时5ms
wela=1;//打开位选
P0=0xf7;//点亮数码管
wela=0;//关闭位选
dula=1;//打开段选
P0=table[m%10];//送入数据