制作一个时钟显示程序

制作一个时钟显示程序,第1张

脚本说明:

第一步:把如下代码加入<body>区域中

<SCRIPT language=javascript>

var dot=65

rads=new Array(65)

function rad () {

for (i=1; i<dot; i++) {

if (documentall) rads[i]=new Array (eval('rad'+i)style,-100,-100)

else rads[i] = new Array (eval('documentrad'+i),-100,-100)

}

}

function setCircle() {

for (i=1; i<dot; i++) {

rads[i][0]left=rads[i][1]+pX-15

if (documentlayers) rads[i][0]left+=10

rads[i][0]top=rads[i][2]+pY-20

//if (documentlayers) rads[i][0]top-=5

}

}

function counter() {

for (i=1; i<dot; i++) {

rad=MathPI(i/((dot-1)/2))

rads[i][1] = Mathsin(rad)60;

rads[i][2] = -Mathcos(rad)60;

}

setCircle()

}

pX=400;pY=150

obs = new Array(13)

function ob () {

for (i=0; i<13; i++) {

if (documentall) obs[i]=new Array (eval('ob'+i)style,-100,-100)

else obs[i] = new Array (eval('documentob'+i),-100,-100)

}

}

function cl(a,b,c){

if (documentall) {

if (a!=0) b+=-1

eval('c'+a+'stylepixelTop='+(pY+(c-5)))

eval('c'+a+'stylepixelLeft='+(pX+(b)))

}

else{

if (a!=0) b+=10

eval('documentc'+a+'top='+(pY+(c)))

eval('documentc'+a+'left='+(pX+(b)))

}

}

function runClock() {

for (i=0; i<13; i++) {

obs[i][0]left=obs[i][1]+pX

obs[i][0]top=obs[i][2]+pY

}

}

var lastsec

function timer() {

time = new Date ()

sec = timegetSeconds()

if (sec!=lastsec) {

lastsec = sec

sec=MathPIsec/30

min=MathPItimegetMinutes()/30

hr =MathPI((timegetHours()60)+timegetMinutes())/360

for (i=1;i<6;i++) {

obs[i][1] = Mathsin(sec) (44 - (i-1)11)-16;

if (documentlayers)obs[i][1]+=10;

obs[i][2] = -Mathcos(sec) (44 - (i-1)11)-27;

}

for (i=6;i<10;i++) {

obs[i][1] = Mathsin(min) (40 - (i-6)10)-16;

if (documentlayers)obs[i][1]+=10;

obs[i][2] = -Mathcos(min) (40 - (i-6)10)-27;

}

for (i=10;i<13;i++) {

obs[i][1] = Mathsin(hr) (37 - (i-10)11)-16;

if (documentlayers)obs[i][1]+=10;

obs[i][2] = -Mathcos(hr) (37 - (i-10)11)-27;

}

}

}

function setNum(){

cl (0,-67,-65);

cl (1,10,-51);

cl (2,28,-33);

cl (3,35,-8);

cl (4,28,17);

cl (5,10,35);

cl (6,-15,42);

cl (7,-40,35);

cl (8,-58,17);

cl (9,-65,-8);

cl (10,-58,-33);

cl (11,-40,-51);

cl (12,-16,-56);

}

</SCRIPT>

<DIV id=c0

style="HEIGHT: 128px; LEFT: 38px; POSITION: absolute; TOP: -119px; WIDTH: 686px; Z-INDEX: 2"></DIV>

<DIV id=c1

style="FONT-SIZE: 11px; LEFT: 20px; POSITION: absolute; TOP: -20px; Z-INDEX: 5"><B>1</B>

</DIV>

<DIV id=c2

style="FONT-SIZE: 11px; LEFT: 20px; POSITION: absolute; TOP: -20px; Z-INDEX: 5"><B>2</B>

</DIV>

<DIV id=c3

style="FONT-SIZE: 11px; LEFT: 20px; POSITION: absolute; TOP: -20px; Z-INDEX: 5"><B>3</B>

</DIV>

<DIV id=c4

style="FONT-SIZE: 11px; LEFT: 20px; POSITION: absolute; TOP: -20px; Z-INDEX: 5"><B>4</B>

</DIV>

<DIV id=c5

style="FONT-SIZE: 11px; LEFT: 20px; POSITION: absolute; TOP: -20px; Z-INDEX: 5"><B>5</B>

</DIV>

<DIV id=c6

style="FONT-SIZE: 11px; LEFT: 20px; POSITION: absolute; TOP: -20px; Z-INDEX: 5"><B>6</B>

</DIV>

<DIV id=c7

style="FONT-SIZE: 11px; LEFT: 20px; POSITION: absolute; TOP: -20px; Z-INDEX: 5"><B>7</B>

</DIV>

<DIV id=c8

style="FONT-SIZE: 11px; LEFT: 20px; POSITION: absolute; TOP: -20px; Z-INDEX: 5"><B>8</B>

</DIV>

<DIV id=c9

style="FONT-SIZE: 11px; LEFT: 20px; POSITION: absolute; TOP: -20px; Z-INDEX: 5"><B>9</B>

</DIV>

<DIV id=c10

style="FONT-SIZE: 11px; LEFT: 20px; POSITION: absolute; TOP: -20px; Z-INDEX: 5"><B>10</B>

</DIV>

<DIV id=c11

style="FONT-SIZE: 11px; LEFT: 20px; POSITION: absolute; TOP: -20px; Z-INDEX: 5"><B>11</B>

</DIV>

<DIV id=c12

style="FONT-SIZE: 11px; LEFT: 20px; POSITION: absolute; TOP: -20px; Z-INDEX: 5"><B>12</B>

