
脚本说明:
第一步:把如下代码加入<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单片机简单电子时钟程序,通过按键设置时间,有图,有解析!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)