时钟代码

时钟代码
时钟代码

1package com.jp.lianxi3;

2import java.awt.Color;

3import java.awt.Graphics;

4import java.util.Date;

5import java.util.Timer;

6import java.util.TimerTask;

7import javax.swing.JFrame;

8import javax.swing.JPanel;

9public class DrawClock extends JPanel{

10private int localX=150;

11private int localY=150;

12private int r=150;

13public DrawClock(int r){

14this.localX=this.localY=this.r=r;

15 }

16public DrawClock(){}

17public void paintComponent(Graphics g){

18super.paintComponent(g);

19 g.translate(250, 250);

20 drawO(g);

21 drawHand(g);

22 }

23public void drawO(Graphics g){//画表盘

24 g.drawOval(-localX, -localY, r*2, r*2);

25int a=0;

26for(int i=0;i<60;i++){

27double x,y;

28 x=Math.cos(Math.toRadians(a));

29 y=Math.sin(Math.toRadians(a));

30if(a%30==0)

31 g.drawLine((int)(0.8*x*r), (int)(0.8*y*r), (int)(x*r), (int)(y*r));

32else

33 g.drawLine((int)(0.9*x*r), (int)(0.9*y*r), (int)(x*r), (int)(y*r));

34 a+=6;

35 }

36 }

37public void drawHand(Graphics g){//画表针

38 Date date=new Date();

39int hour,minute,second;

40 hour=minute=second=90;

41//确定各个针的角度

42 hour-=date.getHours()*30;

43 minute-=date.getMinutes()*6;

44 second-=date.getSeconds()*6;

45

46 g.setColor(Color.RED);

47double x,y;

48 x=Math.cos(Math.toRadians(hour));

49 y=Math.sin(Math.toRadians(hour));

50 g.drawLine(0,0,(int)(0.5*r*x),-(int)(0.5*r*y));//画时针

51 x=Math.cos(Math.toRadians(minute));

52 y=Math.sin(Math.toRadians(minute));

53 g.drawLine(0,0,(int)(0.6*r*x),-(int)(0.6*r*y));//分针

54 x=Math.cos(Math.toRadians(second));

55 y=Math.sin(Math.toRadians(second));

56 g.drawLine(0,0,(int)(0.8*r*x),-(int)(0.8*r*y));//画秒针

57

g.drawString(date.getHours()+":"+date.getMinutes()+":"+date.getSeconds(), 20,

10);

58 }

59public void go(){

60 Timer t=new Timer();

61 t.schedule(new MyTimerTask(), 0, 1000);//定义定时器每一秒刷一次

62 }

63class MyTimerTask extends TimerTask{

64@Override

65public void run() {

66 repaint();

67 }

68

69 }

70public static void main(String[] args) {

71 DrawClock dc=new DrawClock(150);

72 JFrame f=new JFrame("时钟");

73 f.add(dc);

74 f.setSize(500,500);

75 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

76 f.setLocationRelativeTo(null);

77 f.setVisible(true);

78 dc.go();

79 }

80}

import java.awt.*;

import java.applet.Applet;

import java.util.Calendar;

import java.text.SimpleDateFormat;

import java.util.Date;

public class ClockApplet extends Applet implements Runnable //Applet支持线程{

private Thread athread; //线程

private SimpleDateFormat sdateformat; //日期格式

public void init()

{

this.setBackground(Color.white);

this.athread = null;

}

public void paint(Graphics g)

{

this.sdateformat = new SimpleDateFormat("hh时mm分ss秒");

g.drawString(this.sdateformat.format(new Date()),25,131);

Calendar rightnow = Calendar.getInstance();

int second = rightnow.get(Calendar.SECOND);

int minute = rightnow.get(Calendar.MINUTE);

int hour = rightnow.get(Calendar.HOUR);

//半径

int R_H = 20,R_M = 4,R_S = 4;

//时针的坐标

//x ====(9-3)[0-6] (3-9)[6-0]

//y ====(12-6)[0-6] (6-12)[6-0]

int H_x ;

int H_y;

//x

if(hour == 0)

{

hour = 12;

}

if( hour >= 3 && hour <= 9 )

{

H_x = R_H*Math.abs(hour - 9);

}

else

{

if(hour > 9)

{

H_x = R_H*Math.abs(hour - 9);

}

else

{

H_x = R_H*Math.abs(hour+3);

}

}

//y

if( hour >= 6 && hour <= 12 )

{

H_y = R_H*Math.abs(hour - 12); }

else

{

H_y = R_H*hour;

}

//分针的坐标

int M_x;

int M_y;

if(minute == 0)

{

minute = 60;

}

if( minute >= 15 && minute <= 45 )

{

M_x = R_M*Math.abs(minute - 45);

}

else

{

if(minute > 45)

{

M_x = R_M*Math.abs(minute - 45);

}

else

{

M_x = R_M*Math.abs(minute+15);

}

}

//y

if( minute >= 30 && minute < 60 )

{

M_y = R_M*Math.abs(minute - 60);

}

else

{

M_y = R_M*minute;

}

//秒针的坐标

int S_x;

int S_y;

if(second == 0)

{

second = 60;

}

if( second >= 15 && second <= 45 )

{

S_x = R_S*Math.abs(second - 45);

}

else

{

if(second > 45)

{

S_x = R_S*Math.abs(second - 45);

}

else

{

S_x = R_S*Math.abs(second+15);

}

}

//y

if( second >= 30 && second <= 60 )

{

S_y = R_S*Math.abs(second - 60);

}

else

{

S_y = R_S*second;

}

// g.drawString(String.valueOf(second),25,50); // g.drawString(String.valueOf(minute),25,60); // g.drawString(String.valueOf(hour),25,70);

// g.drawString(String.valueOf(H_x),25,80);

// g.drawString(String.valueOf(H_y),25,90); g.drawOval(0,0,120,120);//距离相差10像素

g.setColor(Color.darkGray);

g.drawString("9",5,65);

g.drawString("3",110,65);

g.drawString("12",55,15);

g.drawString("6",55,115);

g.drawString("1",80,20);

g.drawString("2",100,40);

g.drawString("4",100,90);

g.drawString("5",80,110);

g.drawString("7",30,110);

g.drawString("8",10,90);

g.drawString("10",10,40);

g.drawString("11",30,20);

g.setColor(Color.red);

g.drawLine(60,60,H_x,H_y);//前一个点表示起点,另一个表示终点

g.setColor(Color.blue);

g.drawLine(60,60,M_x,M_y);

g.setColor(Color.yellow);

g.drawLine(60,60,S_x,S_y);

}

public void start()

{

if(athread == null)

{

athread = new Thread(this);

athread.start();

}

}

public void stop()