</DIV>

<DIV id=ob0 style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 1">

</DIV>

<DIV id=ob1

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#0000ff size=+3><B></B></FONT> </DIV>

<DIV id=ob2

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#0000ff size=+3><B></B></FONT> </DIV>

<DIV id=ob3

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#0000ff size=+3><B></B></FONT> </DIV>

<DIV id=ob4

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#0000ff size=+3><B></B></FONT> </DIV>

<DIV id=ob5

style="HEIGHT: 32px; LEFT: -35px; POSITION: absolute; TOP: -4px; WIDTH: 742px; Z-INDEX: 8"><FONT

color=#0000ff size=+3><B></B></FONT> </DIV>

<DIV id=ob6

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#00ffff size=+3><B></B></FONT> </DIV>

<DIV id=ob7

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#00ffff size=+3><B></B></FONT> </DIV>

<DIV id=ob8

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#00ffff size=+3><B></B></FONT> </DIV>

<DIV id=ob9

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#00ffff size=+3><B></B></FONT> </DIV>

<DIV id=ob10

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 6"><FONT

color=#ff0000 size=+3><B></B></FONT> </DIV>

<DIV id=ob11

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 6"><FONT

color=#ff0000 size=+3><B></B></FONT> </DIV>

<DIV id=ob12

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 6"><FONT

color=#ff0000 size=+3><B></B></FONT> </DIV>

<DIV id=rad0 style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 1">

</DIV>

<DIV id=rad1

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad2

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad3

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad4

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad5

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad6

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad7

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad8

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad9

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad10

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad11

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad12

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad13

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad14

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad15

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad16

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad17

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad18

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad19

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad20

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad21

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad22

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad23

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad24

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad25

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad26

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad27

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad28

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad29

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad30

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad31

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad32

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad33

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad34

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad35

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad36

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad37

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad38

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad39

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad40

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad41

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad42

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad43

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad44

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad45

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad46

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad47

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad48

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad49

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad50

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad51

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad52

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad53

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad54

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad55

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad56

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad57

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad58

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad59

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad60

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad61

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 8"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad62

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad63

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

<DIV id=rad64

style="LEFT: -20px; POSITION: absolute; TOP: -20px; Z-INDEX: 7"><FONT

color=#000000><B></B></FONT> </DIV>

第二步:把<body>中的内容改为:

<body onload="rad();counter();ob();setNum();setInterval('timer()',100);setInterval('runClock()',100)">

您可以登录我们的网站:(网站地址点击我们的百度账号名进入在我们的简介中有网址和我们的****)点击在线客服专员为您指导一下

#include <AT89X51H>

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //定义显示用的段码

unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //定义显示用的位码

unsigned char dispbuf[8]={0,0,16,0,0,16,0,0}; //定义显示缓冲区

unsigned char dispbitcnt; //定义显示的位

unsigned char second; //定义秒

unsigned char minite; //定义分钟

unsigned char hour;//定义小时

unsigned int tcnt;//定义定时累加器

unsigned char mstcnt;//定义毫秒累加器

unsigned char i,j;

void main(void) //主函数

{

TMOD=0x02; //设置定时器工作模式

TH0=0x06; //设置初值

TL0=0x06;

TR0=1; //开定时器

ET0=1; //开定时器中断

EA=1; //开总中断

while(1)

{

if(P0_0==0) //判断P00口的按键是否按下

{

for(i=5;i>0;i--)

for(j=248;j>0;j--);//延时消抖

if (P0_0==0) //判断按键真的按下了

{

second++; //秒加1

if(second==60) //秒加到60?

{

second=0; //秒清零

}

dispbuf[0]=second%10; //取秒的个位放在显示缓冲

dispbuf[1]=second/10; //取秒的十位放在显示缓冲

while(P0_0==0); //等待,知道按键松开

}

}

if(P0_1==0) //p01的按键按下,设置分钟,请参考秒的程序,一样的

{

for(i=5;i>0;i--)

for(j=248;j>0;j--);

if(P0_1==0)

{

minite++;

if(minite==60)

{

minite=0;

}

dispbuf[3]=minite%10;

dispbuf[4]=minite/10;

while(P0_1==0);

}

}

if(P0_2==0) //p02的按键按下,设置小时,请参考秒的程序,一样的

{

for(i=5;i>0;i--)

for(j=248;j>0;j--);

if(P0_2==0)

{

hour++;

if(hour==24)

{

hour=0;

}

dispbuf[6]=hour%10;

dispbuf[7]=hour/10;

while(P0_2==0);

}

}

}

}

void t0(void) interrupt 1 using 0 //定时器中断函数

{

mstcnt++; //累加器加一

if(mstcnt==8) //计时满8毫秒?

{

mstcnt=0; //累加器清零

P1=dispcode[dispbuf[dispbitcnt]]; //送显示段码

P3=dispbitcode[dispbitcnt]; //送显示位码

dispbitcnt++; //显示位加1

if(dispbitcnt==8) //8位都显示完了?

{

dispbitcnt=0; //从第一位开始显示

}

}

tcnt++; //累加器加一

if(tcnt==4000) //记满1秒

{

tcnt=0; //累加器清零

second++; //秒加一

if(second==60) //秒满60?

{

second=0; //秒清零

minite++; //分钟加一

if(minite==60) //分钟满60

{

minite=0; //分钟清零

hour++; //小时加1

if(hour==24) //小时满24

{

hour=0; //小时清零

}

}

}

dispbuf[0]=second%10; //将时分秒的个位与十位分开,装在显示区

dispbuf[1]=second/10;

dispbuf[3]=minite%10;

dispbuf[4]=minite/10;

dispbuf[6]=hour%10;

dispbuf[7]=hour/10;

}

}

其实这个程序不难,仔细想想,有不懂的再问我吧

#include <reg52h>

#include<stddefh>

#define uchar unsigned char

#define uint unsigned int

#define LCD1602_FLAG

#define LCD1602_PORT P0

sbit lcd1602_rs=P2^0;

sbit lcd1602_e=P2^2;

sbit lcd1602_rw=P2^1;

sbit lcd1602_busy=P0^7;

sbit key_ch=P3^5;

sbit key_add=P3^6;

sbit key_minus=P3^7;

uchar i,sec,min,h,date,month,flag;

uint year;

uchar chgstr[7]={"  ","sec","min","hour","date","min","year"};

uchar j,k,m,n,o,p;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

uchar timestr[10],datestr[10];

void init();

void delay(uint);

void time_display();

void date_display();

void control();

void time();

/

  函数名称:lcd1602_CheckBusy()

  函数功能:状态查询

/

void lcd1602_CheckBusy()

{

    do

    {

    lcd1602_busy=1;

    lcd1602_rs=0;

    lcd1602_rw=1;

    lcd1602_e=0;

    lcd1602_e=1;

    }

while(lcd1602_busy);

}

/

  函数名称: lcd1602_WriteCmd()

  函数功能:写命令

  入口参数:命令字

  出口参数:无

/

void lcd1602_WriteCmd(const uchar cmd)

{

    lcd1602_CheckBusy();

lcd1602_rs=0;

lcd1602_rw=0;

lcd1602_e=1;

LCD1602_PORT=cmd;

lcd1602_e=0;

}

/

  函数名称:lcd1602_WriteData()

  函数功能:写数据

  入口参数:c--待写数据

  出口参数:无

/

void lcd1602_WriteData(const uchar c)

{

    lcd1602_CheckBusy();

lcd1602_rs=1;

lcd1602_rw=0;

lcd1602_e=1;

LCD1602_PORT=c;

lcd1602_e=0;

}

/

  函数名称:lcd1602_Init()

  函数功能:初始化LCD

  入口参数:无

  出口参数:无

/

void lcd1602_Init()

{

    lcd1602_WriteCmd(0x38); //显示模式为8位2行57点阵

    lcd1602_WriteCmd(0x0c); //display enable,flag enable,flash enable,

    lcd1602_WriteCmd(0x06); //flag move to right,screen don't move

    lcd1602_WriteCmd(0x01); //clear screen

}

/

  函数名称:lcd1602_Display()

  函数功能: 字符显示

  入口参数:ptr--字符或字符串指针

  出口参数:无

  说    明:用户可通过以下方式来调用:

            1)lcd1602_Display("Hello,world!");

            2) INT8U 存储类型 txt[]="要显示的字符串";

               或者 INT8U 存储类型 txt[]={'t','x','t',,'\0'};

               INT8U ptr;

               ptr=&txt;

               lcd1602_Display(ptr);

               或 lcd1602_Display(txt);

               或 lcd1602_Display(&txt);

/

void lcd1602_Display(const uchar ptr,uchar line,uchar xaddr)

{

    uchar data i=0;

uchar data q;

q=ptr;

switch(line)

{

case 0:

lcd1602_WriteCmd(0x80+xaddr);

while(q!=NULL && (q!='\0') && i<16)

     {

lcd1602_WriteData(q);

q++;

i++;

     }

break;

case 1:

lcd1602_WriteCmd(0xc0+xaddr);

while(q!=NULL && (q!='\0') && i<16)

     {

lcd1602_WriteData(q);

q++;

i++;

}

break;

}

}

void main()

{

lcd1602_Init();

init();

while(1)

{

time_display();

date_display();

control();

}

}

void init()

{

i=0;

sec=0;

min=30;

h=7;

date=17;

month=10;

year=2017;

flag=0;

EA=1;

ET0=1;

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;

}

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void time_display()

{

timestr[7]=0x30+sec%10;

timestr[6]=0x30+sec/10;

timestr[5]=':';

timestr[4]=0x30+min%10;

timestr[3]=0x30+min/10;

timestr[2]=':';

timestr[1]=0x30+h%10;

timestr[0]=0x30+h/10;

timestr[8]=0;

lcd1602_Display(timestr,1,3);

}

void date_display()

{

datestr[9]=0x30+date%10;

datestr[8]=0x30+date/10;

datestr[7]=':';

datestr[6]=0x30+month%10;

datestr[5]=0x30+month/10;

datestr[4]=':';

datestr[3]=0x30+year%10;

datestr[2]=0x30+year/10%10;

datestr[1]=0x30+year/100%10;

datestr[0]=0x30+year/1000;

lcd1602_Display(datestr,0,2);

}

void control()

{

if(!key_ch)

{

delay(5);

if(!key_ch)

{

flag++;

TR0=0;

if(flag==7)

{flag=0;TR0=1;lcd1602_Init();}

lcd1602_Display(chgstr[flag],1,12);

}

}

while(!key_ch);

if(flag==1&&key_add==0)

{

while(!key_add);

sec++;

if(sec==60)

sec=0;

}

if(flag==1&&key_minus==0)

{

while(!key_minus);

sec--;

if(sec==-1)

sec=59;

}

if(flag==2&&key_add==0)

{

while(!key_add);

min++;

if(min==60)

min=0;

}

if(flag==2&&key_minus==0)

{

while(!key_minus);

min--;

if(min==-1)

min=59;

}

if(flag==3&&key_add==0)

{

while(!key_add);

h++;

if(h==24)

h=0;

}

if(flag==3&&key_minus==0)

{

while(!key_minus);

h--;

if(h==-1)

h=23;

}

if(flag==4&&key_add==0)

{

while(!key_add);

date++;

if(date==29)

if((year%4!=0)&&(month==2))

date=1;

if(date==30)

if((year%4==0)&&(month==2))

date=1;

if(date==31)

if((month==4)||(month==6)||(month==9)||(month==11))

date=1;

if(date==32)

if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))

date=1;

}

if(flag==4&&key_minus==0)

{

while(!key_minus);

if(date>1)date--;

}

if(flag==5&&key_add==0)

{

while(!key_add);

month++;

if(month==13)

month=1;

}

if(flag==5&&key_minus==0)

{

while(!key_minus);

month--;

if(month==0)

month=12;

}

if(flag==6&&key_add==0)

{

while(!key_add);

year++;

if(year==99)

year=1;

}

if(flag==6&&key_minus==0)

{

while(!key_minus);

year--;

if(year==0)

year=99;

}

}

void T0_rpt() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

i++;

time();

}

void time()

{

if(i==20)

{

i=0;

sec++;

if(sec==60)

{

sec=0;

min++;

if(min==60)

{

min=0;

h++;

if(h==24)

{

h=0;

min=0;

sec=0;

date++;

if(date==29)

if((year%4!=0)&&(month==2))

{

date=1;

month++;

if(month==13)

{

month=1;

year++;

}

}

if(date==30)

if((year%4==0)&&(month==2))

{

date=1;

month++;

if(month==13)

{

month=1;

year++;

}

}

if(date==31)

if((month==4)||(month==6)||(month==9)||(month==11))

{

date=1;

month++;

if(month==13)

{

month=1;

year++;

}

}

if(date==32)

if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))

{

date=1;

month++;

if(month==13)

{

month=1;

year++;

}

}

}

}

}

}

}

Hand类的代码:

Public MustInherit Class Hand

Protected gp As GraphicsPath = New GraphicsPath()

Protected gpBase As GraphicsPath = Nothing

Protected midX As Integer = 150 ‘默认的窗体

Protected midY As Integer = 150 ‘中心位置

‘构造器,得到窗体中心位置

Public Sub New(ByVal theForm As Form1)

midX = (theFormClientRectangleLeft + theFormClientRectangleRight) / 2

midY = (theFormClientRectangleTop + theFormClientRectangleBottom) / 2

End Sub

MustOverride Sub Transform(ByVal d As DateTime)

‘绘制指针路径

Overridable Sub Draw(ByVal g As Graphics)

Dim aPen As Pen = New Pen(BrushesBlack, 4F)

gDrawPath(aPen, gp)

gFillPath(BrushesBlack, gp)

aPenDispose()

End Sub

‘使用矩阵实现路径(gp)的旋转

Public Sub Rotate(ByVal angle As Double)

gp = CType(gpBaseClone(), GraphicsPath)

Dim mTransform As Matrix = New Matrix()

mTransformRotateAt(CType(angle,Single),NewPointF(midX,midY))

gpTransform(mTransform)

End Sub

End Class

为了节省篇幅,上面的代码省略了引入命名空间的语句。

下面是分针(MinuteHand)类的定义:

Public Class MinuteHand

Inherits Hand

‘构造器,生成绘制分针的路径(gp)

Public Sub New(ByVal myForm As Form1)

MyBaseNew(myForm)

gpAddLine(midX, midY, midX, 45)

gpAddLine(midX, 45, midX - 3, 50)

gpAddLine(midX - 3, 50, midX + 3, 50)

gpAddLine(midX + 3, 50, midX, 45)

gpBase = CType(gpClone(), GraphicsPath)

End Sub

‘Transform方法取得系统当前时间,并旋转时钟指针。

Public Overrides Sub Transform(ByVal d As DateTime)

Dim minuteTime As Double = (CDbl(dMinute) + CDbl(dSecond / 60))

Dim angle As Double = (CDbl(minuteTime) / 60) 360

Rotate(angle)

End Sub

End Class

对所有的指针旋转的方法都是相同的,因此在基类中实现。由于时针和秒针的实现与分针相似,所不同者,只在于构造器中绘制的指针路径不同和Transform方法中转动的角度不同,在这里就不在赘述了。

另外还需要提一下的是画时钟表面的代码,时钟表面用ClockFace类来实现。这个类首先画一个圆代表时钟,然后画上米老鼠的图案,最后在相应的位置画上数字1~12代表12个小时。

Public Sub Draw(ByVal g As Graphics)

DrawClockFace(g)

DrawImage(g)

DrawNumbers(g)

DrawPin(g)

End Sub

下面是ClockFace类的属性:

Private ClockRectangle As Rectangle

Private ClockFont As Font = New Font("Arial", 12)

Private midPoint As Point

Private ClockImage As Bitmap

Private Const IMAGEX As Integer = 50

Private Const IMAGEY As Integer = 50

DrawClockFace方法用来画时钟表面:

Private Sub DrawClockFace(ByVal g As Graphics)

gFillEllipse(BrushesWhite, ClockRectangleLeft + 10, ClockRectangleTop + 10, ClockRectangleWidth - 20, ClockRectangleHeight - 20)

gDrawEllipse(PensBlack, ClockRectangleLeft + 10, ClockRectangleTop + 10, ClockRectangleWidth - 20, ClockRectangleHeight - 20)

End Sub

然后用Graphics对象的DrawImage方法画出米老鼠的:

Private Sub DrawImage(ByVal g As Graphics)

Dim nWidth As Integer = ClockImageWidth

Dim nHeight As Integer = ClockImageHeight

Dim destRect As Rectangle = New Rectangle(midPointX - IMAGEX / 2, midPointY - IMAGEY / 2, IMAGEX, IMAGEY)

gDrawImage(ClockImage, destRect)

End Sub

数字在时钟上的位置是用sin和cos函数计算的:

Private Sub DrawNumbers(ByVal g As Graphics)

Dim count As Integer = 1

Dim a As Double

For a = 0 To 2 MathPI Step 2 MathPI / 12

Dim x As Double = (ClockRectangleWidth - 70) / 2 MathCos(a - MathPI / 3) + (ClockRectangleWidth - 70) / 2 + 25

Dim y As Double = (ClockRectangleWidth - 70) / 2 MathSin(a - MathPI / 3) + (ClockRectangleWidth - 70) / 2 + 20

gDrawString(ConvertToString(count), ClockFont, BrushesBlack, CType(x, Single), CType(y, Single), New StringFormat())

count += 1

Next

End Sub

最后是窗体文件(Form1vb):

Public Class Form1

Inherits SystemWindowsFormsForm

Private MyMinuteHand As MinuteHand

Private MyHourHand As HourHand

Private MySecondHand As SecondHand

Private TheClockFace As ClockFace

Private FirstTick As Boolean = False

‘在窗体的OnPaint事件中取得Graphics对象

Protected Overrides Sub OnPaint(ByVal e As SystemWindowsFormsPaintEventArgs)

If (FirstTick = False) Then Exit Sub

Dim g As Graphics = eGraphics

TheClockFaceDraw(g)

MyHourHandDraw(g)

MyMinuteHandDraw(g)

MySecondHandDraw(g)

TheClockFaceDrawPin(g)

End Sub

‘计时器事件

Private Sub Timer1_Tick(ByVal sender As SystemObject, ByVal e As SystemEventArgs) Handles Timer1Tick

MySecondHandTransform(DateTimeNow)

MyHourHandTransform(DateTimeNow)

MyMinuteHandTransform(DateTimeNow)

FirstTick = True

Invalidate()

这个是简单的数码管时钟显示如果有需要,我写过比较完善的1602显示时钟显示控制年月日等等#include\x0d\sbit Begin=P2^0;\x0d\sbit Hour=P2^1;\x0d\sbit Mus=P2^2;\x0d\sbit End=P2^3;\x0d\unsigned char code Tab[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,\x0d\ 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};\x0d\unsigned char code num[]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};\x0d\unsigned char Time[]={0,0,16,0,0,16,0,0};\x0d\unsigned char a;\x0d\unsigned int x,m,th;\x0d\void init()\x0d\{\x0d\ TMOD=0x01;\x0d\ TH0=(65535/50000)/256;\x0d\ TL0=(65535/50000)%256;\x0d\ EA=1;\x0d\ ET0=1;\x0d\ TR0=1;\x0d\}\x0d\void delay(unsigned int z) \x0d\{ \x0d\ unsigned int x,y;\x0d\ for(x=z;x>0;x--)\x0d\ for(y=110;y>0;y--); \x0d\}\x0d\unsigned char keyboard()\x0d\{\x0d\ if(Begin==0){\x0d\ delay(5);\x0d\ if(Begin==0)\x0d\ return 1;\x0d\ }\x0d\ if(Hour==0){\x0d\ delay(30);\x0d\ if(Hour==0)\x0d\ return 2;\x0d\ }\x0d\ if(Mus==0)\x0d\ return 3;\x0d\ if(End==0)\x0d\ return 4;\x0d\}\x0d\void display()\x0d\{\x0d\ unsigned char i; for(i=0;i=20)\x0d\ {\x0d\ x++;\x0d\ m=x;\x0d\ th=m/3600; //设置小时\x0d\ Time[0]=th/10;\x0d\ Time[1]=th%10;\x0d\ m=m%3600; Time[2]=16; th=m/60; //设置分钟\x0d\ Time[3]=th/10;\x0d\ Time[4]=th%10;\x0d\ m=m%60; Time[5]=16; th=m; //设置秒\x0d\ Time[6]=th/10;\x0d\ Time[7]=th%10; a=0;\x0d\ }\x0d\}

muteM EQU 10h ;静音键 闹铃开/关

timerT EQU 0Ch ;菜单键 进入/退出设置状态

leftL EQU 46h ;左移键

rightR EQU 47h ;右移键

upU EQU 19h ;增加键

downD EQU 1dh ;减少键

d_off EQU 16H ;显示键 LED数码管显示/关闭

recall EQU 44H ;日历键 DS1302初始化 *** 作

K_on BIT P30 ;闹铃输出

LED1 BIT P33

LED2 BIT P34

LED3CLK BIT P35 ;DS1302

LED4IO BIT P37

RST BIT P31

SECOND EQU 60H

;60H 秒

;61h 分

;62h 时

;63h 日

;64h 月 ;65h DAY

;66h 年

;6Ah 闹分 from 00(1302)

;6BH 闹时 from 01(1302)

;

ORG 0000H

AJMP START

ORG 0003H

LJMP S_INT ;IRF

ORG 000BH ;200Us

LJMP P_INT ;

ORG 001BH ;display LED

LJMP DISPLAY

; ;main program

ORG 0030H

START: CLR RST

MOV SP,#2AH

SETB 05H

CLR 06H

SETB 07H;CLR 07H

CLR 08H

CLR 09H

CLR 0AH

CLR 0BH

CLR 0CH

SETB 0DH

CLR 0EH

