求51单片机电子时钟PCB图 8位数码管显示

急需啊 求大神门啊

第1个回答  2013-04-03
第2个回答  2013-03-24
就放心即可更换开关和好看好看更快
第3个回答  2013-03-23
有仿真可以照着画 pcb
第4个回答  2013-03-23
/**************************************************
* 文件名:数码管可调时钟
* 说 明:单方向调整小时和分钟
/**************************************************/
#include <reg51.h>
#include "main.h"
//#include "delay.h"
#include "delay.c"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

uchar code DSY_CODE[12] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0xff,0x0c}; //显示码
uchar DSY_BUFFER[] = {0,0,0xbf,0,0,0xbf,0,0};
// - -
uchar Scan_BIT; //LED 位码
uchar DSY_IDX;
uchar KEY_State; //按键值
uchar h,m,s,s100; //小时、分钟、秒、50毫秒,共4个存储单元
//---------------------------------------------------------
void DelayMS(uint ms)
{
uchar t;
while(ms--) for (t=0;t<120;t++);
}
//***********************************
// 函 数:小时处理显示函数
//***********************************
void Increase_Hour()
{
if (++h >23) h = 0;
DSY_BUFFER[0] = DSY_CODE[h / 10]; //分解小时的十位
DSY_BUFFER[1] = DSY_CODE[h % 10]; //分解小时的个位
}
//**********************************
// 函 数:分钟处理显示函数
//***********************************
void Increase_Minute()
{
if (++m >59)
{
m =0; Increase_Hour();
}
DSY_BUFFER[3] = DSY_CODE[m / 10]; //分解分钟的十位
DSY_BUFFER[4] = DSY_CODE[m % 10]; //分解小时的个位
}
//**********************************
// 函 数:秒处理显示函数
//***********************************
void Increase_Second()
{
if (++s >59)
{
s = 0; Increase_Minute();
}
DSY_BUFFER[6] = DSY_CODE[s / 10]; //分解秒的十位
DSY_BUFFER[7] = DSY_CODE[s % 10]; //分解秒时个位
}
//**********************************
//T0中断,动态扫描数码管
//**********************************
void T0_INT() interrupt 1
{
TH0 =(65536-1000) / 256;
TL0 =(65536-1000) % 256;

P2 = Scan_BIT;
P0 = ~DSY_BUFFER[DSY_IDX];
Scan_BIT = Scan_BIT + 4 ;

DSY_IDX =(DSY_IDX+1) % 8;
if (Scan_BIT == 0x20 ) //位码判断 到最高位后(1CH),需清零!
Scan_BIT =0; // 00H,04H,08H...1CH!

}
//****************************************
//T1中断,控制时钟运行 50MS s100 +1
//****************************************
void T1_INT() interrupt 3
{
TH1 =(65536-50000) / 256;
TL1 =(65536-50000) % 256; //50ms
if ( ++s100 == 20) //1S
{
s100 = 0;
Increase_Second(); // 秒+1
}
}
//**********************************
//主程序
//将扫描的结果按键数值显示在数码管上
//**********************************
void main(void)
{
P0 = P2 = 0xff;
TMOD = 0x11; //
TH0 =(65536-1000) / 256;
TL0 =(65536-1000) % 256;
TH1 =0XDC;//(65536-50000) / 256; //原0XDC。
TL1 =0; //(65536-50000) % 256; //原00。
TCON = 0x01;
EA =1;
ET0 = ET1 = 1;
h = 13; m = s = s100 = 0;
//
DSY_BUFFER[0] = DSY_CODE[ h /10];
DSY_BUFFER[1] = DSY_CODE[ h %10];
DSY_BUFFER[3] = DSY_CODE[ m /10];
DSY_BUFFER[4] = DSY_CODE[ m %10];
DSY_BUFFER[6] = DSY_CODE[ s /10];
DSY_BUFFER[7] = DSY_CODE[ s %10];

Scan_BIT = 0x00;
DSY_IDX = 0;
TR0 = TR1 = 1;
KEY_State =0xff;
while (1)
{
if (P1^KEY_State)
{
DelayMS(10);
if (P1^KEY_State)
{
KEY_State = P1; EA= 0;
if ((KEY_State & 0x01) == 0 ) Increase_Hour();
else if ((KEY_State & 0x02) == 0 ) Increase_Minute(); //修改
if ((KEY_State & 0x04) == 0 ) Increase_Second(); //增加+秒!
// {
// m = ( m +1 ) % 60;
// DSY_BUFFER[3] = DSY_CODE[ m /10];
// DSY_BUFFER[4] = DSY_CODE[ m %10];
// }
EA = 1;
}
}
}
}
//++++++++++++++++++++++++++++++++++++追问

我要PCB图的 大神

追答

没有PCB
有PROTUS

本回答被网友采纳

基于51单片机简易时钟闹钟八位数码管显示Proteus仿真
本设计旨在实现一个基于51单片机的多功能数字时钟闹钟,其主要功能包括显示时、分、秒,并能设置时间和闹钟。该设计采用单片机内部定时器实现计时功能,通过八位数码管显示当前时间。用户可以对时、分、秒进行独立设置,设置时数码管将闪烁。此外,闹钟功能可让用户设置特定时间,当时间到达,蜂鸣器将每秒鸣响...

51单片机显示八位数码管的C语言程序
4、最后,我们把先前定义的延时语句delayms写好。5、最后,点击这里进行编译,生成一个hex文件。6、如果这里无错误警告的话,就说明我们的程序写对了,那我们就可以点亮动态数码管了。

C 语言51单片机,求解8位数码管上动态显示0-7,为什么会显示"12345670...
void main(){ unsigned char i,j; while(1) for (i=0; i<8; ++i) { P0=DIG_CODE[i]; \/\/发段码 P2=i<<1; \/\/发位选 for (j=0; j<100; ++j); \/\/延时 }} 延时的位置放错了,导致当前位选择为下一次服务了。

51单片机八位数码管,
不知你问题在哪?以上是电路图参考,下面是仿真运行效果,显示时间为23:59分31秒 星期六 以上设计是没有采用时钟芯片的,时间来源才用的是单片机定时自动重载的方式计算实现。如果加上时钟芯片的话,可以实现断电继续走时,现在常用的方案就是这样。关于单片机程序方面,难者不会,会者不难,在此寥寥几...

用c语言循环语句怎么写一个51单片机的时钟啊,用8个数码管显示时间。
include<reg51.h> define uchar unsigned charuchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};\/\/0-9unsigned char sec=0,min=0,hour=12,scanled;unsigned char key,flashbit,mode,time; unsigned char disdat[8];sbit led=P1^0;void delay(...

基于51单片机利用八个数码管花样显示如下
其实很简单,你把1--8对应的共阴极或共阳极的编码寻在一个数组里(C语言)或者表里(汇编语言查表法),在P0口和P2口接上8个7段数码管,P2口做位选,P0口做段选,每次从表中查询你要显示的数据的编码写到P0口,再把你要在哪一个数码管上显示写到P2口(比如位选为低电平有效,向P2口写入0xFE...

51单片机,8个数码管循环显示1-9的C语言程序。
假设8个数码管公共端均接地,同时显示1-9\\x0d\\x0a#include\\x0d\\x0a#include\\x0d\\x0a#defineucharunsignedchar\\x0d\\x0a#defineuintunsignedint\\x0d\\x0aucharcodeDSY_CODE[]=\\x0d\\x0a{\\x0d\\x0a0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x82,0xf8,0x80,0x90,0xff\\x0d\\x0a}...

51单片机驱动八位数码管电子钟
P2=0X00; \/\/八个数码管显示全为0 TR0=0;TR1=0;while(1){ gongzuo();} } void delay(uint z)\/\/延时程序 { uint i,j;for (i=z;i>0;i--)for (j=110;j>0;j--);} void display1() \/\/P2为位选,P0为段选,显示格式为 23小时59分59.99秒 { uchar s,g;s=shi\/10;g=...

用51单片机控制8位数码管显示特定数字,如426721850求程序
SEG_C BIT P1.4 ;\/段控制位定义BIT_C BIT P1.5 ;\/位控制位定义DISPLAY_BUFF EQU 30H;显示缓存30H-37H,8字节COUN_WEI EQU 3CH ;\/显示位存储区 ORG 0000H AJMP MAIN ORG 0100HMAIN: MOV SP,#60H MOV COUN_WEI,#0;初始化显示缓存 MOV DISPLAY_BUFF,#...

51单片机控制8个数码管并显示1-8
数码管段选连接到单片机P0口,位选连接到P2口 ORG 0000h MAIN:CALL DISPLAY AJMP MAIN DISPLAY:MOV R0,#0 MOV R1,#0x01 MOV DPTR,#TAB LOOP:INC R0 MOV A,R0 MOVC A,@A+DPTR MOV P0,#0 ;消隐 MOV P0,A ;送段码 CALL DELAY MOV A,R1 ;送位码 RL A ;移位 MOV P2,A MOV ...

相似回答