{

if(athread != null)

{

athread.interrupt();

athread = null;

}

}

public void run()

{

while(athread != null)

{

repaint();

try

{

athread.sleep(1000);

}

catch(InterruptedException e)

{

}

}

}

}

import java.awt.*;

import java.applet.*;

import java.util.Date;

import java.text.*;

public class Clockpanel extends Applet implements Runnable {

Date timenow;

Clock myClock;

Thread clockthread = null;

//初始化Applet

public void init()

{

setBackground(Color.white);

}

//启动线程

public void start()

{

if(clockthread == null)

{

clockthread = new Thread(this,"clockthread"); clockthread.start();

}

}

//终止线程

public void stop()

{

clockthread.stop();

clockthread = null;

}

//线程体

public void run()

{

Thread current = Thread.currentThread();

while(clockthread == current)

{

try

Thread.sleep(1000);//刷新间隔为1000毫秒

}

catch(InterruptedException e)

{}

repaint();

}

}

public void paint(Graphics g)

{

timenow = new Date();

myClock = new Clock(timenow.getHours(),timenow.getMinutes(),timenow.getSeconds());

//条形时钟面板

g.drawString(timenow.toString(),25,400);

SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss a"); String msg = df.format(timenow);

g.clearRect(11,9,199,13);

g.drawRect(10,8,200,14);

g.drawString(msg,20,20);

//圆形时钟面板

myClock.show(g,100,200,100);

}

}

class Clock

{

int hour,minute,second;

Clock(int hrs, int min, int sec)//取时间

{

hour = hrs%12;

minute = min;

second = sec;

}

void show(Graphics g,int cx,int cy,int rad)//显示圆形时钟

{

int hrs_len = (int)(rad*0.5),min_len = (int)(rad*0.6),sec_len = (int)(rad*0.9); double theta;

int i;

//画时钟面板

g.drawOval(cx-rad,cy-rad,rad*2,rad*2);

for(i=1;i<=12;i++)

{

theta = (double)(i)/12*2.0*Math.PI;

int tx = (int)(cx + sec_len*Math.sin(theta));

int ty = (int)(cy - sec_len*Math.cos(theta));

g.drawString(""+i,tx,ty);

}

//画时、分、秒针

theta = (double)(hour*60*60 + minute*60 + second)/(12*3600.0)*2.0*Math.PI; drawNiddle(g,Color.blue,cx,cy,hrs_len,theta);

theta = (double)(minute*60 + second)/3600.0*2.0*Math.PI;

drawNiddle(g,Color.red,cx,cy,min_len,theta);

theta = (double)(second)/60.0*2.0*Math.PI;

drawNiddle(g,Color.green,cx,cy,sec_len,theta);

}

//表针函数

private void drawNiddle(Graphics g,Color c,int x,int y, int len, double theta) {

int ex = (int)(x + len*Math.sin(theta));

int ey = (int)(y - len*Math.cos(theta));

g.setColor(c);

g.drawLine(x,y,ex,ey);

}

}

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

*

*

import java.util.*;

import java.awt.*;

import java.util.*;

import javax.swing.*;

import java.awt.*;

import java.applet.*;

import java.awt.event.*;

import java.io.*;

import javax.swing.*;

class Paintclock extends JPanel implements Runnable { //private JButton Setalarmclock,offalarmclock;

//private JButton b2;

//private JButton b3;

private Image backgroundImage;

public int alarmhour;

public int alarmminute;

public int alarmsecond;

MyClock mc = new MyClock();

Set st = new Set();

public Thread thread = null;

public int hour;

public int minute;

public int second;

public int year;

public int month;

public int day;

public boolean Isclock = false;

//Image clockimage;

int clockX;

int clockY;

int x = 128;

int y = 128;

public String[] Weekdays = new String[] { "星期日", "星期一", "星期二", "星期三",

"星期四", "星期五", "星期六" };

Image off1;

Graphics offG;

public Paintclock() {

backgroundImage= new ImageIcon("../hgfhg/chahua1.jpg").getImage();

/*

Setalarmclock = new JButton("设置闹钟");// 设置

this.setLayout(null);

this.add(Setalarmclock);

Setalarmclock.setBounds(75, 250, 100, 25);

Setalarmclock.setBorder(null);

Setalarmclock.setVisible(true);

Setalarmclock.setOpaque(true);

*/

//this.setBounds(300, 200, 10,; 300);

//this.setVisible(true);

} //关闭闹钟按钮事件

public void offalarmclockactionPerformed(ActionEvent e) {

Isclock =false;

MyClock mc = new MyClock();

mc.Onalarm();

}

//设置时间按钮事件

/*

Setalarmclock.addActionListener(new

java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

SetalarmclockActionPerformed(evt);

}

});

*/

//按钮事件

public void SetalarmclockActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here:

Isclock = true;

/*

* ****************************************************

* 设置闹铃时间界面

*

*

*

* ************************************************

* */

JLabel T;

final JTextField sethour;

final JTextField setminute;

final JTextField setsecond;

JButton setyes,setno;

final JFrame Setclock = new JFrame();

// JButton ce = new JButton("hjgjhgj");

//ce.setBounds(30, 60, 60, 60);

// ce.setVisible(true);

//ce.setBorder(null);

//Setclock.add(ce);

Setclock.setTitle("设置闹钟");

Setclock.setVisible(true);

Setclock.setSize(200, 200);

Setclock.setLocation(600, 400);

Setclock.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

Setclock.setResizable(true);

//Paintsetclock Setpaint = new Paintsetclock();

//Setclock.add(Setpaint);

T= new JLabel("请设置时间:");

T.setBounds(10, 20, 100, 30);

T.setBorder(null);

T.setEnabled(true);

//T.setVisible(true);

Setclock.setLayout(null);

Setclock.add(T);

//时间设置

sethour = new JTextField("00");

setminute = new JTextField("00");

setsecond = new JTextField(" : ");

sethour.setBounds(50+10,50,20,20);

setminute.setBounds(80+10, 50, 20, 20);

setsecond.setBounds(68+10, 50, 20, 20);

sethour.setVisible(true);

setminute.setVisible(true);

setsecond.setVisible(true);

setsecond.setEditable(false);

Setclock.add(sethour);

Setclock.add(setminute);

Setclock.add(setsecond);

//按钮

setyes = new JButton("确定");

setyes.setBounds(30, 100,50, 30);

setyes.setBorder(null);

setyes.setVisible(true);

setno = new JButton("取消");

setno.setBounds(100, 100,50, 30);

setno.setBorder(null);

setno.setVisible(true);

Setclock.add(setno);

Setclock.add(setyes);

//按钮事件

setyes.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

Isclock =true;

alarmhour= Integer.valueOf(sethour.getText());

alarmminute= Integer.valueOf(setminute.getText());

// alarmsecond = Integer.valueOf(setsecond.getText());

Paintclock pc = new Paintclock();

pc.show();

Setclock.dispose();

MyClock mc = new MyClock();

mc.Offalarm();

// pc.Setalarmclock.setVisible(false);//隐藏设置时间按钮

// pc.offalarmclock.setVisible(true);//显示关闭按钮

System.out.println("闹钟时间"+alarmhour+":"+alarmminute);

}

});/* */

setno.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

Isclock =false;

Setclock.dispose();

}

});

}

//双数保证

// 线程启动

public void start() {

if (thread == null) {

//show();

thread = new Thread(this);

thread.start();

}

}

public void run() {

while (thread != null) {

//if(mc.alarmhour == hour|| mc.alarmminute == minutes||mc.alarmsecond==second)break;

repaint();

if(Isclock ){

if(alarmhour >9&&alarmminute <= 9)

mc.alarmtimeon.setText("(开) 闹钟:"+ alarmhour+" : "+'0'+alarmminute);

else if(alarmhour <=9&&alarmminute > 9)

mc.alarmtimeon.setText("(开) 闹钟:"+'0'+ alarmhour+" : "+alarmminute);

else if(alarmhour <=9&&alarmminute <= 9)

mc.alarmtimeon.setText("(开) 闹钟:"+'0'+ alarmhour+" : "+'0'+alarmminute);

else

mc.alarmtimeon.setText("(开) 闹钟:"+ alarmhour+" : "+alarmminute);

/*JTextField alarmtimeoff = new JTextField("(开) 闹钟:"+ "-"+" : "+"-");

alarmtimeoff.setVisible(true);

alarmtimeoff.setBounds(80, 220,200, 30);

alarmtimeoff.setBorder(null);

this.add(alarmtimeoff);*/

if(alarmhour== this.hour&&alarmminute==this.minute&& this.second == 0){

/*

* ************************************************************

*

* 时间到弹出界面

*

*

*

*

*

* **********************************************************

*/

final JFrame alarmjf = new JFrame("闹钟");

JLabel message = new JLabel("时间到!是时候展现真正的技术了!");

JButton Myes = new JButton("知道了");

JButton Mno = new JButton("关闭");

//message.setVisible(true);

//message.setEditable(false);

Myes.setVisible(true);

Mno.setVisible(true);

alarmjf.setVisible(true);

Myes.setLayout(null);

Mno.setLayout(null);

alarmjf.setLayout(null);

message.setBounds(50, 10, 250, 20);

Myes.setBounds(40, 40, 80, 30);

Mno.setBounds(200,40,80,30 );

alarmjf.setLocation(600, 300);

alarmjf.setSize(320, 100);

alarmjf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

alarmjf.setResizable(false);

alarmjf.add(message);

alarmjf.add(Myes);

alarmjf.add(Mno);

Myes.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

Isclock =false;

alarmjf.dispose();

}

});

Mno.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

Isclock =false;

alarmjf.dispose();

}

});

//JOptionPane.showMessageDialog(null, "闹钟时间已到", "闹钟",https://www.360docs.net/doc/8311539638.html,RMATION_MESSAGE);

Isclock =false;

}

}

else {

}

try {

Thread.sleep(1000);

} catch (Exception e) {

}

}

}

//绘图

public void paint(Graphics g1) {

super.paint(g1);

Graphics2D g = (Graphics2D) g1;

g.drawImage(backgroundImage, 0, 0, getWidth(), getHeight(), this);

g.setColor(Color.DARK_GRAY);

// 绘制表盘

int radius = 70;

g.setFont(new Font("Curier", 10, 15));

g.drawString("12", x - 8, y - 74);

g.drawString("3", x + radius + 4, y + 6);

g.drawString("6", x - 3, y + radius + 16);

g.drawString("9", x - radius - 12, y + 6);

int Sintemp = (int) (radius * Math.sin(Math.PI / 6)) - 2;

int Costemp = (int) (radius * Math.cos(Math.PI / 6)) - 2;

g.drawString("1", x + Sintemp - 1, y - Costemp - 6);

g.drawString("2", x + Costemp + 4, y - Sintemp - 2);

g.drawString("4", x + Costemp + 4, y + Sintemp + 12);

g.drawString("5", x + Sintemp, y + Costemp + 20);

g.drawString("7", x - Sintemp - 10, y + Costemp + 20);

g.drawString("8", x - Costemp - 14, y + Sintemp + 12);

g.drawString("10", x - Costemp - 20, y - Sintemp - 2);

g.drawString("11", x - Sintemp - 14, y - Costemp - 6);

g.setColor(Color.RED);

g.fillOval(x - 4, y - 4, 8, 8);

for (int i = 0; i < 60; i++) {

clockX = (int) (70 * Math.sin(Math.PI / 30 * i)) + x;

clockY = (int) (y - 70 * Math.cos(Math.PI / 30 * i));

if (i % 5 == 0) {

g.setColor(Color.black);

g.fillOval(clockX - 3, clockY - 3, 6, 6);

} else {

g.setColor(Color.cyan);

g.fillOval(clockX - 2, clockY - 2, 4, 4);

}

}

Calendar calCurrent = Calendar.getInstance();

// 获取当前时间

int weekday = calCurrent.get(Calendar.DAY_OF_WEEK);

day = calCurrent.get(Calendar.DATE);

month = calCurrent.get(Calendar.MONTH) + 1;

year = calCurrent.get(Calendar.YEAR);

多功能数字钟——时分秒

电子电路综合实验设计报告 ——多功能数字钟的设计

目录 目录 (2) 一.实验目的 (3) 二.设计要求 (3) 三.总体设计概要 (3) 四.单元电路设计 (4) 4.1振荡器电路 (4) 4.2分频器电路 (7) 4.3 时间计时单元的设计 (9) 4.4译码与显示电路的设计 (13) 4.5校时电路的设计 (15) 4.6定时控制电路的设计 (17) 4.7方案一整体电路图 (18) 4.8 模块接线图及仿真结果 (18) 4.8.1用EWB软件绘制的单元接线图 (18) 4.8.2单元模块仿真 (21) 4.8.3整体仿真 (22) 五.测试结果分析 (23) 六.面包板 (23) 七.设计过程中出现的问题 (25) 八.实验用到的器件 (25)

一.实验目的 (1)加深对数字电子技术的理论知识的理解,结合实践进一步加深对单元电路基本功能的掌握和应用。 (2)通过具体数字电路模型,掌握一种常用电子电路仿真的软件,使学生能利用所学理论知识完成实际电路的设计、仿真和制作。 (3)掌握数字钟的基本知识以及所用数字钟相关芯片的功能及使用方法。 (4)了解面包板结构及其接线方法。 (5)熟悉数字钟电路的设计与制作。 二.设计要求 本课题是设计一个多功能数字钟,准确计时,以数字形式显示,时、分、秒的时间;小时的计时要求为“12翻1”,分和秒的计时要求为60进位。三.总体设计概要 数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定。通常使用石英晶体振荡器电路构成数字钟。数字钟电路系统的组成方框图如下。

数字时钟正确代码

module clock(CLK,RST,EN,S1,S2,spk,HOURH,HOURL,MINH,MINL,SECH,SECL); input CLK,RST,EN,S1,S2; output spk; output[3:0] HOURH,HOURL,MINH,MINL,SECH,SECL; reg spk; reg[3:0] SECL,SECH,MINL,MINH,HOURL,HOURH; always @(posedge CLK or negedge RST) if(!RST) begin SECL<=0;SECH<=0;MINL<=0;MINH<=0;HOURL<=0;HOURH<=0; end //系统复位 else if(EN) //EN为低电平时时钟暂停 begin if(!S1) //调节小时 begin if(HOURL==9) begin HOURL<=0; HOURH<=HOURH+1; end

else begin if(HOURH==2&&HOURL==3) begin HOURL<=0;HOURH<=0; end else HOURL<=HOURL+1; end end else if(!S2) //调节分钟 begin if(MINL==9) begin MINL<=0; if(MINH==5) MINH<=0; else MINH<=MINH+1; end

else MINL<=MINL+1; end else if(SECL==9) //时钟正常跳动状态 begin SECL<=0; if(SECH==5) begin SECH<=0; if(MINL==9) begin MINL<=0; if(MINH==5) begin MINH<=0;

单片机电子时钟程序

程序开始 ORG 0000H AJMP MAIN ORG 000BH AJMP CLOCK ORG 0100H 主程序开始: MAIN: MOV SP,#70H MOV 6EH,#00H ;显示缓存器初始值设定 MOV 6DH,#00H MOV 6CH,#00H MOV 6BH,#00H MOV 6AH,#00H MOV 69H,#00H MOV 50H,#00H ;秒,分,小时初始值设定 MOV 51H,#00H MOV 52H,#00H MOV DPTR,#0F003H ;8255端口定义,PA,PB为输出 MOV A,#80H MOVX @DPTR,A MOV 4FH,#00H MOV TMOD,#01H ;定时器T0及TL0,TH0初始值设定 MOV TH0,#3CH MOV TL0,#0B0H SETB EA ;开总中断 SETB ET0 ;开定时器中断 SETB TR0 循环程序开始,并显示时间: START: MOV A,50H LCALL BCD MOV 6AH,A ;显示秒十位 MOV 69H,B ;显示秒个位 MOV A,51H LCALL BCD MOV 6CH,A ;显示分十位 MOV 6BH,B ;显示分个位 MOV A,52H LCALL BCD ;调用十六进制至BCD码转换子程序 MOV 6EH,A MOV 6DH,B LCALL DIS ;调用显示子程序 LCALL KEY ;调用键盘子程序 AJMP START ;主程序结束

BCD: MOV B,#0AH ;BCD码转换子程序 DIV AB RET CLOCK: PUSH ACC ;保护现场 PUSH PSW CLR TR0 MOV TH0,#3CH ;定时参数重新设置 MOV TL0,#0B0H SETB TR0 INC 4FH ;100ms单元加1 MOV A,4FH CJNE A,#0AH,D0 ;100ms单元=10,就秒单元加1 MOV 4FH,#00H ;100ms单元内容清0 MOV A,50H ADD A,#01H ;秒单元加1 MOV 50H,A CJNE A,#3CH,D0 ;秒单元内容=60,则秒单元清0 MOV 50H,#00H MOV A,51H ;分,时单元代码 ADD A,#01H MOV 51H,A CJNE A,#3CH,D0 MOV 51H,#00H MOV A,52H ADD A,#01H LCALL RING ;报警子程序 MOV 52H,A CJNE A,#18H,D0 MOV 52H,#00H D0: POP PSW ;出栈,退出中断子程序 POP ACC RETI RING: MOV R3,A CLR P1.0 LCALL DELL50 SETB P1.0 LCALL DELL50 DJNZ R3,RING RET 键盘子程序: KEY: JB P1.7,MSET ;秒设定子程序 LCALL DELL ;防抖动延时 JB P1.7,MSET INC 50H

JAVA课程设计钟表(含代码)

Java程序课程设计 任务书 钟表的设计与开发 1、主要内容: 创建一个钟表。 借助swing类和接口内部类的实现,在本程序中以实现Runnable接口内部类的形式创建多线程对象。 Runnable接口只定义了一个run()方法,所以调用start和sleep()方法时,必须创建Thread实例化对象。Interrupt()方法的作用是中断线程。 其作用方式是:多线程对象.interrupt()。 2、具体要求(包括技术要求等): 系统的功能要求: 1.可以记录时间的钟表。 2.熟悉JAVA中swing的组件运用,基本工具的熟练掌握。 学习并掌握以下技术:Java等。 熟练使用以下开发工具:JCreator + JDK 1.6.0_02 等实现系统上述的功能。 3、进度安排: 12月28日~ 12月29日:课程设计选题,查找参考资料 12月29日~ 1月2日:完成程序代码的编写 1月2日~ 1月3日:系统测试与完善 1月4日~ 1月5日:完成课程设计报告,准备答辩 4、主要参考文献 [1]张帆.Java范例开发大全[M].北京:清华大学出版社,2010:0-831. [2]耿祥义,张跃平.Java大学实用教程[M].北京电子工业出版社,2008:213-216

摘要 随着经济全球化的发展,推动生活节奏的加快,也给时间赋予了更重要的意义。基于方便人们更好的掌握时间,我们小组设计出了这个小时钟。 本时钟是一个基于Java语言设计而成的一个小程序,目的是显示时间,并且能调准时钟。整个程序从符合操作简便、界面友好、灵活使用的要求出发,完成调用、调整的全过程。 本课程设计报告介绍了时钟的构成,论述了目标功能模块;给出了时钟设计的步骤,程序主要所用到的Swing组件以及graphics方法。 关键词:时钟,

数字时钟完整版

设计报告撰写要求 1.设计报告,报告中要包括以下几部分内容: (1)封皮:设计题目,姓名、学号,班级,授课教师姓名【格式见后面附表】 (2)写明设计任务 (3)写出设计题目的原理框图; (4)完成设计功能所选用的器件,及相应各器件的引脚排列图和功能表;(5)画出综合逻辑电路图; (6)用仿真软件进行调试的调试过程(即:在调试时遇到了哪些实际问题,你是如何解决的); (7)各人在本次设计中的体会和收获。 正文小四号宋体,1.5倍行间距。

课程设计报告 学生姓名:学号: 学院:电气工程学院 班级: 电自1116 题目: 数字时钟设计 指导教师:张光烈职称: 2013 年 7月 4 日

一.设计要求 多功能数字钟具有时间显示、闹钟设置、报时功能、校正作用。走时准确、显示直观、精度、稳定等优点。电路装置十分小巧,安装使用也方便。同时在日期中,它以其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱。数字钟广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。 数字钟已成为我们生活中不可缺少的必须品,广泛的应用于家庭以及办公室等公共场所。给我们生活、学习、工作、娱乐带来了极大的方便。 本次设计主要是采用555定时器提供定时脉冲,74160集成块作为计时模块,8段数码显示管作为显示工具。应用电子工作平台软件来设计和仿真多功能数字钟设计,并通过硬件实验的调试来相互验证实际结果。 由振荡器输出稳定的高频脉冲信号作为时间基准,经分频振荡器输出标准的秒脉冲,秒计数器满60向分计数器进位,分计数器满60向小时进位,小时计数器按“12翻1”规律计数,计数器经译码器送到显示器;计数出现误差可用校时电路进行校时、校分、校秒。并具有可整点报时与定时闹钟的功能。 设计一种多功能数字钟,该数字钟具有基本功能和扩展功能两部分。其中,基本功能部分的有准确计时,以数字形式显示时、分、秒的时间和校时功能。扩展功能部分则具有:定时控制、、自动报整点时数和触摸报正点的功能。数字钟的电路也是由主体电路和扩展电路两部分构成,在电路中,基本功能部分由主体电路实现,而扩展功能部电路实现。这两部分都有一个共同特点就是它们都要用到振荡电路提供的1Hz脉冲信号。在计时出现误差时电路还可以进行校时和校分,为了使电路简单所设计的电路不具备校秒的功能。并且要用数码管显示时、分、秒,各位均为两位显示,扩展部分要有相应的响应电路。分则由扩展能按时钟功能进行小时、分钟、秒计时,能调时调分,能整点报时,使用3个2位数码管显示。 总体设计

时钟flash代码

精美的时钟 我们用Flash来制作一个精美的小时钟,你可以把它拖到电脑屏幕的一角,使工作中的你可以方便的查看当前时间. 1. 首先启动Flash,新建一个影片,设置影片舞台大小和背景颜色。 2. 首先制作时钟里的时针.新建一个影片剪辑元件,命名为hours,进入元件的编辑区后,使用矩形工具绘制一个细长的无边框的矩形,填充色为灰色,颜色代码为#999999。(做好后,应竖直摆放,居中,下端对齐中心,分针、秒针元件照此行事。) 3. 然后制作时钟里的分针.新建一个影片剪辑元件,命名为minutes,进入元件的编辑区后,使用矩形工具绘制一个细长的无边框的矩形,填充色为深灰色,颜色代码为#666666。 4. 最后制作时钟里的秒针.新建一个影片剪辑元件,命名为seconds,进入元件的编辑区后,使用矩形工具绘制一个细长的无边框的矩形,填充色为红色,颜色代码为#FF0000。 5. 新建一个图形元件,命名为outeregde,进入元件的编辑区后,使用前面实例中介绍的方法制作一个圆环,填充色为灰色,颜色代码为#999999,用作时钟的边框。 6. 回到主场景中,将影片默认的图层Layer1重命名为outeredge,然后将元件outeregde拖到舞台上,调整其位置到舞台的中央. 7. 新建一个图层numbers,使用文本工具分别输入从1到12这12个数字,并绕着时钟边框排列其位置。 8. 新建一个图层clockhands,分别将元件Hours, minutes和Seconds拖到场景中,然后使用椭圆工具绘制一个黑色无边框的正圆,将其放置在表盘的中心,然后分别将时针,分针和秒针放到表盘的中心,使三个表针的下部和中心位置对齐。 9. 最后添加一个图层命名为Action,设置控制时钟运行的Action脚本. (其余各图层均延至第二帧) 在第1帧添加如下Action: time = new Date();// 定义time为Date日期对象 hours = time.getHours();// 取得当前系统的小时,并赋给变量hours minutes = time.getMinutes();// 取得当前系统的分钟,并赋给变量minutes seconds = time.getSeconds();// 取得当前系统的秒钟,并赋给变量seconds if (hours>12) {

基于51单片机的电子时钟设计源程序

#include unsigned char DispBuf[6]; //时间显示缓冲区 unsigned char Disdate[6]; //日期显示缓冲区 unsigned char DisSec[6]; //秒表缓冲区 struct //设定时间结构体 { unsigned char Hour; unsigned char Min; unsigned char Sec; }Time; struct //设定日期结构体 { unsigned char Year; unsigned char Month; unsigned char Days; }Date; struct //设定毫秒结构体 { unsigned char Minite; unsigned char Second; unsigned char MilliSec; }Millisecond; unsigned char point=0; unsigned char point1=0; unsigned char point2=0; unsigned char Daymount; unsigned char Daymount1; unsigned char T0_Int_Times=0; //中断次数计数变量 unsigned char Flash_flag=0; //闪烁标志,每半秒闪烁 unsigned char Flash_flag1=0; //闪烁标志,每半秒闪烁 unsigned char DisPlay_Back=0; //显示缓冲区更新备份,如果显示缓冲区更新则跟闪烁标志不一致 unsigned char DisPlay_Back1=0; //显示缓冲区更新备份,如果显示缓冲区更新则跟闪烁标志不一致 unsigned char i,j; unsigned char SetMillisecond; //启动秒表 code unsigned char LEDCode[]={0x01,0xd7,0x22,0x82,0xc4,0x88,0x08,0xc1,0x00,0x80}; //数码管显示代码 code unsigned char ErrorLEDCode[]={0x01,0xe7,0x12,0x82,0xc4,0x88,0x08,0xc1,0x00,0x80};//绘制错误图纸的数码管显示代码 void DisPlayBuf(); void ChangeToDispCode(); void ChangeToDispCode1(); void changedate(); // 调日期 void displaydate(); // 显示日期 void makedays(); //确定每个月的日期 void runSec();

Java实现电子时钟

项目效果图: 源代码: import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; import java.awt.image.BufferedImage; import java.awt.EventQueue; import java.util.Calendar; import java.util.GregorianCalendar; import javax.swing.JFrame; import javax.swing.JPanel; /* author: 蒋冰 */ public class MoveDraw extends JFrame{ private Draw draw = new Draw(); public static void main(String[] args){ EventQueue.invokeLater(new Runnable() { public void run() { try { MoveDraw frame = new MoveDraw(); frame.setVisible(true);

} catch (Exception e) { e.printStackTrace(); } } }); } public MoveDraw(){ super(); setTitle("动画"); setBounds(400,300,400,300); add(draw); Thread thread = new Thread(draw);// 创建线程对象 thread.start();// 启动线程对象 } class Draw extends JPanel implements Runnable{ Calendar calendar = new GregorianCalendar(); int hour = calendar.get(Calendar.HOUR); int minute = calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND); int year = calendar.get(Calendar.YEAR); int mouth = calendar.get(Calendar.MONTH); int day = calendar.get(Calendar.DAY_OF_MONTH); int week = calendar.get(Calendar.DAY_OF_WEEK); String date = year+"-"+mouth+"-"+day; String weeks[] = new String[]{"星期天","星期一","星期二","星期三","星期四","星期五","星期六"}; double theta = second * (2 * Math.PI)/60 ; double theta1 = (minute * (2 * Math.PI) + theta)/60; double theta2 = (hour*(2 * Math.PI) + theta1)/12; public void paint(Graphics g){ Graphics2D g2 = (Graphics2D) g; g2.clearRect(0, 0, 400, 300); g2.translate(draw.getWidth()/2, draw.getHeight()/2); g2.setColor(Color.blue); Font font = new Font("楷体",Font.ROMAN_BASELINE ,14); g2.setFont(font); g2.drawString(date, -25, 30); g2.drawString(weeks[week-1]+"", -15, 50); g2.setColor(Color.black); for(int i=1; i<=12; i++){ double theta = i*2*Math.PI/12;

数字钟在单片机上的实现(汇编语言)

武汉大学电子信息学院电子系统综合设计课程论文数字钟在单片机上的实现(汇编语言) 专业: 年级: 作者:_____________ _____________ 指导教师: 2012年06 月29 日

目录 1 作品的背景与意义 (1) 2 功能指标设计 (1) 2.1设计要求 (1) 2.1.1 基本要求 (1) 2.1.2 拓展要求 (1) 2.2 功能设计方案 (1) 3 作品方案设计 (2) 3.1总体方案的选择 (2) 3.2模块划分及分析 (3) 3.3 单模块设计流程图 (3) 4 模块源程序 (7) 5 系统测试 (35) 测试数据: (36) 6 心得体会 (36)

1 作品的背景与意义 数字钟是一种用数字电路技术实现时、分、秒计时的钟表。与机械钟相比具有更高的准确性和直观性,具有更长的使用寿命,已得到广泛的使用。数字钟的设计方法有许多种,例如可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟,还可以利用单片机来实现电子钟等等。这些方法都各有其特点,其中利用单片机实现的电子钟具有编程灵活,以便于功能的扩展。 2 功能指标设计 2.1设计要求 2.1.1 基本要求 1.设计一个精确的1秒定时器; 2.根据1秒定时器,设计一个带小时、分钟、秒的时钟,并将小时、分钟、秒显 示在LED上; 3.设计小时、分钟、秒的修改按键,可分别调整小时、分钟、秒(按键设计参考 电子表)。 2.1.2 拓展要求 1.增加小时、分钟、秒的键盘直接修改功能; 2.设计闹钟功能,最多支持5个闹钟,可分别查看和修改闹钟时间,可分别设置 闹钟开关; 3.增加万年历功能。 2.2 功能设计方案 1. 实现正常走时(秒-分-时-日-月-年进位); 2. 能够设置时间和日期; 3. 能够自动区分平闰年和大小月及2月; 4. 具有5个闹钟及其设置功能; 5. 在任何设置状态下,修改位会闪烁显示。

模拟时钟源代码

void CTest13_4Doc::m_TickAdd() { this->m_sec ++; if(this->m_sec == 60) { this->m_min ++; this->m_sec = 0; } if(this->m_min == 60) { this->m_hour ++; this->m_min = 0; } if(this->m_hour>= 12) { this->m_hour -= 12; } } void CTest13_4Doc::M_MoveClockHands() { intpx, py; double degree; //设置秒针的终点坐标 degree = this->m_sec * 6 - 90; px = cos((degree/180.0)*PI)* sLen + 250; py = sin((degree/180)*PI)* sLen + 250; this->m_secEndPoint.x = px; this->m_secEndPoint.y= py; //设置分针的终点坐标 degree = this->m_min * 6 - 90; px = cos((degree/180.0)*PI) * mLen + 250; py = sin((degree/180)*PI) * mLen + 250; this->m_minEndPoint.x = px; this->m_minEndPoint.y = py; //设置时针的终点坐标 degree = this->m_hour * 30 - 90; px = cos((degree/180.0)*PI) * hLen + 250; py = sin((degree/180.0)*PI) * hLen + 250; this->m_hourEndPoint.x = px;

java的时间处理续计算java时间)

1. java计算时间依靠1970年1月1日开始的毫秒数. 2. date类的构造函数date()返回代表当前创建的时刻的对象。date的方法gettime()返回一个long值在数值上等于1970年1月1日之前或之后的时刻。 3. dateformat类用来转换date到string,反之亦然。静态方法getdateinstance()返回dateformat的缺省格式;getdateinstance(dateformat.field)返回指定的dateformat对象格式。format(date d)方法返回string表示日期,例如"january 1,2002."反过来,parse(string s)方法返回以参数字符串表示的date对象。 4. format()方法返回的字符串格式根据不同地区的时间设置而有所不同。 5. gregoriancalendear类有两个重要的构造函数:gregoriancalerdar(),返回代表当前创建时间的对象;gregoriancalendar(int year,int month,int date)返回代表任意日期的对象。gregoriancalendar类的gettime()方法返回日期对象。add(int field,int amount)方法通过加或减时间单位,象天数,月数或年数来计算日期。 gregoriancalendar和时间 两个gregoriancalendar的构造函数可以用来处理时间。前者创建一个表示日期,小时和分钟的对象: gregoriancalendar(int year, int month, int date, int hour, int minute) 第二个创建一个表示一个日期,小时,分钟和秒: gregoriancalendar(int year, int month, int date, int hour, int minute, int second) 首先,我应该提醒一下,每一个构造函数需要时间信息中的日期信息(年,月,日)。如果你想说2:30 p.m.,你必须指出日期。 同样,每一个gregoriancalendar构造函数创建一个在时间上使用毫秒计算的对象。所以,如果你的构造函数只提供年,月,日参数,那小时,分钟,秒和毫秒的值将被置0. dateformat和时间 你可以使用静态方法getdatetimeinstance(int datestyle,int timestyle)来建立dateformat对象来显示时间和日期。这个方法表明你想要的日期和时间格式。如果你喜欢使用缺省格式,可以使用getdatetimeinstance()来代替它。 你可以使用静态方法gettimeinstance(int timestyle)创建dateformat对象来显示正确的时间。下面的程序示范了getdatetimeinstance()和gettimeinstance()怎样工作: import java.util.*; import java.text.*; public class apollo { public static void main(string[] args) { gregoriancalendar liftoffapollo11 = new gregoriancalendar(1969, calendar.july, 16, 9, 32); date d = liftoffapollo11.gettime(); dateformat df1 = dateformat.getdatetimeinstance(dateformat.medium, dateformat.medium); dateformat df2 = dateformat.gettimeinstance(dateformat.short); string s1 = df1.format(d); string s2 = df2.format(d);

电子钟显示时分秒c语言程序

/*电子钟显示时分秒*/ #include sbit INCH=P3^2; //小时加1 sbit INCM=P3^3; //分钟加1 #define LCDP P0 // 定义LCM 接至P0 sbit RS = P2^7; // 暂存器选择位元(0:指令,1:资料) sbit RW = P2^6; // 设定读写位元(0:写入,1:读取) sbit E = P2^5; // 致能位元(0:禁能,1:致能) sbit BF = P0^7; // 忙碌检查位元(0:不忙,1:忙碌) char count=20; // 中断次数计数,20次*50ms=1秒 char time0[]="CLOCK"; // 显示时间阵列(第1行) char time[11]; // 显示时间阵列(第2行) bit ampm=1; // 0:上午(am),1:下午(pm),初值下午 char hour=11; // 声明时,初值为11点 char minute=59; // 声明分,初值为59分 char second=50; // 声明秒,初值为50秒 void transfer(void); // 转换时分秒至time阵列中 void write_inst(char); // 写入指令函数 void write_char(char); // 写入字元函数 void write_pat(void); // 写入自建字型函数 void check_BF(void); // 检查忙碌函数 void init_LCM(void); // 声明LCM初始设定函数 void delay(int); //去抖函数 main() { char i; init_LCM(); // 初始设定 IE=0X87; // T0、INT0、INT1中断使能TMOD=0x01; // T0设为MODE1 TH0=(56636-50000) / 256; // 填入计时量之高位元组 TL0=(56636-50000) % 256; // 填入计时量之低位元组 TR0=1; // 启动Timer 0 write_inst(0x85); // 指定第1列位置 for (i=0;i<5;i++) write_char(time0[i]); //显示CLOCK while(1) { transfer(); // 转换时分秒至time阵列中write_inst(0xC0); // 指定第2列位置 for (i=0;i<11;i++) write_char(time[i]);// 显示时间 } } //转换函数 void transfer(void)

电子时钟的设计及程序

电子时钟的设计及程序 一.设计目的: 1.理解掌握定时/计数器和中断的使用方法。 2.掌握微机常用的输入输出方式及接口技术。 3.掌握一定的汇编语言知识,培养自己的动手操作能力。 4.学习程序设计的基本思路和方法。 二.程序内容: 第一部分:定义显示界面。 第二部分:调用系统时间,并将调用的用二进制表示的时间数转换成ASCII码,并将时间数存入内存区。 第三部分:将存在系统内存区的时间数用显示字符串的形式显示出来。 第四部分:获取键盘的按键值,以ESC键退出系统返回DOS。三.程序设计原理: 首先在数据段开辟一显示缓冲区,用来存储系统时间。调用DOS中断,返回系统时间,并将来返回的二进制时间转换成ASCII码,方便时间显示时的调用。分别将来小时数、分钟数、秒数存入显示缓冲区,并最终存入一结束字符号’$’。调用DOS字符串显示功能将时间显示 出来。并调用屏幕I/O中断,定位光标的开始位置,结合着将时间显示在我们预先定义好的位置上。由于获取了的系统时间不会自动刷

新,所以我们要设计成刷新的方式来不断获取系统的时间,这样就形成了会跳动的电子钟了。调用延时TIME延时中断服务程序,累加到存放秒值的寄存器DL中,并进行十进制调整。在累加的过程中,不断地对时、分、秒值进行比较,秒不能等于60,分不能等于60,时不能等于24。秒等于限制值时,则使秒值为0分值加1;分等于限制值时,则使分值为0时值加1;时等于限制值时,则使时值为0;时、分、秒值都不超过限制值时,就转显示屏输出。时间显示的刷新要配合延时程序进行,为了得到良好的显示效果,延时程序要尽量接近1秒,但又不能超过一秒,所以本程序调用了一段较精确的时间延迟程序。利用BIOSS设计窗口,选择适当的背景和前景等,使屏幕显示更加完美。程序一旦进入运行,就将不间断地在显示屏显示时间,要想程序停止运行,可同时在键盘按下ESC键返回DOS系统。四.程序流程图如下: DATA SEGMENT ;设置数据段 BUF1 DB 'THE TIME IS NOW: $' BUF5 DB ' @@@@@ ^^^^^^^ @@@@@@ $' BUF6 DB ' &&&&&& ####### &&&&&& $' BUF7 DB ' 00 >o o < 00 $' BUF8 DB ' 00 (::) 00 $' BUF9 DB ' 00 ~~ 00 $' BUF10 DB ' 00 !! 00 $' BUF3 DB 'CLASS:040402206 $' BUF4 DB 'NAME:hu ling wei $' BUF2 DB 10 DB 10 DUP(?) DATA ENDS STACK SEGMENT STACK ;设置堆栈段

JAVA时钟程序

课 程 设 计 2014 年 6 月 15 日 教 学 院 计算机学院 课程名称 JA V A 课程设计 题 目 时钟程序 专 业 13应用技术 班 级 应用技术(1)班 姓 名 张琳 同组人员 刘敏 陈碧菲 周丹丹 田琼玲 指导教师 伍红华

目录 一.问题分析和任务定义 ..................................... 错误!未定义书签。二.逻辑设计.......................................................... 错误!未定义书签。三.详细设计.......................................................... 错误!未定义书签。四.程序编码.......................................................... 错误!未定义书签。五.程序调试与测试 ............................................. 错误!未定义书签。六.结果分析.......................................................... 错误!未定义书签。 七. 附录 (8) 八. 参考文献 (9)

一.问题分析和任务定义 1.问题分析 此次课程设计的题目为简单的小时钟程序设计,通过做巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK等开发工具的运用,拓宽常用类库的应用。 运用了鼠标的监听和事件的监听以及侦听的技术来时钟的功能。 时钟可以分为:电子时钟,数字时钟。 其中数字时钟包括表盘,数字,指针。用JPanel类来指定布局管理器,同时新增一个功能也是设计需求的功能,可以随时的调时间,运用到鼠标和按钮的监听效果来完成调时间的功能。 2.任务定义 基本功能:打开java工作界面,有很明显的数字时钟在界面上,并且指针在走动,数字钟的显示以本地系统时间而定,一秒钟跳动一次,若本地系统时间发生改变,则数字钟的时、分、秒也随着改变,左上角并拥有与电脑同步的时间日期与星期用数字直接显示出来。 基本实现:定义窗口类继承import javax.swing.JFrame;类并实现ActionListener接口,在窗口类中定义成员变量,用于表示窗口中菜单、文本框,定义成员方法actionPerformed,用于事件处理。 3.任务分工 (1)图形界面设置关闭窗口(田琼玲) (2)显示时钟桌面(陈碧菲) (3)实现接口 runnable的方法run,用来刷新时分秒三指针的度数(刘敏) (4)方法重写绘制钟面各元素(张琳) (5)将电脑时间日期进行同步,并显示出来,用switch语句实现多分支选择结构(周丹丹)

单片机控制时钟芯片DS12887的时分秒定时系统设计.

目录 前言 (4) 设计简介 (4) 总体设计方案 (5) 一、系统基本工作原理 (5) 二、系统设计框图 (5) 硬件系统设计 (6) 一、芯片简介 (6) 1、单片机89C51 (6) 2、时钟芯片DS12887 (9) 3、液晶LCD1602 (11) 二、总体电路设计 (12) 软件系统设计 (13) 1、程序流程图 (13) 2、程序代码 (14) 系统的仿真与调试 (32) 心得体会 (33) 参考文献 (33)

前言 数字时钟已经成为人们日常生活中必不可少的必需品,广泛应用于个人家庭以及办公室公共场所,给人们的生活、学习、工作、娱乐带来了极大地方便。由于数字集成电路技术的发展和采用了新进的石英技术,是数字钟具有走时准确、性能稳定、携带方便等优点。它还用于计时、自动报时等各个领域。尽管目前市场上已有现成的数字集成电路芯片出售,价格便宜,使用也方便,但鉴于单片机的定时器功能也可以完成数字中电路的设计,因此进行数字钟的设计是必要的。在这里我们将以学过的比较零散的电路知识有机的、系统的结合起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力。 文中详细论述了以89C51单片机位核心,应用新型时钟芯片DS12887的数字时钟设计原理以及使用的各种芯片的介绍,阐明了本实例所使用的设计方案、详细的电路图以及程序代码。 设计简介 本设计是以89C51单片机为核心,结合新型实时时钟芯片DS12887,并利用液晶LCD1602显示的数字时钟。在液晶上显示出年、月、日、以及周几、时、分、秒等信息。同时辅以硬件电路,实现校时、定时、闹钟等功能。同时因为DS12887本身的特点,本设计还具有掉电后继续计时的功能。另外,它的计时周期为24小时,采用24小时制的计时方式,显示满刻度为23时59分59秒,计时范围为2100年前100年,这也是DS12887的计时范围。本设计的数字时钟,可以通过按键来设置时间,包括年、月、日、周几等信息,同时,也可以通过按键来设置闹钟的时间,不过与设置正常时间相比,仅限于设置时、分、秒。每按一次按键,蜂鸣器就会发出很短的滴声,当达到设定的时间时,数字时钟会也发出声音,来提醒使用者时间到了。以上是本设计的大致功能和简介。

电子时钟代码

西安邮电大学 硬件课程设计报告 院系名称:计算机学院 学生姓名:王哲 指导老师:杨锐 班级:0901 学号: 时间:

porta equ1400h portb equ1401h portc equ1402h portcontrol equ1403h timer0equ1440h timer1equ1441h timer2equ1442h timer_control equ1443h ;------------------------------------------------------------- data segment ledbuf db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码 datbuf db00h,00h,00h,00h;存放要显示4位 copybuf db00h,00h,00h,00h data ends ;-------------------------------------------------------------- code segment assume cs:code,ds:data ;--------------------------------------- start:mov ax,data mov ds,ax call read_cmos call p8254 mov dx,portcontrol;将8255设为A\B口输出,A为段码输出,B为位码输出 mov al,10000001B out dx,al ;--------------------------------------------------------------- loop2:call disp mov dx,1402h in al,dx mov bl,al and bl,02h test bl,02h jnz reset mov bh,al and bh,04h test bh,04h

电子时钟程序

+-+ 机电工程系 课程设计报告题目: 专业: 班级: 学号: 姓名: 同组人: 指导老师: 答辩日期:

一、绪论 当今世界但片机以飞快的速度在发展,了解和掌握单片机技术是我们机电系学生应该学习的课程之一,基于本学期对单片机的学习,现在对单片机语言所写出的电子时钟展开说明,现在生活很多东西都是离不开电子了,许许多多的东西都被电子产品所代替,时钟就是一种在我们生活之中很普通的电子产品,它虽然在单片机机之中算是一种比较简单的东西,但它在我们生活在是普遍存在的,它能让我们对更多的电子产品有所了解,所以我们想要了解更多的电子产品,电子时钟也是我们应该了解的,所以我们对电子时钟展开课程设计,并对其工作原理及工作方式进行了解,这样能让我们初步学习到有关的电子产品。设计过程中我们将对生活中电子时钟的工作方式进行了解,接着我们要在学过的单片机语言基础上,对电子时钟这样的工作方式进行单片机解释,有单片机语言解释,为什么电子时钟要这样工作,接着我们有汇编语言写出电子时钟程序,在报告中我们将对单机汇编语言的有关语句进行解释,并对单片机的电路板的工作原理进行解释,并对电子时钟工作方式进行说明。 二、对本课程设计的分析 2.1 工作原理 当电子时钟上电时候将在电子时钟上显示23-30-00,带表现在是时间,电子时钟将按正常的时间一样走动,有对应的四个按钮用来调整时钟所对应的时间,第一个按钮对应设置按钮,当它按下去时候,时钟将停止走动,这时候将进入调时间模式,第二个按键用来选择调的是时还有分还秒,第三个按键用来加运算的,

第四个按键用来减运算的。 2.2 P3口对应的按键操作功能系统框图 开始 P3.0是否按 下 P3.1是否按 下 YES P3.2是否按下 P3.3是否按下NO P3.3是否按下21H 是否为几 YES P3.2是否按下P3.3是否按下P3.2是否按下NO 时加一 YES NO 时减一 是否为一 YES NO 分加一 分减一 是否为2NO YES YES NO 秒加一 秒减一 说明:以上框图是系统版上对应的四个按键对电子时钟的操作功能,在什么情况下,对应的按键实现什么样的功能。 三、 主要电路模块的实现方案比较及选择

相关文档
最新文档