CLR 0FH

CLR 10H

CLR 11H

MOV R2,#00H ;

MOV R3,#00H ;

MOV TMOD,#12H

MOV TL1,#0e5H ;wait

MOV TH1,#0BeH

MOV TH0,#3FH ;200uS 3f

MOV TL0,#3FH

SETB ET0

SETB ET1

setb pt0

SETB TR0

SETB TR1

SETB IT0 ;

SETB EX0 ;

CLR PX0 ;LCALL SET1302 ;初始化

MOV R1,#0C1H ;取定时参数从1302中

acall T_6061

MOV 6AH,A ;M

MOV R1,#0C3H

ACALL T_6061

MOV 6BH,A ;H

MOV 61H,#0

MOV 62H,#0

SETB EA

sjmp $

;

DISPLAY: PUSH ACC

PUSH PSW

MOV TL1,#0e0H ;wait how long to display (20ms)

MOV TH1,#0b0H

MOV dptr,#tab1

JB 0EH,DIS2

JB 0FH,DIS3

JB 10H,DIS4

JB 11H,DIS5

JNB 0DH,D_OUT

JNB 08H,D_GO ;定时到时,显示闪烁

JNB 07H,D_OUT

D_G MOV DPTR,#TAB1

MOV A,62H

ANL A,#0FH

MOV B,A

MOV A,62H

SWAP A

ANL A,#07H

MOVC A,@A+DPTR

MOV P1,A

CLR LED1

LCALL DL2M

SETB LED1

MOV A,B

MOVC A,@A+DPTR

MOV C,07H

MOV acc7,C ;秒灯闪烁

MOV P1,A

CLR LED2

LCALL DL2M

SETB LED2

MOV dptr,#tab2 ;倒装LED字段表

MOV A,61H

ANL A,#0FH

MOV B,A

MOV A,61H

SWAP A

ANL A,#0FH

MOVC A,@A+DPTR

MOV C,07H

MOV acc6,C ;秒灯闪烁

MOV P1,A

CLR LED3CLK

LCALL DL2M

SETB LED3CLK

MOV dptr,#tab1

MOV A,B

MOVC A,@A+DPTR

MOV C,06H

cpl c

MOV acc7,C ;闹铃指示灯

MOV P1,A

CLR LED4IO

LCALL DL2M

SETB LED4IO

D_OUT: SETB TR1

POP PSW

POP ACC

RETI

;

DIS2: AJMP DIS_2

DIS3: AJMP DIS_3

DIS4: AJMP DIS_4

DIS5: AJMP DIS_5

;

DIS_2: MOV dptr,#tab1 ;显示设置小时

MOV 6FH,62H

ACALL BCD_HEX

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV P1,A

CLR LED1

LCALL DL2M

SETB LED1

MOV A,B

MOVC A,@A+DPTR

MOV P1,A

CLR LED2

LCALL DL2M

SETB LED2

SETB TR1

POP PSW

POP ACC

RETI

;

DIS_3: MOV DPTR,#TAB2 ;显示设置分

MOV 6FH,61H

ACALL BCD_HEX

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV P1,A

CLR LED3CLK

LCALL DL2M

SETB LED3CLK

MOV A,B

MOV DPTR,#TAB1

MOVC A,@A+DPTR

MOV P1,A

CLR LED4IO

LCALL DL2M

SETB LED4IO

SETB TR1

POP PSW

POP ACC

RETI

;

DIS_4: MOV dptr,#tab1 ;显示设置闹时

JNB 07H,D4_OUT ;显示时闪烁

MOV A,6BH

MOV B,#0AH

DIV AB

MOVC A,@A+DPTR

MOV P1,A

CLR LED1

LCALL DL2M

SETB LED1

MOV A,B

MOVC A,@A+DPTR

MOV P1,A

CLR LED2

LCALL DL2M

SETB LED2

D4_OUT: SETB TR1

POP PSW

POP ACC

RETI

;

DIS_5: MOV DPTR,#TAB2

JNB 07H,D5_OUT ;显示时闪烁

MOV A,6AH ;显示设置闹分

MOV B,#0AH

DIV AB

MOVC A,@A+DPTR

MOV P1,A

CLR LED3CLK

LCALL DL2M

SETB LED3CLK

MOV DPTR,#TAB1

MOV A,B

MOVC A,@A+DPTR

MOV P1,A

CLR LED4IO

LCALL DL2M

SETB LED4IO

D5_OUT: SETB TR1

POP PSW

POP ACC

RETI

;

DL2M: MOV 43H,#14H ; every LED(2ms)

DL2: MOV 44H,#14H

DL1: NOP

NOP

DJNZ 44H,DL1

DJNZ 43H,DL2

RET

;定时读取1302时间及判断闹铃时间是否到

P_INT: PUSH ACC

PUSH PSW

INC R2

CJNE R2,#250D,P_OUT

MOV R2,#00H

INC R3

CJNE R3,#10D,P_OUT

MOV R3,#00H

CPL 07H

MOV P1,#0FFH

ACALL R_1302

OUT: JNB 06H,P_OUT

MOV A,6BH

MOV B,#10

DIV AB

SWAP A

ADD A,B

CJNE A,62H,PP_OUT

MOV A,6AH

MOV B,#10

DIV AB

SWAP A

ADD A,B

CJNE A,61H,PP_OUT

SETB 08H ;定时到标志

MOV C,07H

cpl c

MOV K_ON,C

P_OUT: POP PSW

POP ACC

RETI

PP_OUT: SETB K_ON

CLR 08H

POP PSW

POP ACC

RETI

;有接收到遥控器信号

S_INT:CLR EA

PUSH ACC

PUSH PSW

PUSH DPH

PUSH DPL

PUSH 02H

PUSH 03H

MOV R6,#10D ;

SB: ACALL YS1

JB P32,EXIT

DJNZ R6, SB

JNB P32, $ ;

ACALL YS2 ;

JB P32,EXIT

MOV R1,#1AH ;

MOV R2,#4D

PP: MOV R3,#8D

JJJJ: JNB P32,$

ACALL YS1

MOV C,P32

JNC UUU

JB P32,$

UUU: MOV A,@R1

RRC A

MOV @R1,A

DJNZ R3,JJJJ

INC R1

DJNZ R2,PP

;-------------------------------------

MOV A,1AH ;

XRL A,#40h ;判断1AH的值是否等于遥控器低8位地址(40h)

JNZ EXIT ;

MOV A,1bH

XRL A,#0bfh ;再判断高8位地址是否正确(0bfh)

JNZ EXIT

MOV A,1CH

CPL A

XRL A,1DH ;将1CH的值取反后和1DH比较 不同则无效丢弃(核对数据是否准确)

JNZ EXIT

ACALL DO ;相应按键的处理

EXIT: SETB EA

POP 03H

POP 02H

POP DPL

POP DPH

POP PSW

POP ACC

RETI

;--------------------delay-----------------------

YS1: MOV 70H,#16D ;延时1

D1: MOV 71H,#21D

DJNZ 71H,$

DJNZ 70H,D1

RET

YS2: MOV 70H,#09D ;延时2

D2: MOV 71H,#220D

DJNZ 71H,$

DJNZ 70H,D2

RET

;---------------------------------------------------------

TAB: DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H ;TAB1 LED数码管显示表 TAB遥控器键值表(未用)

;TAB1: DB 3FH,11H,5EH,5BH,71H,6BH,6FH,19H,7FH,7bH,77H,7CH,39H,5EH,79H,71H

tab1: DB 0C0H,0F9H,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0a7h,0a1h,86h,8EH

TAB2: DB 0c0H,0f9H,64H,70H,59H,52H,42H ;倒装LED段码表

;0CH 为设置标志,0DH为全显示标志,0EH为显示设置小时标志,0FH为显示设置分标志

;10H 为显示设置闹时标志,11H为显示设置闹分标志

;增加闹时静音功能

;mute-10h,timer-0eh,left-46h,right-47h,up-19h,down-1dh

D MOV A,1CH

CJNE A,#TIMERT,REDO ;代码不是设置/退出键

JNB 0CH,SET1 ;是,则进入

CLR 0CH ;是,已经进入,则退出

SETB 0DH ;恢复正常显示

CLR 0EH

CLR 0FH

CLR 10H

CLR 11H

RET

SET1: SETB 0CH

SETB 0EH

CLR 0DH

CLR 0FH

CLR 10H

CLR 11H

RET

RED CJNE A,#MUTEM,REDO1 ;不是设置键的处理REDO1,2,3,4

LJMP MUTE ;MUTE

REDO1: CJNE A,#D_OFF,DO_SET2

LJMP DIS_OFF ;关闭显示

DO_SET2:JB 0CH,SET2 ;时间设置的处理

RET

SET2: CJNE A,#UPU,SET2A

LJMP INC1 ;+加(^)

SET2A: CJNE A,#DOWND,SET2B

LJMP DEC2 ;- 减

SET2B: CJNE A,#RIGHTR,SET2C

LJMP RIGHT ;RIGHT右移(>)

SET2C: CJNE A,#LEFTL,SET2D LJMP LEFT ;LEFT左移(<)

SET2D: CJNE A,#RECALL,SET2EXT ;DS1302初始化

LJMP SET1302

SET2EXT:RET

;--------------------------------INC------------------------

INC1: JB 0EH,INCH

JB 0FH,INCM

JB 10H,INC_H

JB 11H,INC_M

RET

INC_H: INC 6BH ;闹钟小时增加

MOV A,6BH

CJNE A,#24D,INCH3

MOV 6BH,#0

INCH3: MOV R1,#0C2H

MOV R0,6BH

ACALL SETONE ;写入DS1302

RET

INC_M: INC 6AH ;闹钟分增加

MOV A,6AH

CJNE A,#60D,INCH4

MOV 6AH,#0

INCH4: MOV R1,#0C0H

MOV R0,6AH

ACALL SETONE ;

RET

INCH: ;INC 62H ;

MOV 6FH,62H

ACALL BCD_HEX

INC A

CJNE A,#24D,INCH1

MOV A,#0

INCH1: MOV 6FH,A

ACALL HEX_BCD

MOV 62H,A

MOV R1,#84H

MOV R0,62H

ACALL SETONE ;

RET

INCM: ;INC 61H ;

MOV 6FH,61H

ACALL BCD_HEX

INC A

CJNE A,#60D,INCH2

MOV A,#0

INCH2: MOV 6FH,A

ACALL HEX_BCD

MOV 61H,A

MOV R1,#82H

MOV R0,61H

ACALL SETONE ;

RET

;----------------------------------DEC----------------------

DEC2: JB 0EH,DECH

JB 0FH,DECM

JB 10H,DEC_H

JB 11H,DEC_M

RET

DECH: MOV 6FH,62H

ACALL BCD_HEX

DEC A

CJNE A,#0FFH,DECH1

MOV A,#23

DECH1: MOV 6FH,A

ACALL HEX_BCD

MOV 62H,A

MOV R1,#84H

MOV R0,62H

ACALL SETONE

RET

DECM: MOV 6FH,61H

ACALL BCD_HEX

DEC A

CJNE A,#0FFH,DECM1

