导航:首页 > 操作系统 > 8051单片机数字钟

8051单片机数字钟

发布时间:2022-08-01 12:35:58

1. 设计数字时钟设置两个按键分别调节秒和分 8051单片机 C语言

数码转换部分:
main()
{
unsigned int num=3600;
unsigned int j;
while(1)
{j++;
if(j=60)
{j=0;num++;
if(num=3600)
num=0;}
TempData[0]=DuanMa[(num%60)/6];
TempData[1]=DuanMa[(num%60)/10];
TempData[2]=DuanMa[(num%60)/6];
TempData[3]=DuanMa[(num%60)/10];
Display(0,3)
}
}
独立按键部分:
sbit KEY_ADD=P3^3;
#define DataPort P0
sbit Latch1=P2^2;
sbit Latch2=P2^3;
void main(void)
unsigned char num=o;
Key_ADD=1;
while(1)
{
if(!KEY_ADD)
DelayMs(10);
if(!KEY_ADD)
{while(!KEY_ADD)
{if (num<9)num++;}
}
}
定时器部分:
void Init_Timer0(void)
{TMOD|=0x01;
EA=1;ET0=1;TR0=1;
}
void Timer0_isr(void) interrupt 1
{TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
display(0,3);
}
延时部分和单片机的工作频率有关系,你在自己看一下吧,临时写的不一定对,自己在调试一下吧,把这三部分结合起来应该就可以实现了,这样也可以锻炼一下,呵呵

2. DS1302芯片和8051单片机做数字钟

你是需要做硬件电路还是程序,或者程序和硬件电路一起做啊?你这个为什么需要两个单片机联机呢?

3. 用51单片机编程:电子时钟(设计电子时钟,用51单片机编程)

如果有问题欢迎到我空间相关文章下留言 乐于回答~~
程序如下:
; 定义管脚
S_SET BIT P1.0 ;数字钟秒控制位
M_SET BIT P1.1 ;分钟控制位
H_SET BIT P1.2 ;小时控制位
SECOND EQU 30H
MINUTE EQU 31H
HOUR EQU 32H
ORG 00H
SJMP MAIN
ORG 0BH
LJMP INT_T0
MAIN: MOV DPTR,#TABLE
MOV HOUR,#0 ;初始化
MOV MINUTE,#0
MOV SECOND,#0
MOV R0,#0
MOV TMOD,#01H
MOV TH0,#3CH ; 设置初值(定时50毫秒)
MOV TL0,#0B0H
SETB TR0 ;启动定时
SETB ET0
SETB EA
;*******************************************************************************
;判断是否有控制键按下
A1: LCALL DISPLAY
JNB S_SET,S1
JNB M_SET,S2
JNB H_SET,S3
LJMP A1
S1: LCALL DELAY ;去抖动
JB S_SET,A1

INC SECOND ;秒值加1
MOV A,SECOND
CJNE A,#60,J0 ;判断是否加到60秒
MOV SECOND,#0
LJMP K1
S2: LCALL DELAY
JB M_SET,A1

K1: INC MINUTE ;分钟值加1
MOV A,MINUTE
CJNE A,#60,J1 ;判断是否加到60分
MOV MINUTE,#0
LJMP K2
S3: LCALL DELAY
JB H_SET,A1

K2: INC HOUR ;小时值加1
MOV A,HOUR
CJNE A,#24,J2 ;判断是否加到24小时
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
LJMP A1
;****************************************************
;等待按键抬起
J0: JB S_SET,A1
LCALL DISPLAY
SJMP J0
J1: JB M_SET,A1
LCALL DISPLAY
SJMP J1
J2: JB H_SET,A1
LCALL DISPLAY
SJMP J2
;***********************************************
;定时器中断服务程序,对秒,分钟和小时的计数
INT_T0: MOV TH0,#3CH
MOV TL0,#0B0H
INC R0
MOV A,TCNT
CJNE A,#20,RETUNE ;计时1秒
INC SECOND
MOV R0,#0
MOV A,SECOND
CJNE A,#60,RETUNE
INC MINUTE
MOV SECOND,#0
MOV A,MINUTE
CJNE A,#60,RETUNE
INC HOUR
MOV MINUTE,#0
MOV A,HOUR
CJNE A,#24,RETUNE
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
MOV R0,#0
RETUNE: RETI
;******************************************
;显示控制子程序
DISPLAY: MOV A,SECOND ;显示秒
MOV B,#10
DIV AB
CLR P3.6
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.6
MOV A,B
CLR P3.7
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.7
CLR P3.5
MOV P0,#40H ;显示分隔符
LCALL DELAY
SETB P3.5
MOV A,MINUTE ;显示分钟
MOV B,#10
DIV AB
CLR P3.3
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.3
MOV A,B
CLR P3.4
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.4
CLR P3.2
MOV P0,#40H ;显示分隔符
LCALL DELAY
SETB P3.2
MOV A,HOUR ;显示小时
MOV B,#10
DIV AB
CLR P3.0
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.0
MOV A,B
CLR P3.1
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
DELAY: MOV R6,#5
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
END
这里的程序没用38译码器,若要用则显示子程序要改
如 要显示秒,程序如下

DISPLAY: MOV A,SECOND ;显示秒
MOV B,#10
DIV AB
MOV R7,#60H
ORG A,R7
MOV P0,A
LCALL DELAY
MOV A,B
MOV R7,#70H
ORL A,R7
MOV P0,A
LCALL DELAY
其他的一样这样改

4. 51单片机8位数字钟程序,在线等,急!!!

我严重怀疑回答问题的那些人是不是电脑?!

楼主问题是 ‘51单片机8位数字钟程序’,然后要求是‘要详细的程序以及仿真图
上传压缩包’。还是给了50悬赏分的。

但问题是这么模糊的提问,回答者是怎么回答上来的?!

  1. 51单片机有很多种,楼主没说用什么类型单片机(别跟我说都一样,要不要试试winbond和STC)

  2. 8位数字钟,要用什么元件还是模块,功能是什么楼主没说(难道随便亮个数字也行吗)

  3. 要详细的程序,楼主也没说用C语言还是汇编(敢情用python可接受否)

  4. 仿真图,仿真软件有很多,楼主没说要哪个(楼下有人用proteus仿真来回答问题,真是醉了,万一楼主只需要multisim呢)

  5. 上传压缩包,楼主没说传到哪里,是网盘还是哪里(那些回答者直接回帖回答,对得起那50分吗)

说多都是泪,不说了,我还是洗洗睡了

5. 单片机80c51电子时钟怎么

单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。而51单片机是各单片机中最为典型和最有代表性的一种。
本次设计以AT89S51芯片为核心,辅以必要的外围电路,设计了一个简易的电子时钟,它由5V直流电源供电。在硬件方面,除了CPU外,使用四个七段LED数码管来进行显示,LED采用的是动态扫描显示,使用74LS14芯片进行驱动。通过LED能够比较准确显示时、分。两个简单的按键实现对时间的调整。软件方面采用汇编语言编程。整个电子钟系统能完成时间的显示,调时,定时闹钟,复位等功能。
通过这次设计让我更深入了解单片机基本电路、如何控制和定时器和中断编程的基本方法,从而锻炼了我学习、设计和开发软、硬件的能力。

Because of its extremely high performance-price ratio, the single-chip computer (SCC) has been paid great attention to ever since it came out in 1970s of 20th Century, and has gained an extensive applicable field and fast development. Among all kinds of SCCs, 51 SCC is the most typical and representative one.
This design, adopting AT89S51 chip as the core part with some necessary peripheral circuits, is a simple electronic clock which uses 5V DC as the power supply. In hardware aspect, besides the CPU, four seven-segment LED digi-tubes are used for display, which work in a dynamically scanning display mode and driven by 74SL14 chip. The LEDs can accurately indicate hour and minute and two buttons can be used to adjust the time. While in the software aspect, the programming language is assembly language. The whole electronic clock system has functions of time display, adjustment, bell-setting and reset, etc.
This design enables me to have greater insight into the basic circuit of SCC, and the basic methods of timer control and interruption programming, so that is a training of my ability of learning, designing and developing software and hardward.

6. 基于8051单片机的数字钟设计

1602液晶显示
你的单片机原理图没发
程序很依赖硬件的哦
这个程序你查考下,有三个键按可以修改时间的。

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit la=P2^6;
sbit wela=P2^7;
sbit rs=P3^5;
sbit lcden=P3^4;
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit rd=P3^7;
uchar count,s1num;
char miao,shi,fen;
uchar code table[]=" 2009-5-17 MON"; \\
uchar code table1[]=" 00:00:00"; \\自己设下
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void write_com(uchar com)
{
rs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}

void write_date(uchar date)
{
rs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}

void init()
{
uchar num;
la=0;
wela=0;
lcden=0;
// fen=59;
// miao=53;
// shi=23;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<15;num++)
{
write_date(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<12;num++)
{
write_date(table1[num]);
delay(5);
}
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}

void write_sfm(uchar add,uchar date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
}

void keyscan()
{
rd=0;
if(s1==0)
{
delay(5);
if(s1==0)
{ s1num++;
while(!s1);
if(s1num==1)
{
TR0=0;
write_com(0x80+0x40+10);
write_com(0x0f);
}
}
if(s1num==2)
{
write_com(0x80+0x40+7);
}
if(s1num==3)
{
write_com(0x80+0x40+4);
}
if(s1num==4)
{
s1num=0;
write_com(0x0c);
TR0=1;
}

}
if(s1num!=0)
{
if(s2==0)
{
delay(5);
if(s2==0)
{
while(!s2);
if(s1num==1)
{
miao++;
if(miao==60)
miao=0;
write_sfm(10,miao);
write_com(0x80+0x40+10);

}
if(s1num==2)
{
fen++;
if(fen==60)
fen=0;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
if(s1num==3)
{
shi++;
if(shi==24)
shi=0;
write_sfm(4,shi);
write_com(0x80+0x40+4);
}
}
}
if(s3==0)
{
delay(5);
if(s3==0)
{
while(!s3);
if(s1num==1)
{
/* if(miao==0)
{
miao=59;
write_sfm(10,miao);
write_com(0x80+0x40+10);
}*/
miao--;
if(miao==-1)
miao=59;
write_sfm(10,miao);
write_com(0x80+0x40+10);
}
if(s1num==2)
{
fen--;
if(fen==-1)
fen=59;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
if(s1num==3)
{
shi--;
if(shi==-1)
shi=23;
write_sfm(4,shi);
write_com(0x80+0x40+4);
}
}
}
}
}
void main()
{
init();
while(1)
{
keyscan();

}
// while(1);
}

void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==18)
{
count=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
write_sfm(4,shi);
}
write_sfm(7,fen);
}
write_sfm(10,miao);

}
}

7. 51单片机实现数字时钟,用四位数码管实现分计时,显示分和秒,可以任意设置时间。

1、将分(秒)中的数字位分离
2、控制显示在相应数码管
3、数码管如果采用动态扫描实现,要注意位选和段选
4.更多交流参考我空间文章。

8. 基于8051单片机数字时钟汇编语言程序

不好意思,现在我正忙着做毕业设计,抽不出时间来给你做这个啊!!!我们做课程设计都不需要调试的,你们怎么还要求那么高啊?不好意思!!

9. 利用8051定时器和实验系统提供的数码显示电路,设计一个电子时钟。拜托各位大神了,我真心做不出来啊

#include <reg51.h> //P0的0~6口控制数码管位选,P1控制数码管段选。
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9的编码
uchar DSY_DATA[]={0,0,0,0,0,0};

uchar flag=0;
uchar hour,minute,second;

void delay(uint t) //延时子程序
{
uint i;
while(t--)
{
for(i=0;i<120;i++);
}
}

void init() //初始化函数
{
hour=0;
minute=0;
second=0;
TMOD=0x01;
TH0=(65536-50000)/256; //50ms定时初值
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}

