📄 24m点阵时钟.c
字号:
}
//显示诗歌
void Show_Song(){
uchar i;
Put_Song(8,0);
Move_Up();
for(i=0;i<3;i++){
Put_Song(0,i*8);
Put_Song(8, (i+1)*8);
Move_Up();
}
Put_Song(0, 3*8);
Put_Tdispram(8);
Move_Up();
}
//======================
//*滚动显示所有信息*
//======================
void Show_All_Info(){
Put_Adispram(8);
Move_Down(); //切换效果
Put_Adispram(0);
Put_Ydispram(8); //XXXX年
Show_All_Word();
Put_Ydispram(0); //XXXX年
Put_Ddispram(8);
Show_All_Word();
Put_Ddispram(0);
Put_Kdispram(8);
Show_All_Word();
Read_Temperature();
Disp_Temperature();
Put_Kdispram(0);
Put_Tdispram(8);
Show_All_Word();
Read_Temperature();
Disp_Temperature();
Put_Tdispram(0);
Put_sTEMP(8);
Show_All_Word();
Read_TIME();
Put_sTEMP(0);
Put_Tdispram(8);
Move_Up();
}
/*us级延时函数 */
/*******************************************************************/
void Delay(unsigned int num)
{
num = num*2;
while( --num ) ;
}
/*初始化ds1820 */
/*******************************************************************/
Init_DS18B20(void)
{
DQ = 1 ; //DQ复位
Delay(8) ; //稍做延时
DQ = 0 ; //单片机将DQ拉低
Delay(90) ; //精确延时 大于 480us
DQ = 1 ; //拉高总线
Delay(8) ;
presence = DQ ; //如果=0则初始化成功 =1则初始化失败
Delay(100) ;
DQ = 1 ;
return(presence) ; //返回信号,0=presence,1= no presence
}
/* 读一个字节 */
/*******************************************************************/
ReadOneChar(void)
{
unsigned char i = 0 ;
unsigned char dat = 0 ;
for (i = 8 ; i > 0 ; i--)
{
DQ = 0 ; // 给脉冲信号
dat >>= 1 ;
DQ = 1 ; // 给脉冲信号
if(DQ)
dat |= 0x80 ;
Delay(4) ;
}
return (dat) ;
}
/* 写一个字节 */
/*******************************************************************/
WriteOneChar(unsigned char dat)
{
unsigned char i = 0 ;
for (i = 8 ; i > 0 ; i--)
{
DQ = 0 ;
DQ = dat&0x01 ;
Delay(5) ;
DQ = 1 ;
dat>>=1 ;
}
}
/* 读取温度 */
/*******************************************************************/
Read_Temperature(void)
{
Init_DS18B20() ;
WriteOneChar(0xCC) ; // 跳过读序号列号的操作
WriteOneChar(0x44) ; // 启动温度转换
Init_DS18B20() ;
WriteOneChar(0xCC) ; //跳过读序号列号的操作
WriteOneChar(0xBE) ; //读取温度寄存器
temp_data[0] = ReadOneChar() ; //温度低8位
temp_data[1] = ReadOneChar() ; //温度高8位
}
/* 数据转换与温度显示 */
/*******************************************************************/
void Disp_Temperature()
{
temp_ram[4]=temp_data[0]&0x0f ;
temp_ram[0]=ditab[temp_ram[4]]+0x30 ; //查表得小数位的值
temp_ram[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4) ;
temp_ram[3]=temp_ram[4]/100+0x30 ;
temp_ram[1]=temp_ram[4]%100 ;
temp_ram[2]=temp_ram[1]/10+0x30 ;
temp_ram[1]=temp_ram[1]%10+0x30 ;
if(temp_ram[3]==0x30) //高位为0,不显示
{
temp_ram[3]=0x20 ;
if(temp_ram[2]==0x30) //次高位为0,不显示
temp_ram[2]=0x20 ;
}
}
/*
void start_time(){
Time.Year = 0x10;
Time.Month = 0x7;
Time.Day = 0x23;
Time.Hour = 0x21;
Time.Minute = 0x58;
Time.Second = 0x0;
Time.Week = 0x5;
}*/
//=================
//****校时函数****
//=================
void Change_Time(){
//
MSG_MV = MSG_MV_L;
move_times = 0;
start_word=0;
TMP_TIME = Time.Hour;
TR1 = 1; //开启定时器1闪烁
do{
switch(CHANGE){
case CHG_HOUR:
case CHG_MIN:
case CHG_SEC:
Put_Tdispram(0);
break;
case CHG_MON:
case CHG_DAY:
Put_Ddispram(0);
break;
case CHG_WEEK:
Put_Kdispram(0);
break;
case CHG_YEAR:
Put_Ydispram(0);
break;
default:
break;
}
Show_sWord();
//if(!key_done)
// ReadKey1();
}while(ReadKey1() != KEY3_S && exit < 10); //MSG_KEY
Change_obj(); //保证退出校时无隐身
HIDE = 0;
key_done = 0;
//key_done = 1; //按键事件处理完成
TR1 = 0; //关闭定时器1闪烁
}
//==================
//****对象切换****
//==================
void Change_obj(){
switch(CHANGE){
case CHG_HOUR:
if(Time.Hour == 0xcc)
Time.Hour = TMP_TIME;
TMP_TIME = Time.Minute;
break;
case CHG_MIN:
if(Time.Minute == 0xcc)
Time.Minute = TMP_TIME;
TMP_TIME = Time.Second;
break;
case CHG_SEC:
if(Time.Second == 0xcc)
Time.Second = TMP_TIME;
TMP_TIME = Time.Month;
break;
case CHG_MON:
if(Time.Month == 0xcc)
Time.Month = TMP_TIME;
TMP_TIME = Time.Day;
break;
case CHG_DAY:
if(Time.Day == 0xcc)
Time.Day = TMP_TIME;
TMP_TIME = Time.Week;
break;
case CHG_WEEK:
if(Time.Week == 0xcc)
Time.Week = TMP_TIME;
TMP_TIME = Time.Year;
break;
case CHG_YEAR:
if(Time.Year == 0xcc)
Time.Year = TMP_TIME;
TMP_TIME = Time.Hour;
break;
default:
break;
}
}
//==================
//****加加函数****
//功能: 0x19 ++ =0x20
//==================
uchar Add_num(char *num){
++(*num);
if(((*num) & 0x0f) == 0x0a){
*num += 0x10;
*num &= 0xf0;
}
return *num;
}
//==================
//****校时加加****
//==================
void Add_Time(){
switch(CHANGE){
case CHG_HOUR:
if(HIDE){
if(Add_num(&TMP_TIME) == 0x24)
TMP_TIME= 0;
}
else{
if(Add_num(&Time.Hour) == 0x24)
Time.Hour = 0;
}
break;
case CHG_MIN:
if(HIDE){
if(Add_num(&TMP_TIME) == 0x60)
TMP_TIME= 0;
}
else{
if(Add_num(&Time.Minute) == 0x60)
Time.Minute= 0;
}
break;
case CHG_SEC:
if(HIDE){
if(Add_num(&TMP_TIME) == 0x60)
TMP_TIME= 0;
}
else{
if(Add_num(&Time.Second) == 0x60)
Time.Second = 0;
}
break;
case CHG_MON:
if(HIDE){
if(Add_num(&TMP_TIME) == 0x13)
TMP_TIME= 0;
}
else{
if(Add_num(&Time.Month) == 0x13)
Time.Month= 1;
}
break;
case CHG_DAY:
if(HIDE){
if(Add_num(&TMP_TIME) == 0x32)
TMP_TIME= 0;
}
else{
if(Add_num(&Time.Day) == 0x32)
Time.Day= 0;
}
break;
case CHG_WEEK:
if(HIDE){
if(Add_num(&TMP_TIME) == 0x08)
TMP_TIME= 1;
}
else{
if(Add_num(&Time.Week) == 0x08)
Time.Week= 1;
}
break;
case CHG_YEAR:
if(HIDE){
if(Add_num(&TMP_TIME) == 0xa0)
TMP_TIME = 0;
}
else{
if(Add_num(&Time.Year) == 0xa0)
Time.Year = 0;
}
//if(Add_num(&Time.Year) == 0x24)
// Time.Year= 0;
break;
default:
break;
}
}
//==================
//****减减函数****
//功能: 0x20 -- =0x19
//==================
uchar Cut_num(char *num){
--(*num);
if(((*num)&0x0f) == 0x0f){
//*num -= 0x10;
*num &= 0xf9;
}
//if((*num == 0xf9)
//*num = 0x99;
return *num;
}
//==================
//****校时减减****
//==================
void Cut_Time(){
switch(CHANGE){
case CHG_HOUR:
if(HIDE){
if(Cut_num(&TMP_TIME) == 0xf9)
TMP_TIME= 0x23;
}
else{
if(Cut_num(&Time.Hour) == 0xf9)
Time.Hour = 0x23;
}
break;
case CHG_MIN:
if(HIDE){
if(Cut_num(&TMP_TIME) == 0xf9)
TMP_TIME= 0x59;
}
else{
if(Cut_num(&Time.Minute) == 0xf9)
Time.Minute= 0x59;
}
break;
case CHG_SEC:
if(HIDE){
if(Cut_num(&TMP_TIME) == 0xf9)
TMP_TIME= 0x59;
}
else{
if(Cut_num(&Time.Second) == 0xf9)
Time.Second = 0x59;
}
break;
case CHG_MON:
if(HIDE){
if(Cut_num(&TMP_TIME) == 0xf9)
TMP_TIME= 0x12;
}
else{
if(Cut_num(&Time.Month) == 0xf9)
Time.Month= 0x12;
}
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -