可调电子时钟程序

{ if(minute1>0)
minute1--;
else minute1=59;
}
while(!K3);
}
} break;*/
}
}
}
void main()
{
init();
while(1)
{
key_prc();
display();
}
}
sbit K1=P3^0; //设置键
sbit K2=P3^1; //增加键
sbit K3=P3^2; //减少键
void delay(unsigned n)//0.2毫秒
{
int x,y;
for(x=0;x<n;x++)
for(y=0;y<24;y++);
}
void init()//定时器初始化
{
unsigned char minute1=0,hour1=0,zdbs=0;
unsigned char b[4]={0xFE,0xFB,0xEF,0xBF};//扫描
unsigned char k=0;
unsigned int temp;//记录1000毫秒为1秒的变量
unsigned char M,S_flag,md=0;//M是模式,更新时间的4种模式加上正常模式S_flag闪烁标志
{ M++;
if(M==3)
M=0;
}
while(!K1);//等待按键释放
}
if(M!=0)
{
switch(M)
{
case 1://模式1——调时
{
if(K2==0)
{
delay(10);//延时去抖
if(K2==0) //加键按下
{
if(hour<23) hour++;
else hour=0;
}
}
}break;
case 4://模式4——闹钟调分
{
if(K2==0)
{
delay(10);
if(K2==0)
{
if(minute1<59)
minute1++;
else minute1=0;
}
while(!K2);
}
if(K3==0)
{
delay(10);//延时去抖
if(K3==0)//减键按下
if(minute<59) minute++;
else minute=0;
}
while(!K2);
}
if(K3==0)
{
delay(10);
if(K3==0)
{
if(minute>0) minute--;
else minute=59;
}
while(!K3);
}
} break;
/*case 3://模式3——闹钟调时
{
a[0]=led[hour/10];
a[1]=led[hour%10];
}
else
{
a[0]=led[11];
a[1]=led[11];
}
a[2]=led[minute/10];
a[3]=led[minute%10];
}break;
case 2:
{
a[0]=led[hour/10];
a[1]=led[hour%10];
while(!K2);//等待按键释放
}
if(K3==0)
{
delay(10);
if(K3==0)
{
if(hour> 0) hour--;
else hour=23;
}
while(!K3);
}
} break;
case 2://模式2——调分
{
if(K2==0)
{
delay(10);
if(K2==0)
{
{
if(K2==0)
{
delay(10);
if(K2==0)
{
if(hour1<23)
hour1++;
else hour1=0;
}
while(!K2);
}
if(K3==0)
{
delayቤተ መጻሕፍቲ ባይዱ10);
if(K3==0)
{
if(hour1>0)
hour1--;
else hour1=23;
}
while(!K3);
{
case 0:
{
a[0]=led[hour/10];//秒
if(md==0)
{
a[1]=led[hour%10]&0x7f;
}
else
{
a[1]=led[hour%10];
}
a[2]=led[minute/10]; //分
a[3]=led[minute%10];
}break;
case 1:
{
if(S_flag==1)
TH1=0xfc;//定时1ms
TL1=0x18;
temp++;
if(temp==1000)//配合定时器定时1s
{ temp=0;
second++;
}
if(temp==950)
{
md=~md;
}
if(second==60)
{
second=0;
if(minute<59)
{
minute++;
}
else {
M=0;
S_flag=0; //闪烁标志位
TMOD=0x10; //定时器1以方式1定时
TH1=0xfc;
TL1=0x18;
EA=1; //打开总中断
ET1=1;//允许定时器1中断
TR1=1;//开启定时器1 (开始定时计数)
}
void time1() interrupt 3//定时器1中断函数
{
#include <reg51.h>
unsigned char led[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x00,0xFF}; //用一维数组定义0-9
unsigned char a[4];
unsigned char second=0,minute=0,hour=12;
minute=0;
hour++;
hour%=24;
}
}
if(temp%250==0) //每250ms
S_flag=!S_flag;//闪烁标志位取反
if(k==4) k=0;
P0=a[k];
P2=b[k++];
delay(3);
P2=0xff;
}
void display()//显示函数
{
switch(M)
if(S_flag==1)
{
a[2]=led[minute/10];
a[3]=led[minute%10];
}
else
{
a[2]=led[11];
a[3]=led[11];
}
}break;
}
}
void key_prc()//按键
{
if(K1==0)
{
delay(10);//延时去抖
if(K1==0)//按K1进行模式切换
合集下载

DS1302可调的液晶电子时钟

DS1302可调的液晶电子时钟

长沙民政职业技术学院《C51程序设计》课程设计报告书题目: ds1302可调液晶显示时钟班级:自动化0935学号: 0931903352姓名:刘飞成绩:课程设计报告格式一、绪言(一)设计任务(简要说明设计题目的目的、意义、内容等)(二)提出方案及方案论证(这两个部分可分开也可合并,主要是就自己的课程设计题目提出一个或几个解决方案,并就不同的方案加以论证,从中精选出最佳的一个方案)(三)原理说明:根据方案论证的结果,简述设计原理,最好能给出较为明了的框图来说明整个设计思路。

二、系统设计(一)电路设计(二)程序流程图(三)C51程序设计,重要的代码要有注释。

三、仿真验证(一)系统仿真调试步骤及方法,写程序或设计电路时,不可避免的会出现这样或那样的错误,这部分主要简述一下自己在整个设计过程中采用的仿真调试步骤及方法,重点阐述对出现的问题的解决方法;四、总结书写格式:1、一级标题为宋体,三号,加粗;二级标题为宋体,小三,加粗;报告正文内容为宋体,小四;1.5倍行间距;一. 绪言1.在信息显示技术中,人们发现了信息数字化的重要作用和意义。

数字化的信息更加准确,同一性,更易传输和识别。

很多信息可以直接由数字表示,从而数字化信息显示又成为信息显示的又一个重要内容。

又从数字化显示发展到字符显示,它把人类特有的语言文字用于显示,这种显示与数字显示合在一起用途更广用量更大。

在这同时,人们还希望用图形和图像进行显示,且显示的内容为五彩缤纷,并且可以实时活动和具有三维立体效果。

这些在二十世纪尾声时都已经陆续实现。

LCD 的计算机器,半导体发光数码管显示(LED )的汽车计价器,商场的大屏幕广告。

这零零总总的各类显示正为你做着各种各样的服务,相信在不久的将来显示技术的发展将会为人类做出更大的贡献。

Ds1302时钟芯片现在流行的串行时钟电路很多,如DS1302、 DS1307、PCF8485等。

这些电路的接口简单、价格低廉、使用方便,被广泛地采用。

单片机电子闹钟程序亲自编写-可用

单片机电子闹钟程序亲自编写-可用

单片机电子闹钟程序(亲自编写-可用)————————————————————————————————作者:————————————————————————————————日期:学校电子钟,有闹钟功能,按键可调时间,可调打铃时间,打铃时间长短显示,每个模块有功能注释。

其中正常时间显示和闹钟时间显示可用一个开关来调整。

芯片选择STC89C52程序:#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//定义显示段码uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};uchar codebbtime[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar clock[]={0,0,0,0};uchar clock1[]={12,30,0};uchar weikong[6];uchar bbduration=4;uchar lingtime=9;//学校打铃时间组uchar shangwu1[]={8,30};uchar shangwu2[]={10,0};uchar shangwu3[]={10,20};uchar shangwu4[]={11,50};uchar xiawu1[]={13,30};uchar xiawu2[]={15,00};uchar xiawu3[]={15,15};uchar xiawu4[]={16,45};//按键定义sbit mode=P1^7;sbit sec_clr=P1^0;sbit min_set_add=P1^3;sbit min_set_sub=P1^4;sbit hour_set_add=P1^1;sbit hour_set_sub=P1^2;sbit bb_set_add=P1^5;sbit bb_set_sub=P1^6;sbit speaker=P2^6;//延时函数void delay(unsigned int t){while(t--);//时钟进位函数void clockjinwei(){clock[0]++;if(clock[0]==20){clock[1]++;clock[0]=0;if(clock[1]==60){clock[2]++;clock[1]=0;if(clock[2]==60){clock[3]++;clock[2]=0;if(clock[3]==24)clock[3]=0;}}}}//定时器0中断服务函数void timer0(void) interrupt 1 using 1 {TMOD=0x01;TH0=0x3c;TL0=0xb0;clockjinwei();}//时钟分位显示函数void fenwei(){weikong[0]=clock[3]/10;weikong[1]=clock[3]%10;weikong[2]=clock[2]/10;weikong[3]=clock[2]%10;weikong[4]=clock[1]/10;weikong[5]=clock[1]%10;}//闹钟分位显示函数void naofen(){weikong[0]=clock1[0]/10;weikong[1]=clock1[0]%10;weikong[2]=clock1[1]/10;weikong[3]=clock1[1]%10;weikong[4]=clock1[2]/10;weikong[5]=clock1[2]%10; }//闹钟定时显示函数void naozhongdisplay(){uchar z,s;uchar x=0x01;naofen();for(z=0;z<6;z++){P2=0;P0=table[weikong[z]];P2=x;x=_crol_(x,1);for(s=0;s<255;s++);}}//时钟显示函数void display(){uchar i,j;uchar x=0x01;fenwei();for(i=0;i<6;i++){P2=0;P0=table[weikong[i]];P2=x;x=_crol_(x,1);for(j=0;j<255;j++);}}//总显示函数void zhongxian(){if(mode==1)delay(100);if(mode==1)display();if(mode==0)delay(100);if(mode==0)naozhongdisplay();}//按键处理程序void key_set(){zhongxian();P1=0xff;if(min_set_add==0){delay(100);if(min_set_add==0){if(mode==1){clock[2]++;if(clock[2]==60){clock[2]=0;}while(min_set_add==0)zhongxian();}}if(mode==0){clock1[1]++;if(clock1[1]==60){clock1[1]=0;}while(min_set_add==0)zhongxian();}}//if(min_set_sub==0){delay(100);if(min_set_sub==0){if(mode==1){clock[2]--;if(clock[2]==0)clock[2]=59;}while(min_set_sub==0)zhongxian();if(mode==0){clock1[1]--;if(clock1[1]==0)clock1[1]=59;}while(min_set_sub==0)zhongxian();}}//if(hour_set_add==0){delay(100);if(hour_set_add==0){if(mode==1){clock[3]++;if(clock[3]==24){clock[3]=0;}while(hour_set_add==0)zhongxian();}if(mode==0){clock1[0]++;if(clock1[0]==24){clock1[0]=0;}while(hour_set_add==0)zhongxian();}}}//if(hour_set_sub==0){delay(100);if(hour_set_sub==0){if(mode==1){clock[3]--;if(clock[3]==0)clock[3]=23;}while(hour_set_sub==0)zhongxian();if(mode==0){clock1[0]--;if(clock1[0]==0)clock1[0]=23;}while(hour_set_sub==0)zhongxian();}}//if(sec_clr==0){delay(100);if(sec_clr==0){clock[1]=0;}while(sec_clr==0)zhongxian();}}//闹钟响铃函数void bb(){if(clock[1]<=bbduration){speaker=1;delay(100);speaker=0;}else speaker=0;}//打铃函数void daling(){if(clock[1]<=lingtime){speaker=1;delay(100);speaker=0;}else speaker=0;}//时间比较函数void bijiao(){if(clock[3]==shangwu1[0]){if(clock[2]==shangwu1[1])daling();}if(clock[3]==shangwu2[0]){if(clock[2]==shangwu2[1])daling();}if(clock[3]==shangwu3[0]){if(clock[2]==shangwu3[1])daling();}if(clock[3]==shangwu4[0]){if(clock[2]==shangwu4[1])daling();}if(clock[3]==xiawu1[0]){if(clock[2]==xiawu1[1])daling();}if(clock[3]==xiawu2[0]){if(clock[2]==xiawu2[1])daling();}if(clock[3]==xiawu3[0]){if(clock[2]==xiawu3[1])daling();}if(clock[3]==xiawu4[0]){if(clock[2]==xiawu4[1])daling();}}//闹钟比较void naobijiao(){if(clock[3]==clock1[0]){if(clock[2]==clock1[1]||clock[2]==clock1[1]+1||clock[2]==clock1[1]+2) bb();}}//响铃时长显示函数void bbtimeshow(){P3=bbtime[bbduration];if(bbduration>15)bbduration=0;}//响铃按键处理函数void bbtime_set(){bbtimeshow();if(bb_set_add==0){delay(100);if(bb_set_add==0)bbduration++;while(bb_set_add==0)bbtimeshow();}if(bb_set_sub==0){delay(100);if(bb_set_sub==0)bbduration--;while(bb_set_sub==0)bbtimeshow();}}//主程序void main(){EA=1;ET0=1;TR0=1;while(1){key_set();bijiao();bbtime_set();naobijiao();}}电路图:分四部分显示:如果在学习这个程序过程中有什么问题,可以发邮件到询问。

可调电子钟程序

可调电子钟程序

/*-----------------------------------------------名称:DS1302时钟数码管显示论坛:编写:shifang日期:2009.5修改:无内容:DS1302实时时钟数码管显示,只显示时间。

并通过4个按键加减小时、分钟,其他参数调节自行添加------------------------------------------------*/#include "ds1302.h"#include "18b20.h"#include "delay.h"#include "1602.h"sbit key0=P3^0;sbit key1=P3^1;sbit key2=P3^2;sbit key3=P3^3;#define KeyPort P1 //定义按键端口#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换//sbit c_select=P1^4;//调整键sbit c_up=P1^5;//sbit c_down=P1^6;//调下unsigned char ReadTimeFlag;//定义读时间标志unsigned char key00,pos,set;unsigned char flag;//显示模式标志位unsigned char num;unsigned int TempH,TempL,temp;//读取温度的临时变量unsigned int timer1;unsigned char position=0;unsigned char add=1;unsigned char TimeData[8]={1,1,1,1,1,1,1}; //存储显示时间(时分秒)的全局变量unsigned char DateData[8]; //存储显示时间(年月日)的全局变量unsigned char TempData[8]={0x30,0x30,'.',0x30,0x30,0xdf,'C'}; //存储显示温度的全局变量unsigned char pos1Data[3]={5,8,11};unsigned char pos2Data[3]={8,11,14};unsigned char MaxData[6]={100,13,32,24,60,60};void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数void keyadd (uchar,uchar);//加一void keydec (uchar,uchar);//减一unsigned char KeyScan(void);//键盘扫描void Init_Timer0(void);//定时器初始化void int0_init();//中断0初始化void int1_init();//int1初始化void time_change();/*------------------------------------------------主函数------------------------------------------------*/void main (void){flag=0;key00=0;add=1;pos=0;timer1=200;LcdReset();DelayMs(2000);Ds1302_Write_Time();Ds1302_Init();//Ds1302_Write_Time();if(Init_DS18B20()){ePutstr(9,1,"ERROR");}ePutstr(3,0,"20");ePutstr(0,1,TempData);ReadTimeFlag=0;temp=0;Init_Timer0();//int0_init();//中断初始化//int1_init();while (1) //主循环{if (key00==0){key0=1;if(!key0){ //按下相应的按键,数码管显示相应的码值DelayMs(20);if(!key0){key00=1;set=0;while (key0==0);}}Ds1302_Read_Time();DateData[0]=time_buf1[0]/10+0x30; //时DateData[1]=time_buf1[0]%10+0x30;DateData[2]='-'; //加入"-"DateData[3]=time_buf1[1]/10+0x30; //分DateData[4]=time_buf1[1]%10+0x30;DateData[5]='-';DateData[6]=time_buf1[2]/10+0x30; //秒DateData[7]=time_buf1[2]%10+0x30;TimeData[0]=time_buf1[3]/10+0x30; //时TimeData[1]=time_buf1[3]%10+0x30;TimeData[2]=':'; //加入"-"TimeData[3]=time_buf1[4]/10+0x30; //分TimeData[4]=time_buf1[4]%10+0x30;TimeData[5]=':';TimeData[6]=time_buf1[5]/10+0x30; //秒TimeData[7]=time_buf1[5]%10+0x30;if(ReadTimeFlag==1){ReadTimeFlag=0;temp=ReadTemperature();if(temp>6000) temp=0;TempData[0]=(temp/1000)+0x30;TempData[1]=(temp%1000)/100+0x30;TempData[2]='.';TempData[3]=(temp%100)/10+0x30;TempData[4]=temp%10+0x30;TempData[5]=0xdf;TempData[6]='C';}ePutstr(5,0,DateData);ePutstr(8,1,TimeData);ePutstr(0,1,TempData);}if (key00==1){key0=1;if(!key0){ //按下相应的按键,数码管显示相应的码值DelayMs(20);if(!key0){key00=0;pos=0;while (key0==0);}}key1=1;if(!key1){ //按下相应的按键,数码管显示相应的码值DelayMs(20);if(!key1){pos=pos+1;if(pos==6){pos=0;}while (key1==0);}}if(set==0){timer1--;DateData[0]=time_buf1[0]/10+0x30; //时DateData[1]=time_buf1[0]%10+0x30;DateData[2]='-'; //加入"-"DateData[3]=time_buf1[1]/10+0x30; //分DateData[4]=time_buf1[1]%10+0x30;DateData[5]='-';DateData[6]=time_buf1[2]/10+0x30; //秒DateData[7]=time_buf1[2]%10+0x30;TimeData[0]=time_buf1[3]/10+0x30; //时TimeData[1]=time_buf1[3]%10+0x30;TimeData[2]=':'; //加入"-"TimeData[3]=time_buf1[4]/10+0x30; //分TimeData[4]=time_buf1[4]%10+0x30;TimeData[5]=':';TimeData[6]=time_buf1[5]/10+0x30; //秒TimeData[7]=time_buf1[5]%10+0x30;ePutstr(5,0,DateData);ePutstr(8,1,TimeData);if (timer1==0){set=1;timer1=300;}}if(set==1){if(pos<3){ePutstr(pos1Data[pos],0," ");timer1--;}else{ePutstr(pos2Data[pos-3],1," ");timer1--;}if (timer1==0){set=0;timer1=300;}}key2=1;if(!key2){ //按下相应的按键,数码管显示相应的码值DelayMs(20);if(!key2){time_buf1[pos]=time_buf1[pos]+1;if (MaxData[pos]==time_buf1[pos]) time_buf1[pos]=0;time_buf[pos]=time_buf1[pos];Ds1302_Write_Time();while (key2==0);}}key3=1;if(!key3){ //按下相应的按键,数码管显示相应的码值DelayMs(20);if(!key3){if (time_buf1[pos]==0) time_buf1[pos]=MaxData[pos]-1;else time_buf1[pos]=time_buf1[pos]-1;time_buf[pos]=time_buf1[pos];Ds1302_Write_Time();while (key3==0);}}/*if(ReadTimeFlag==1){ReadTimeFlag=0;temp=ReadTemperature();if(temp>6000) temp=0;TempData[0]=(temp/1000)+0x30;TempData[1]=(temp%1000)/100+0x30;TempData[2]='.';TempData[3]=(temp%100)/10+0x30;TempData[4]=temp%10+0x30;TempData[5]=0xdf;TempData[6]='C';ePutstr(0,1,TempData);} */}}}/******************时间调整函数***************************//*********************************************/void int0_init()//int0初始化{IT0=1;EX0=1;EA=1;}/*********************************************/void int1_init()//int1初始化{IT1=1;EX1=1;EA=1;}/*------------------------------------------------显示函数,用于动态扫描数码管输入参数FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。

16组可调时钟程序

16组可调时钟程序

ORG 0000HAJMP MAINORG 001BHLJMP SERVEMAIN:mov p1,#0ffhMOV TMOD,#10H ;设置中断MOV 20H,#14HCLR AMOV 30H,AMOV 31H,AMOV 32H,ASETB ET1SETB EAMOV TH1,#3CHMOV TL1,#0B0HSETB TR1LCALL XIANSHI: LCALL JIANPAN ;调用键盘ACALL XIAN ;调用显示SJMP SHI;显示程序XIAN: MOV P0,#0FFH ;显示初始化MOV P2,#0FFHMOV R0,#30HMOV R1,#33HHUAN: MOV A,@R0 ;缓存程序SW AP AANL A,#0FHMOV @R1,AINC R1MOV A,@R0ANL A,#0FHMOV @R1,AINC R0INC R1CJNE R0,#33H,HUANMOV R0,#33HMOV A,#0dFHL1: MOV P2,A ;显示程序MOV DPTR,#TABMOV A,@R0MOVC A,@A+DPTRACALL DIANMOV P0,AMOV A,P2RR AINC R0MOV R1,#0FfHDJNZ R1,$MOV R1,#0FFHDJNZ R1,$MOV R1,#0FFHDJNZ R1,$MOV R1,#0FFHDJNZ R1,$MOV P0,#0FFHMOV P2,#0FFHCJNE R0,#39H, L1mov r0,#00hRETDIAN: CJNE R0,#34H,L2 ;打点CLR ACC.7L2: CJNE R0,#36H,L3CLR ACC.7L3: RETTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88h,83h,0c6h,0a1h,86h,8eh;键盘程序JIANPAN:LCALL KEY ;调用查询程序,对按键状态查询JNZ K1LCALL DELAYLJMP RETURNK1: LCALL DELAY ;延时确定按键是否真的被按下LCALL KEYJNZ K2LJMP RETURNK2: MOV R3,#0EFH ;扫描的初始列MOV R4,#00H ;列序号K3: MOV P3,R3 ;逐列扫描JB P3.3,L6mov A,#00HLJMP LKL6: JB P3.2,L4MOV A,#04HLJMP LKL4: JB P3.1,L5MOV A,#08HLJMP LKL5: JB P3.0,NEXTMOV A,#0CHLJMP LKNEXT: INC R4 ;修改列号JNB P3.7,RETURNMOV A,P3RL AMOV R3,ALJMP K3LK: ADD A,R4JnB TR1,ZM ;判断是不是进入设置状态CJNE A,#0FH,RETURN ;判断是否输入为设置键CPL TR1MOV R0,#33HK8: LCALL DELAY ;等待放开设置键mov 39h,r0lcall xian1mov r0,39hLCALL KEYJNZ K8ZM2: LCALL KEY ;调用查询程序,对按键状态查询JNZ K11LCALL DELAYmov 39h,r0lcall xian1mov r0,39hSJMP ZM2K11: L CALL DELAY ;延时确定按键是否真的被按下LCALL KEYJNZ K2SJMP ZM2ZM: CJNE A,#0FH,ZM1 ;设置是否结束,没输入设置键跳到zm1 ZM3: MOV R0,#30HMOV R1,#33HZM4: MOV A,@R1SW AP AINC R1ADD A,@R1MOV @r0,aINC R1INC R0CJNE R0,#33H,ZM4ljmp k4ZM1: MOV @R0,AINC R0K5: LCALL DELAYmov 39h,r0lcall xian1mov r0,39hLCALL KEYJNZ K5CJNE R0,#39H,ZM2LCALL ZM3K4: LCALL DELAYlcall xian1LCALL KEYJNZ K4CPL TR1LJMP RETURNRETURN:RETKEY: MOV P3,#0F0H ;查询是否有按键按下MOV A,P3CPL AANL A,#0f0HRETDELAY: MOV R6,#64HL7: MOV R7,#13HL8: NOPNOPNOPDJNZ R7,L8DJNZ R6,L7RETxian1: MOV R0,#33HMOV A,#0DFHL12: MOV P2,A ;显示程序MOV DPTR,#TABMOV A,@R0MOVC A,@A+DPTRACALL DIANMOV P0,AMOV A,P2RR AINC R0MOV R1,#0FFHDJNZ R1,$MOV R1,#0FFHDJNZ R1,$MOV R1,#0FFHDJNZ R1,$MOV R1,#0FFHDJNZ R1,$MOV P0,#0FFHMOV P2,#0FFHCJNE R0,#39H, L12RETSERVE:PUSH PSW ;中断程序PUSH ACCMOV TH1,#3CHMOV TL1,#0B0HDJNZ 20H,RETUNTMOV 20H,#14HMOV A,#01HADD A,32HDA AMOV 32H,ACJNE A,#60H,RETUNTMOV 32H,#00HMOV A,#01HADD A,31HDA AMOV 31H,ACJNE A,#60H,RETUNTMOV 31H,#00HMOV A,#01HADD A,30HDA AMOV 30H,ACJNE A,#24H,RETUNTMOV 30H,#00H RETUNT:POP ACCPOP PSWRETIEND。

51单片机可调时电子时钟程序

51单片机可调时电子时钟程序

//*******************基于51单片机的可调时电子时钟实验**********************////***电子时钟前两位为分钟,后两位为秒钟,逢38秒进1分***********************////***按下调时键第一次,秒钟闪烁,进入编辑状态******************************////***按下调时键第二次,分钟闪烁,进入编辑状态******************************////***按下调时键第三次,则确定**********************************************////***在编辑状态下,按下增/减按钮,闪烁位则进行加/减操作********************////***若在编辑状态下,按下增/减按钮时间超过1S,则闪烁位以0.5秒的速度自加1***//#include<reg51.h>#define uint unsigned int#define uchar unsigned charsbit wela1=P2^4;sbit wela2=P2^5;sbit wela3=P2^6;sbit wela4=P2^7;sbit key1=P1^5;sbit key2=P1^6;sbit key3=P1^7;//位定义uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar miao,fen,mode,modeflag;//模式标志位bit flag,flash,miao_long,fen_long;//*********延时子函数*************// void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}//********定时器T0和变量的初始化****// void T0_init(){miao=00;fen=00;mode=0;modeflag=0;flash=0;flag=0;P2=0x0f;//锁存允许接口全部置低电平TMOD=0x01;//选择定时器工作方式TH0=(65536-2000)/256;TL0=(65536-2000)%256;//赋初值EA=1;//开总中断ET0=1;//开定时器中断TR0=1;//启动定时器}//*******数码管显示子函数***********// void display(){if(flag==0)//闪烁标志位为0时不闪烁{wela1=1;P0=table[fen/10];wela1=0;wela2=1;P0=table[fen%10];wela2=0; //送数给分位显示wela3=1;P0=table[miao/10];wela3=0;wela4=1;P0=table[miao%10];wela4=0; //送数给秒位显示}else //闪烁标志位为1时闪烁{if(mode==1)//模式为1,即调秒{if(miao_long==0)//没有长按加、减按钮{if(flash==0)//当闪烁等于0时{wela3=1;P0=table[miao/10];wela3=0;wela4=1;P0=table[miao%10];wela4=0;}else//当闪烁等于1时{P0=0xff;wela3=0;wela4=1;P0=0xff;wela4=0;}}else//长按了加、减按钮{wela3=1;P0=table[miao/10];wela3=0;wela4=1;P0=table[miao%10];wela4=0;}}else//模式为2,即调分{wela3=1;P0=table[miao/10];wela3=0;wela4=1;P0=table[miao%10];wela4=0; //在秒位熄灭的那一刻,按下调时键时,要把秒位点亮if(fen_long==0)//没有长按加、减按钮{if(flash==0){P0=table[fen/10];wela1=0;wela2=1;P0=table[fen%10];wela2=0;}else{wela1=1;P0=0xff;wela1=0;wela2=1;P0=0xff;wela2=0;}}else//长按了加、减按钮{wela1=1;P0=table[fen/10];wela1=0;wela2=1;P0=table[fen%10];wela2=0;}}}}//*********key1按钮子程序**************//void key1_scan(){if(key1==0){delay(10);//消抖if(key1==0){modeflag++;//模式标志位自加1flag=1;//闪烁标志位打开mode++;//模式自加1if(mode==3)//只在模式1:调秒,模式2:调分中间选择mode=0;while(!key1);//松手检测}}else if(modeflag==3)//按键次数到了第三次{modeflag=0;flag=0;while(!key1);}}//************key2,key3子程序**************//void key23_scan(){if(key2==0)//加数的操作{delay(10);if(key2==0){if(mode==1)//如果是模式1的话,key2键对秒加1{miao++;if(miao==38)//38秒进1分miao=0;delay(1000);//若按下的时间超过了1S钟,则视为长按while(!key2){miao_long=1;miao++;if(miao==38)miao=0;delay(200);}miao_long=0;//跳出长按,恢复短按的状态}else if(mode==2)//如果是模式2的话,key2键对分加一{fen++;if(fen==60)//60分钟进1fen=0;delay(1000);//若按下的时间超过了1S钟,则视为长按while(!key2){fen_long=1;fen++;if(fen==60)fen=0;delay(200);}fen_long=0;//跳出长按,恢复短按的状态}}else if(key3==0)//减数的操作{delay(10);if(key3==0){if(mode==1)//如果是模式1的话,key3键对秒减一{miao--;if(miao==0)miao=37;delay(1000);//若按下的时间超过了1S钟,则视为长按while(!key3){miao_long=1;miao--;if(miao==0)miao=37;delay(200);}miao_long=0;//跳出长按,恢复短按的状态}else if(mode==2)//如果是模式2的话,key3键对分减一{fen--;if(fen==0)fen=59;delay(1000);//若按下的时间超过了1S钟,则视为长按while(!key3)fen_long=1;fen--;if(fen==0)fen=59;delay(200);}fen_long=0;//跳出长按,恢复短按的状态}}}}void main(){T0_init();while(1){key1_scan();key23_scan();}}void T0_time() interrupt 1{static uchar t=0;static uint i=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(flag==0)//时间显示调整{i++;if(i==20){i=0;miao++;if(miao==38){miao=0;fen++;if(fen==60){fen=0;}}}}t++;if(t==10){t=0;flash=~flash;//闪烁标志位取反}display();}。

用定时器做的可调电子钟

用定时器做的可调电子钟

用定时器做的可调电子钟#include <reg52.h>#include <51hei.h>#include <LCD1602.H>#define uchar unsigned charsbit neum=P3^2;sbit up=P3^6;sbit down=P3^7;uchar code table2[]="MON"; uchar code table3[]="TUE";uchar code table4[]="WED"; uchar code table5[]="THU"; uchar code table6[]="FRI";uchar code table7[]="SAT";uchar code table8[]="SUN";uchar count,neum_key,a,b;uchar miao,fen,shi,ri,yue,nian,zhou;void init_time(void){TMOD=0x01; //定时器0,工作方式1 TH0=(65536-50000)/256;TL0=(65536-50000)%256; //初值TR0=1;ET0=1;EA=1;}void write_sfm(uchar addr,uchar date) {uchar shi,ge;shi=date/10;ge=date%10;write_cmd(0x80+0x40+addr);write_dat(0x30+shi);write_dat(0x30+ge);}void write_nyr(uchar addr,uchar date1){uchar shi,ge;shi=date1/10;ge=date1%10;write_cmd(0x80+addr);write_dat(0x30+shi);write_dat(0x30+ge);}void keyscan(){if(neum==0){delay(5);if(neum==0){neum_key++;while(!neum);if(neum_key==1){TR0=0;write_cmd(0x80+0x40+11);write_cmd(0x0f);}}if(neum_key==2){write_cmd(0x80+0x40+8); write_cmd(0x0f);}if(neum_key==3){write_cmd(0x80+0x40+5); write_cmd(0x0f);}if(neum_key==4){write_cmd(0x80+13); write_cmd(0x0f);}if(neum_key==5){write_cmd(0x80+10); write_cmd(0x0f);}if(neum_key==6){write_cmd(0x80+7);write_cmd(0x0f);}if(neum_key==7){write_cmd(0x80+4);write_cmd(0x0f);}if(neum_key==8){neum_key=0;write_cmd(0x0c);TR0=1;}}///////////////////////////////////////////////////加减计算/////////////////////////////////////////秒if(neum_key==1){if(up==0){delay(5);if(up==0){while(!up);miao++;if(miao==60){miao=0;}write_sfm(10,miao);write_cmd(0x80+0x40+11); }}if(down==0){delay(5);if(down==0){while(!down);miao--;if(miao==(-1)){miao=59;}write_sfm(10,miao);write_cmd(0x80+0x40+11);}}}///////////////////////分//////////////////////////if(neum_key==2){if(up==0){delay(5);if(up==0){while(!up);fen++;if(fen==60){fen=0;}write_sfm(7,fen);write_cmd(0x80+0x40+8);}}if(down==0){delay(5);if(down==0){while(!down);fen--;if(fen==(-1)){fen=59;}write_sfm(7,fen);write_cmd(0x80+0x40+8);}}}///////////////////////////////////////////时if(neum_key==3){if(up==0){delay(5);if(up==0){while(!up);shi++;if(shi==24){shi=0;}write_sfm(4,shi);write_cmd(0x80+0x40+5);}}if(down==0){delay(5);if(down==0){while(!down);shi--;if(shi==(-1)){shi=23;}write_sfm(4,shi);write_cmd(0x80+0x40+5);}}}/////////////////////////////////////////// 星期if(neum_key==4){if(up==0){delay(5);if(up==0){a++;while(!up);if(a==1)write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table2[b]);}}}if(a==2){write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table3[b]); }}if(a==3){write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table4[b]);}if(a==4){write_cmd(0x80+13); for(b=0;b<3;b++){write_dat(table5[b]); }}if(a==5){write_cmd(0x80+13); for(b=0;b<3;b++){write_dat(table6[b]); }}if(a==6){write_cmd(0x80+13); for(b=0;b<3;b++)write_dat(table7[b]);}}if(a==7){a=0;write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table8[b]);}}}if(down==0) //减星期{delay(5);if(down==0){a++;while(!down);if(a==1)write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table8[b]);}}}if(a==2){write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table7[b]); }}if(a==3){write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table6[b]);}if(a==4){write_cmd(0x80+13); for(b=0;b<3;b++){write_dat(table5[b]); }}if(a==5){write_cmd(0x80+13); for(b=0;b<3;b++){write_dat(table4[b]); }}if(a==6){write_cmd(0x80+13); for(b=0;b<3;b++)write_dat(table3[b]);}}if(a==7){a=0;write_cmd(0x80+13);for(b=0;b<3;b++){write_dat(table2[b]);}}}}/////////////////////////////////////////// 日if(neum_key==5){if(up==0){delay(5);if(up==0){while(!up);ri++;if(ri==32){ri=0;}write_nyr(9,ri);write_cmd(0x80+10); }}if(down==0){delay(5);if(down==0){while(!down);ri--;if(ri==0){ri=31;}write_nyr(9,ri);write_cmd(0x80+10);}}}/////////////////////////////////////////// yue if(neum_key==6){if(up==0){delay(5);if(up==0){while(!up);yue++;if(yue==13){yue=1;}write_nyr(6,yue);write_cmd(0x80+7);}}if(down==0){delay(5);if(down==0){while(!down);yue--;if(yue==0){yue=12;}write_nyr(6,yue);write_cmd(0x80+7);}}}/////////////////////////////////////////// nian if(neum_key==7){if(up==0){delay(5);if(up==0){while(!up);nian++;if(nian==41){nian=13;}write_nyr(3,nian);write_cmd(0x80+4); }}if(down==0){delay(5);if(down==0){while(!down);nian--;if(nian==12){nian=41;}write_nyr(3,nian);write_cmd(0x80+4);}}}}void main(void){init_time();init_lcd();while(1){keyscan();if(count==20){count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24) //周{shi=0;ri++;if(ri==32){ri=0;yue++;if(yue==13){yue=0;nian++;if(nian==99){nian=0;}write_nyr(4,nian);}write_nyr(7,yue);}write_nyr(10,ri);}write_sfm(4,shi);}write_sfm(7,fen);}write_sfm(10,miao);}}}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;}/////////////////////////////////////////以下是lcd1602头文件////////////////////////////////#ifndef __LCD1602_H__#define __LCD1602_H__sbit rs=P3^5;sbit rw=P2^7;sbit en=P3^4;#define lcd_data P0unsigned char num;unsigned char code table[]=" 2013-12-30 SUN";unsigned char code table1[]=" 22:58:57 ";void delay(unsigned char z) //延时函数{unsigned char x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_cmd(unsigned char cmd) {rs=0;rw=0;delay(2);lcd_data=cmd;delay(2);en=1;delay(2);en=0;}void write_dat(unsigned char dat) {rs=1;rw=0;delay(2);lcd_data=dat;delay(2);en=1;delay(2);en=0;void init_lcd(void){guanled();guandz();write_cmd(0x38);write_cmd(0x0c);write_cmd(0x06);write_cmd(0x01);write_cmd(0x80);for(num=0;num<16;num++) {write_dat(table[num]);}write_cmd(0x80+0x40);for(num=0;num<16;num++) {write_dat(table1[num]); }}#endif。

51单片机c语言电子钟已加入调时闹铃整点报时功能

51 单片机 c 语言电子钟(已加入调时、闹铃、整点报时功能)效果图:程序如下://51 单片机c 语言电子钟(已加入调时、闹铃、整点报时功能)#include<reg51.h>#include<absacc.h>#define uchar unsigned char #define uint unsigned int /* 七段共阴管显示定义*/ // 此表为LED 的字模,共阴数码管0-9 - uchar code dispcode[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; // 段码控制/* 定义并初始化变量*/ uchar seconde=0;// 秒uchar minite=0;// 分uchar hour=12; // 时uchar shi=0;// 闹铃功能uchar fen=0;uchar bjcs;// 报警次数sbit P1_0=P1A0; //second 调整定义sbit P1_仁P1A1;//minite 调整定义sbit P1_2二PM2; //hour 调整定义sbitP1_5=P1A5; //整点报时sbit P1_3=P1A3; //闹铃功能,调整时间sbit P1_6=P1A6; //调整时sbit P1_7=P1A7; //调整分sbit P1_4=P1A4; //关闭闹铃/* 函数声明*/void delay(uint k ); // 延时子程序void time_pro( ); // 时间处理子程序void display( ); // 显示子程序void keyscan( ); // 键盘扫描子程序/*xx 子程序*/void delay (uint k){uchar j;while((k--)!=0){for(j=0;j<125;j++){;}}}/* 时间处理子程序*/void time_pro(void){if(seconde==60){seconde=0; minite++;if(minite==60){minite=0;hour++;if(hour==24){hour=0;}}}}/* 显示子程序*/void display(void){if(P1_3==1){P2=0XFE;PO=dispcode[seco nde%10];/秒个位delay(1);P2=0XFD;P0=dispcode[seco nde/10];〃秒十位delay(1);P2=0XFB;P0=dispcode[10];// 间隔符-delay(1);P2=0XF7;P0=dispcode[mi nite%10];〃分个位delay(1);P2=0XEF;P0=dispcode[minite/10];// 分十位delay(1);P2=0XDF;P0二dispcode[10];〃间隔符-delay(1);P2=0XBF;P0=dispcode[hour%10];〃时个位delay(1);P2=0X7F;P0=dispcode[hour/10];// 时十位delay(1);}}/* 键盘扫描子程序*/void keyscan(void){if(P1_0==0)//秒位的调整{delay (30);if(P1_0==0){seconde++;if(seconde==60){seconde=0;}}delay(250);}if(P1_仁=0)//分位的调整{delay(30);if(P1_1==0){minite++;if(minite==60){minite=0;}}delay(250);}if(P1_2==0)// 时位的调整{delay(30);if(P1_2==0){hour++;if(hour==24){hour=0;}}delay(250);}}/* 整点报警*/void zhengdian (void){if((seconde==0)&(minite==0))〃整点报时{P1_5=0;delay(1000);P1_5=1;}}/* 定时闹钟*/void dingshi(void){if(P1_3==0)〃按住P1_3BU不松,显示闹铃设置界面,分别按P1_6、P1_7设置闹铃时间。

按键可调电子时钟

dispbuf[4]=minute/10;
dispbuf[6]=hour%10;
dispbuf[7]=hour/10;
}
}
void main()
{
T0_init();
while(1)
key_check();
}
TH0=0x06;
TL0=0xΒιβλιοθήκη 6;TR0=1;ET0=1;
EA=1;
}
void key_check()
{
if(P1_0==0)//??
{
delayms(10);
if(P1_0==0)
{
second++;
if(second==60) second=0;
dispbuf[0]=second%10;
dispbuf[1]=second/10;
uchar dispbitcnt;
uchar second,minute,hour;
uint tcnt;
uchar mstcnt;
void delayms(uint z)
{
uchar i;
while(--z)
for(i=121;i>0;i--);
}
void T0_init(void)
{
TMOD=0x02;
电子时钟电子时钟设计电子时钟字体电子时钟软件单片机电子时钟程序电子时钟flash单片机电子时钟桌面电子时钟电子时钟电路图电子时钟程序
Proteus原理图
C51源程序
#include <regx51.h>
#define uchar unsigned char
#define uint unsigned int

简易电子时钟程序

unsigned char second1,minit1,hour1;//闹钟时分秒
unsigned char hour_zd;//整点小时记录
void delay(void)
{
unsigned int i;
for(i=0;i<100;i++);
}
void display(void)
{
if(disp_ms==0)
default: break;
}
}
else
{
switch(timer_cc)
{
case (0x01): {if(hour1==23) hour1=23; else hour1++; break;}
case (0x02): {if(minit1==59) minit1=59; else minit1++; break;}
delay();
P2=0xFF;
}
else
{
if(time_cc==0x01)
{
if(disp_sdt==1)
P0=led[hour/10];
else
P0=0x00;
P2=0xFE;
delay();
P2=0xFF;
if(disp_sdt==1)
P0=led[hour%10];
else
P0=0x00;
{
case (0x01): { hour++; if(hour>23) hour=23; break;}
case (0x02): { minit++; if(minit>59) minit=59; break;}
case (0x03): { second++;if(second>59) second=59; break;}

1602可调时钟程序

#include<reg51.h>#define uint unsigned int#define uchar unsigned char#define LCD P0void init_1602(void);void check_busy(void);void write_com(uchar com);void write_dat(uchar dat);void keyscan(void);sbit s0=P2^0;sbit s1=P2^1;sbit s2=P2^2;sbit RS=P2^4;sbit RW=P2^5;sbit EN=P2^6;bit flag;uchar hour,minute,second,ge,shi,day,month,year,week;uchar code tab[]=" 2014/09/06 MON";uchar tab0[]=" 00:00:00";uchar code week1[]="SUN";uchar code week2[]="MON";uchar code week3[]="TUE";uchar code week4[]="WED";uchar code week5[]="THU";uchar code week6[]="FRI";uchar code week7[]="SAT";/********************延时z毫秒****************/void delayms(uint z){int i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}/********************1cd1602初始化******************/ void init_1602(void){delayms(15);write_com(0x38);delayms(5);write_com(0x0c);delayms(5);write_com(0x06);delayms(5);write_com(0x01);delayms(5);write_com(0x80);delayms(5);}/**********读忙*****************/ void check_busy(void){uchar x;x=0x80;while(x&0x80){RS=0;RW=1;EN=1;x=LCD;EN=0;delayms(5);}}/**************写指令**************/ void write_com(uchar com){check_busy();RS=0;RW=0;EN=1;LCD=com;EN=0;delayms(5);}/**************写数据**************/ void write_dat(uchar dat){check_busy();RS=1;RW=0;EN=1;LCD=dat;EN=0;delayms(5);}/**************定时器初始化*******/ void init_time(void){uint i;TMOD=0x01;TH0=(65536-5000)/256;TL0=(65536-5000)%256;TR0=1;ET0=1;EA=1;for(i=0;i<15;i++){write_dat(tab[i]);delayms(5);}write_com(0x80+0x40);for(i=0;i<16;i++){write_dat(tab0[i]);delayms(5);}}/*********时分秒转换**********/ void write_tran(uchar add,uchar dat) {shi=dat/10;ge=dat%10;write_com(0x80+0x40+add);write_dat(shi+0x30);write_dat(ge+0x30) ;}/*********年月日转换**********/ void write_nyr(uchar addd,uchar datt) {shi=datt/10;ge=datt%10;write_com(0x80+addd);write_dat(shi+0x30);write_dat(ge+0x30);}/*********写星期**********/ void write_week(uchar adttt){uchar i;write_com(0x80+12);switch(adttt){case 1: for(i=0;i<3;i++){write_dat(week1[i]);delayms(5);}break;case 2: for(i=0;i<3;i++){write_dat(week2[i]);delayms(5);}break;case 3: for(i=0;i<3;i++){write_dat(week3[i]);delayms(5);}break;case 4: for(i=0;i<3;i++){write_dat(week4[i]);delayms(5);}break;case 5: for(i=0;i<3;i++){write_dat(week5[i]);delayms(5);}break;case 6: for(i=0;i<3;i++){write_dat(week6[i]);delayms(5);}break;case 7: for(i=0;i<3;i++){write_dat(week7[i]);delayms(5);}break;}}/*********主函数**********/void main(){init_1602();init_time();write_com(0x80);while(1){keyscan();}}/*********按键扫描**********/void keyscan(){uchar num;if(s0==0){delayms(5);if(s0==0){num++;delayms(5);while(s0!=0);switch(num){case 1: TR0=0;write_com(0x80+0x40+11);delayms(180);write_com(0x0f); break;case 2: write_com(0x80+0x40+8);delayms(180); break;case 3: write_com(0x80+0x40+5);delayms(250); break;case 4: write_com(0x80+10);delayms(200); break;case 5: write_com(0x80+7);delayms(180); break;case 6: write_com(0x80+4);delayms(200); break;case 7: write_com(0x80+12);delayms(180); break;case 8: num=0;TR0=1;write_com(0x0c);delayms(200); break;}}}if(num!=0){if(s1==0){delayms(5);if(s1==0);{delayms(5);while(s1!=0);switch(num){case 1: second++;//write_com(0x10);delayms(180);if(second>=60){second=0;}write_tran(10,second);break;case 2: minute++;delayms(180);if(minute>=60)minute=0;write_tran(7,minute);break;case 3: hour++;delayms(180);if(hour>=24)hour=0;write_tran(4,hour);break;case 4: day++;delayms(180);if(day>31)day=1;write_nyr(9,day);break;case 5: month++;delayms(180);if(month>12)month=1;write_nyr(6,month);break;case 6: year++;delayms(180);if(year>99)year=0;write_nyr(3,year);break;case 7: week++;delayms(180);if(week>=8)week=1;write_week(week);break;}}}if(s2==0){delayms(5);if(s2==0);{delayms(5);while(s2!=0);switch(num){case 1: second--;delayms(180);if(second<=0)second=59;write_tran(10,second);break;case 2: minute--;delayms(180);if(minute<0)minute=59;write_tran(7,minute);break;case 3: hour--;delayms(180);if(hour<0)hour=23;write_tran(4,hour);break;case 4: day--;delayms(180);if(day<1)day=31;write_nyr(9,day);break;case 5: month--;delayms(180);if(month<1)month=12;write_nyr(6,month);break;case 6: year--;delayms(180);if(year<0)year=99;write_nyr(3,year);break;case 7: week--;delayms(180);if(week<1)week=7;write_week(week);break;}}}}}/*********定时器中断**********/void timer() interrupt 1{int num;TH0=(65536-50000)/256;TL0=(65536-50000)%256;num++;if(num==16){num=0;second++;if(second==60){second=0;minute++;if(minute==60){minute=0;hour++;if(hour==24){hour=0;day++;week++;if(week>=8)week=1;if(day==32){day=1;month++;if(month==13){month=1;year++;if(year>99)year=0;write_nyr(3,year);}write_nyr(6,month);}write_nyr(9,day);write_week(week);}write_tran(4,hour);}write_tran(7,minute);}write_tran(10,second);}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档