这是一个C得时钟程序 你看明白思想 就好说汇编的语句了
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
sbit dula=P3^7
sbit L1=P2^0
sbit L2=P2^1
sbit L3=P2^2
sbit key1=P3^0
sbit key2=P3^1
sbit key3=P3^2
sbit key4=P3^3
uchar aa
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
}
uchar nummiao,numfen,numshi,t0
void delayms(uchar xms)
{
uchar i,j
for(i=xmsi>0i--)
for(j=110j>0j--)
}
void init()
{
TMOD=0x11
TH0=(65536-50000)%256
TL0=(65536-50000)/256
EA=1
ET0=1
}
void display(uchar nummiao,numfen,numshi)
{
uchar shishi,geshi,shifen,gefen,shimiao,gemiao
shimiao=nummiao/10
gemiao=nummiao%10
shifen=numfen/10
gefen=numfen%10
shishi=numshi/10
geshi=numshi%10
dula=1
P0=table[shimiao]
dula=0
L1=0
L2=1
L3=1
delayms(5)
dula=1
P0=table[gemiao]
dula=0
L1=1
L2=1
L3=1
delayms(5)
dula=1
P0=0x40
dula=0
L1=1
L2=0
L3=1
delayms(5)
dula=1
P0=table[gefen]
dula=0
L1=0
L2=0
L3=1
delayms(5)
dula=1
P0=table[shifen]
dula=0
L1=1
L2=1
L3=0
delayms(5)
dula=1
P0=0x40
dula=0
L1=0
L2=1
L3=0
delayms(5)
dula=1
P0=table[geshi]
dula=0
L1=1
L2=0
L3=0
delayms(5)
dula=1
P0=table[shishi]
dula=0
L1=0
L2=0
L3=0
delayms(5)
}
void keyscan()
{
if(key1==0)
{
delayms(10)
if(key1==0)
{
numshi++
if(numshi==24)
numshi=0
while(!key1)
}
}
if(key2==0)
{
delayms(10)
if(key2==0)
{
if(numfen==60)
numfen=0
numfen++
while(!key2)
}
}
if(key3==0)
{
delayms(10)
if(key3==0)
{
nummiao=0
while(!key3)
}
}
if(key4==0)
{
delayms(10)
if(key4==0)
{
while(!key4)
TR0=~TR0
}
}
}
void main()
{
init()
aa=0xfe
while(1)
{
P1=aa
if(nummiao==60)
{
numfen++
nummiao=0}
if(numfen==60)
{numshi++
numfen=0}
if(numshi==24)
numshi=0
keyscan()
display(nummiao,numfen,numshi)
}
}
void t0time()interrupt 1
{
TH0=(65535-50000)/256
TL0=(65535-50000)%256
t0++
if(t0==20)
{
t0=0
nummiao++}
aa=_crol_(aa,1)
}
数字时钟的工作原理是【1】数字时钟,就是以数字显示取代模拟表盘的钟表,在显示上它用数字反应此时的时间,它还能同时显示时,分,秒,且能够对时,分,秒准确进行校时。
【2】数字钟从原理上讲是一种典型的数字电路,一般是由振荡器、分频器、计数器、显示器等几部分组成。其中包括了组合逻辑电路和时序电路。数字钟的设计方法有许多种。
例如:可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟;还可以利用单片机来实现电子钟等等。
面向对象思想写成:
下面是一个显示器类
public class Display {private int value//现在的值
private int limit//上限值
Display( int limit) {
this.limit = limit
}
public void increase() {
value++
if(value == limit) {
value = 0
}
}
public int getValue() {
return value
}
public static void main(String[] args) {
Display d = new Display(24)
for() {
d.increase()
System.out.println(d.getValue())
}
}
}
下面创建一个时钟对象:
public class Clock {private Display h = new Display(24)
private Display min = new Display(60)
private Display s = new Display(60)
public void start () {
for() {
s.increase()
if(s.getValue() == 0){//如果分重置,小时+1
min.increase()
if(min.getValue() == 0){//如果分重置,小时+1
h.increase()
}
}
System.out.printf("%02d:%02d:%02d\n",h.getValue(), min.getValue(),s.getValue())//格式输出
}
}
public static void main(String[] args) {
Clock clock = new Clock()
clock.start()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)