void main() //主函数
{
init();

while(1)
{
uchar move=0x01,i;
DSY_DATA[0]=second%10;
DSY_DATA[1]=second/10;
DSY_DATA[2]=minute%10;
DSY_DATA[3]=minute/10;
DSY_DATA[4]=hour%10;
DSY_DATA[5]=hour/10;
for(i=0;i<6;i++)
{
P1=move;
move=_crol_(move,1);
P0=DSY_DATA[i];
delay(2);
}
}

}

void TIMER0() interrupt 1
{
if(1==flag++)
{
flag=0;
if(++second==60)
{
second=0;
if(++minute==60)
{
minute=0;
if(++hour==24)
hour=0;
}
}
}
TH0=(65536-50000)/256; //50ms定时初值
TL0=(65536-50000)%256;
}

10. 单片机8051电子时钟设计

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

将刷新操作放在定时器中断函数的外面。

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

#include<reg51.h>

#include<stdio.h>

#defineucharunsignedchar

voidtimer0();

voidinit_T0();

voiddelay(uchar);

voiddisplay();

voidconvert();

voidpressKey();

sbitK0=P3^0;

sbitK1=P3^1;

sbitK2=P3^2;

sbitK3=P3^3;

//共阴:0,1,2,3,4,5,6,7,8,9,-

codeunsignedcharLed[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40};

ucharhour,min,sec,dis[8];//存放分钟,秒钟,分解后的结果

ucharpos,disPos;

voidmain()

{

hour=12;min=59;sec=50;

convert();

pos=0;

disPos=0xfe;//刷新位置

init_T0();

while(1)

{

display();

pressKey();

delay(1);

}

}

voidpressKey()

{

ucharflag;

if(!K0){

while(!K0);flag=1;

}

if(!K1){

while(!K1);flag=2;

}

if(!K2){

while(!K2);hour=(++hour)%24;flag=3;

}

if(!K3){

while(!K3);hour=(--hour)%24;flag=4;

}

switch(flag)

{

case1:TR0=1;break;

case2:TR0=0;break;

case3:convert();break;

case4:convert();break;

}

}

voidconvert()

{

dis[0]=hour/10;

dis[1]=hour%10;

dis[2]=10;

dis[3]=min/10;

dis[4]=min%10;

dis[5]=10;

dis[6]=sec/10;

dis[7]=sec%10;

}

voiddisplay()

{

//**********刷新点亮8位***********

P2=disPos;//设置点亮的位置,初值为0XFE

P1=Led[dis[pos++]];//点亮

disPos=(disPos<<1)|0x01;//改变点亮的位置

if(pos==8)

{

pos=0;

disPos=0xFE;

}

}

voidinit_T0()

{

TMOD=0x01;

TH0=(65536-50000)/256;//定时50ms

TL0=(65536-50000)%256;

ET0=1;

EA=1;

TR0=1;

}

voidtimer0()interrupt1using1

{

staticucharnum;

num++;

if(num==20)

{

num=0;

sec++;

if(sec==60)

{

sec=0;min++;

if(min==60)

{

min=0;hour++;

if(hour==24)

{

hour=0;

}

}

}

convert();

}

TH0=(65536-50000)/256;//定时50ms

TL0=(65536-50000)%256;

}

voiddelay(ucharn)

{

uchari;

while(n--)

for(i=0;i<150;i++);

}

阅读全文

与8051单片机数字钟相关的资料

热点内容
土木工程师算法工程师 浏览:88
javaexcel导入oracle 浏览:877
如何设置异地服务器 浏览:882
为什么安卓手机蓝牙耳机不会弹窗 浏览:546
linuxf77编译器安装教程 浏览:949
android本地录音权限 浏览:446
加密u盘内容怎么拷贝 浏览:283
安卓手机为什么看不到iso文件 浏览:582
用图片做文件夹图标 浏览:693
java正则表达式语法 浏览:865
美图秀在线压缩图片 浏览:184
苹果自带控制app是什么 浏览:907
孩子学编程怎么样 浏览:589
网络编程经典书籍 浏览:612
曲靖创建网站java程序员 浏览:690
256位加密中是什么意思 浏览:97
php多维数组去重 浏览:308
做程序员这一行储备人才怎么看 浏览:461
参加密逃文 浏览:329
苹果编程语言ios 浏览:764