1.题目要求
2.代码实现
首先J13选为IO模式,J5端2、3短接(独立按键)
2.1 main.c
#include "reg52.h"
#include "ds1302.h"
#include "onewire.h"
#define u8 unsigned char
#define u16 unsigned int
sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;
u8 pos_T=0;
u8 set=0;
u8 pos_C=0;
u8 clock_set=0;
u8 led_shan=0;
u8 t_ms;
u16 count_t;
u8 count=0;
u8 code smgduan[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
u8 alarm_clock[3]={
0x00,0x00,0x00};
void SelectHC573(u8 channel)
{
switch(channel)
{
case 4:
P2=(P2&0x1f)|0x80;
break;
case 5:
P2=(P2&0x1f)|0xa0;
break;
case 6:
P2=(P2&0x1f)|0xc0;
break;
case 7:
P2=(P2&0x1f)|0xe0;
break;
case 0:
P2=0x00;
break;
}
}
void delay(u16 t)
{
while(t--);
}
//******数码管模块***********************
void DelaySMG(u16 t)
{
while(t--);
}
void DisplayBit(u8 pos,u8 dat)
{
SelectHC573(6);
P0=0x01<<pos;
SelectHC573(7);
P0=dat;
DelaySMG(1000);
P0=0xff;
SelectHC573(0);
}
void Display_temp()
{
DisplayBit(5,smgduan[temp/10]);DelaySMG(500);
DisplayBit(6,smgduan[temp%10]);DelaySMG(500);
DisplayBit(7,0xc6);DelaySMG(500); // 1100 0110
}
void DisplaySMG_Time()
{
if(pos_T==0)
{
DisplayBit(0,smgduan[Timer[2]/16]);DelaySMG(500);
DisplayBit(1,smgduan[Timer[2]%16]);DelaySMG(500);
DisplayBit(2,0xbf);DelaySMG(500);
DisplayBit(3,smgduan[Timer[1]/16]);DelaySMG(500);
DisplayBit(4,smgduan[Timer[1]%16]);DelaySMG(500);
DisplayBit(5,0xbf);DelaySMG(500);
DisplayBit(6,smgduan[Timer[0]/16]);DelaySMG(500);
DisplayBit(7,smgduan[Timer[0]%16]);DelaySMG(500);
}
else if(pos_T==1)
{
DisplayBit(2,0xbf);DelaySMG(500);
DisplayBit(3,smgduan[Timer[1]/16]);DelaySMG(500);
DisplayBit(4,smgduan[Timer[1]%16]);DelaySMG(500);
DisplayBit(5,0xbf);DelaySMG(500);
DisplayBit(6,smgduan[Timer[0]/16]);DelaySMG(500);
DisplayBit(7,smgduan[Timer[0]%16]);DelaySMG(500);
if(Timer[0]%16%2 == 0)
{
DisplayBit(0,smgduan[Timer[2]/16]);DelaySMG(500);
DisplayBit(1,smgduan[Timer[2]%16]);DelaySMG(500);
}
else if(Timer[0]%16%2 != 0)
{
DisplayBit(0,0xff);DelaySMG(500);
DisplayBit(1,0xff);DelaySMG(500);
}
}
else if(pos_T==2)
{
DisplayBit(0,smgduan[Timer[2]/16]);DelaySMG(500);
DisplayBit(1,smgduan[Timer[2]%16]);DelaySMG(500);
DisplayBit(2,0xbf);DelaySMG(500);
DisplayBit(5,0xbf);DelaySMG(500);
DisplayBit(6,smgduan[Timer[0]/16]);DelaySMG(500);
DisplayBit(7,smgduan[Timer[0]%16]);DelaySMG(500);
if(Timer