MOV A,#59

DECM1: MOV 6FH,A

ACALL HEX_BCD

MOV 61H,A

MOV R1,#82H

MOV R0,61H

ACALL SETONE

RET

DEC_H: DEC 6BH

MOV A,6BH

CJNE A,#0FFH,DECH3

MOV 6BH,#23D

DECH3: MOV R1,#0C2H

MOV R0,6BH

ACALL SETONE

RET

DEC_M: DEC 6AH

MOV A,6AH

CJNE A,#0FFH,DECH4

MOV 6AH,#59D

DECH4: MOV R1,#0C0H

MOV R0,6AH

ACALL SETONE

RET

;--------------------------------RIGHT----------------------

RIGHT: JB 0EH,RIGHT1

JB 0FH,RIGHT2

JB 10H,RIGHT3

JB 11H,RIGHT4

RET ;右移

RIGHT1: CLR 0EH

SETB 0FH

RET

RIGHT2: CLR 0FH

SETB 10H

RET

RIGHT3: CLR 10H

SETB 11H

RET

RIGHT4: CLR 11H

SETB 0EH

RET

;--------------------------------LEFT-----------------------

LEFT: JB 0EH,LEFT1

JB 0FH,LEFT2

JB 10H,LEFT3

JB 11H,LEFT4

RET ;左移

LEFT1: SETB 11H

CLR 0EH

RET

LEFT2: SETB 0EH

CLR 0FH

RET

LEFT3: SETB 0FH

CLR 10H

RET

LEFT4: SETB 10H

CLR 11H

RET

;------------------------------MUTE--------------

MUTE: setb k_ON

CPL 06H ;静音

CLR 08H

RET

;-----------------------------DISPLAY OFF--------

DIS_OFF:CLR ET1

CPL 05H

JNB 05H,REDORE

SETB ET1

REDORE: RET

;------------------------------------初始化1302

SET1302: CLR RST ;2002年1月1日12:00:00

CLR LED3CLK

MOV SECOND,#0

MOV 61H,#0

MOV 62H,#18 ;

MOV 63H,#1

MOV 64H,#1

MOV 65H,#1

MOV 66H,#2

SETB RST

MOV A,#8EH

LCALL R_BIT

MOV A,#00H

LCALL R_BIT

SETB LED3CLK

CLR RST

MOV R0,#SECOND

MOV R7,#7

MOV R1,#80H

SET1302A:CLR RST

CLR LED3CLK

SETB RST

MOV A,R1

LCALL R_BIT

MOV A,@R0

LCALL R_BIT

INC R0

INC R1

INC R1

SETB LED3CLK

CLR RST

DJNZ R7,SET1302A

CLR RST

CLR LED3CLK

sETB LED3CLK

nop

CLR RST

nop

clr led3clk

SETB RST

MOV A,#90H

LCALL R_BIT

MOV A,#10100101B ;充电器设置

LCALL R_BIT

SETB LED3CLK

CLR RST

CLR LED3CLK

SETB RST

MOV A,#8EH

LCALL R_BIT

MOV A,#80H

LCALL R_BIT

SETB LED3CLK

CLR RST

RET

;----------------------读取一RAM ------

T_6061: CLR RST

CLR LED3CLK

SETB RST

MOV A,R1

LCALL R_BIT

LCALL W_BIT

SETB LED3CLK

CLR RST

RET

;-----------------------------

R_1302: MOV R0,#SECOND

MOV R7,#7

MOV R1,#81H

R_1302A: CLR RST

CLR LED3CLK

SETB RST

MOV A,R1

LCALL R_BIT

LCALL W_BIT

MOV @R0,A

INC R0

INC R1

INC R1

SETB LED3CLK

CLR RST

DJNZ R7,R_1302A

RET

;------------------R_BIT------------------

R_BIT: MOV R4,#8

R_BIT1: RRC A

MOV LED4IO,C

SETB LED3CLK

CLR LED3CLK

DJNZ R4,R_BIT1

RET

;-------------------W_BIT-----------------------

W_BIT: MOV R4,#8

W_BIT1: MOV C,LED4IO

RRC A

SETB LED3CLK

CLR LED3CLK

DJNZ R4,W_BIT1

RET

;--------------------------------------------------

BCD_HEX:

MOV A,6FH

ANL A,#0FH

MOV B,A

MOV A,6FH

MOV 6FH,B

SWAP A

ANL A,#0FH

MOV B,#0AH

MUL AB

ADD A,6FH

;MOV 6FH,A

RET

HEX_BCD:

MOV A,6FH

MOV B,#10

DIV AB

SWAP A

ADD A,B

;MOV 6FH,A

RET

;-----写一地址---R1 为地址,R0 为数据----------

SETONE: CLR LED3CLK

CLR RST

CLR LED3CLK

NOP

SETB RST

MOV A,#8EH

LCALL R_BIT

MOV A,#00H

LCALL R_BIT

SETB LED3CLK

CLR RST

CLR LED3CLK

NOP

CLR RST

CLR LED3CLK

SETB RST

MOV A,R1

LCALL R_BIT

MOV A,R0

LCALL R_BIT

NOP

SETB LED3CLK

CLR RST

NOP

NOP

CLR RST

CLR LED3CLK

SETB RST

MOV A,#8EH

LCALL R_BIT

MOV A,#80H

LCALL R_BIT

SETB LED3CLK

CLR RST

RET

以上就是关于制作一个时钟显示程序全部的内容,包括:制作一个时钟显示程序、一个51单片机电子钟程序,求详细的解释啊急急急!!!、51单片机简单电子时钟程序,通过按键设置时间,有图,有解析!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10007685.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存