求程序用AT89C51单片机......用六位数码管实现数字时钟,显示时分秒,用两个按键可分别调整时、分。

如题所述

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,aa,miao,fen,shi;
sbit m=P3^0;
sbit n=P3^1;
uchar code table[]={ //数码管编码表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void display(uchar miao,uchar fen,uchar shi);
void delay(uint z);
void init();
void main()
{
init();//初始化子程序
miao=0;
shi=0;
fen=0;
while(1)
{
display(miao,fen,shi);
}
}void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}void display(uchar miao,uchar fen,uchar shi) // 显示子函数
{
P0=0x00;
P0=table[miao%10];
P2=0x7f;
delay(1);

P0=0x00;
P0=table[miao/10];
P2=0xbf;
delay(1); P0=0x00;
P0=table[fen%10];
P2=0xdf;
delay(1);

P0=0x00;
P0=table[fen/10];
P2=0xef;
delay(1);

P0=0x00;
P0=table[shi%10];
P2=0xf7;
delay(1); P0=0x00;
P0=table[shi/10];
P2=0xfb;
delay(1);
}void init() // 初始化子函数
{
temp=0;
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256; //定时器初值,定时50ms(12M晶振),由于考虑MCU指令处理时间,此处赋初值位45872
EA=1;
ET0=1;
TR0=1;
}void timer0() interrupt 1 //定时计数器中断
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256; 、
aa++;
if(aa==20) //中断2次位1S,秒加1
{
miao++;
aa=0;
if(miao==60)
{
fen++; // 满60S, 分加1,秒清0
miao=0;
if(fen==60)
{
shi++; // 小时加1
fen=0;
if(shi==24) shi=0; //小时满
}
}
}
if(m==0) // 调分
{
delay(2);
if(m==0) fen++;
if(fen==60) fen=0;
delay(2);
while(!m);
}
if(n==0) // 调小时
{
delay(2);
if(n==0) shi++;
if(shi==24) shi=0;
delay(2);
while(!n);
}
}
温馨提示:内容为网友见解,仅供参考
无其他回答

求程序用AT89C51单片机...用六位数码管实现数字时钟,显示时分秒,用两个...
TL0=(65536-45872)%256; \/\/定时器初值,定时50ms(12M晶振),由于考虑MCU指令处理时间,此处赋初值位45872 EA=1;ET0=1;TR0=1;}void timer0() interrupt 1 \/\/定时计数器中断 { TH0=(65536-45872)\/256;TL0=(65536-45872)%256; 、aa++;if(aa==20) \/\/中断2次位1S,秒加1 { miao++;...

用C语言编写AT89C51单片机程序,设计一个智能数字钟。
这是我的课程设计,6个数码管,显示时分秒,三个按钮P0.0、P0.1、P0.2可以调时,有8个彩灯(可以不要),没闹钟、倒计时之类的。呵呵。include<AT89X52.H> define uchar unsigned char int i;\/\/***时钟的 uchar one[10]={0xbf,0xb0,0xdb,0xcf,0xe6,0xed,0xfd,0x07,0xff,0xef}...

单片机 at89c51 6位数码管24小时倒计时程序
include<reg51.h> define uchar unsigned char define uint unsigned int uchar hour,min,sec;uint count;uchar code tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar code add[6]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb};\/***延时一毫秒***\/ void delay1ms(void...

at89c51单片机实现电子时钟,不带闹铃。显示时分秒。求图求程序
0x7d,0x07,0x7f,0x6f,0x00,0x80};\/*0~9和无显示、的数码管段码*\/ uint dd=0,sec=0,min=0,hour=12; \/\/时间初始值12:00:00 uchar sec1=0,min1=0,hour1=0,set=0,sw=0;\/\/闹钟设定初始值0:00:00 uchar x[7],y[7];uint temp,k; \/\/ variable of temperature uchar flag1...

怎样用51单片机实现累加计时和倒计时,并用六个共阴极数码管显示出来。用...
本文数字时钟设计原理主要利用AT89S52单片机,由单片机的P0口控制数码管的位显示,P2口控制数码管的段显示,P1口与按键相接用于时间的校正。在设计中引入220V交流电经过整流、滤波后产生+5V电压,用于给单片机及显示电路提供工作电压。整个系统工作时,秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,将标准秒信号...

用C语言编写AT89C51单片机程序,设计一个智能数字钟。
sbit QB2=P1^1;\/\/数码管段选 sbit QB3=P1^2;sbit QB4=P1^3;sbit QB5=P1^4;sbit QB6=P1^5;sbit fm=P1^6; \/\/蜂鸣器 sbit s1=P2^4; \/\/s5按键,切换显示 sbit s2=P2^3; \/\/s2按键,设置调时 sbit s3=P2^2; \/\/s3按键,加1 sbit s4=P2^1; \/\/s4按键,减1 sbit led1=P0^0...

51单片机电子钟六位数码管显示整点提醒仿真设计( proteus仿真+程序+...
3. 通过六位一体数码管显示时、分、秒,开机时显示为12:00:00。设计使用12MHz频率的51单片机。硬件电路图由图纸绘制,程序在keil 4\/keil 5中编写,并在proteus上进行仿真。设计遵循S0047编号。51单片机型号(如AT89C51或STC89C52)虽不同,但内核兼容,引脚功能一致,程序编写通用。替换芯片时,仅需调整...

如何用单片机AT89C51控制六位数码管,可以显示出不同的六个数字(123456...
void t0isr() interrupt 1 { TH0=0xf4;TL0=0x48;switch(number){ case 0:P2=0x01;P0=distab[1];break;case 1:P2=0x02;P0=distab[2];break;case 2:P2=0x04;P0=distab[3];break;case 3:P2=0x08;P0=distab[4];break;case 4:P2=0x10;P0=distab[5];break;case 5:P2=0x20;...

...任务要求:利用AT89C51单片机设计简易电子钟(六位),通过6位共阴_百度...
高低电平暂时先设成低的,思路就是P2口片选,当INT0触发时,你可以用while循环兜住不让出去,第一次是片选前两位“时”,第二次分第三次秒,如果第四次按下P32,也就是进入中断后第三次按下按键,结束中断,调到main。思路应该是这样当然肯定漏洞很多,先吃个饭再看看。

求:用AT89C51单片机实现直流电机PWM调速原理图,protues仿真、程序
\/***数码管显示***\/ display(){ uchar i;gw=x%10; \/\/求速度个位值,送到个位显示缓冲区 sw=(x\/10)%10; \/\/求速度十位值,送到十位显示缓冲区 bw=(x\/100)%10; \/\/求速度百位值,送到百位显示缓冲区 qw=x\/1000; \/\/求速度千位值,送到千位显示缓冲区 for(i=0;i<4;...

相似回答