如果有用请点赞,还会继续更新的

题目:


思路:

通过Ds1302来实现 时间的控制,onewrie.c来读取温度,并且显示出来。按键的功能和判断已经很常规了,要注意的就是在延时的时候,数码管显示的函数依旧要工作。

源代码:

main.c

#include"reg52.h"
#include"intrins.h"
#include"onewire.h"
void LCD_display();
int i;
sfr AUXR=0x8e;
int count;
unsigned int temp;
int time_h=23,time_m=59,time_s=50;
int nao_h=0,nao_m=0,nao_s=0;
int key_4,key_5,key_6=0,key_7=0;
char code xianshi[13]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf,0xc6};
sbit S4=P3^3;
sbit S5=P3^2;
sbit S6=P3^1;
sbit S7=P3^0;
sbit L1=P0^7;
void Delay4ms()     //@11.0592MHz
{unsigned char i, j;_nop_();i = 44;j = 4;do{while (--j);} while (--i);
}void Delay200us()      //@11.0592MHz
{unsigned char i, j;i = 3;j = 35;do{while (--j);} while (--i);
}void choose138(int n)
{switch(n){case(0):P2=(P2&0x1f)|0x00;break;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;}
}
void clean()
{choose138(4);P0=0xff;choose138(5);P0=0x00;}
//-----------------------------------------------------------time
void Timer0Init(void)       //5毫秒@11.0592MHz
{AUXR |= 0x80;     //定时器时钟1T模式TMOD &= 0xF0;       //设置定时器模式TL0 = 0x00;       //设置定时初始值TH0 = 0x28;       //设置定时初始值TF0 = 0;      //清除TF0标志TR0 = 1;      //定时器0开始计时ET0=1;EA=1;
}void serverTimer0Init() interrupt 1
{TL0 = 0x00;       //设置定时初始值TH0 = 0x28;       //设置定时初始值count++;if(count==200){count=0;time_s++;if(time_s>=60){time_s=0;time_m++;if(time_m>=60){time_m=0;time_h++;if(time_h>=24){time_h=0;}}}}
}
//-----------------------------------------------------------
//-----------------------------------------------------------nao zhong gong neng
int x,tongyi=1;
void Delay195ms()       //@11.0592MHz
{unsigned char i, j;_nop_();_nop_();i = 130;j = 20;do{ LCD_display();while (--j);} while (--i);
}void Delay5ms()        //@11.0592MHz
{unsigned char i, j;i = 54;j = 199;do{LCD_display();while (--j);} while (--i);
}void naozhong(void)
{if(time_s==nao_s&&time_h==nao_h&&time_m==nao_m){for(x=0;x<12;x++){LCD_display();if(S4==0||S5==0||S6==0||S7==0)break;else{P0=0xff;choose138(4);L1=~L1;Delay195ms();choose138(4);P0=0xff;Delay195ms();}}}
}
//-----------------------------------------------------------
//-----------------------------------------------------------wen du
void Read_temp()
{char LSB,HSB;init_ds18b20();Write_DS18B20(0xcc);Write_DS18B20(0x44);Delay_OneWire(200);init_ds18b20();Write_DS18B20(0xcc);Write_DS18B20(0xbe);LSB=Read_DS18B20();HSB=Read_DS18B20();temp=HSB<<4;temp=temp|(LSB>>4);
}//-----------------------------------------------------------
//-----------------------------------------------------------an jian
void an_jian(void)
{if(S7==0){Delay5ms();if(S7==0){key_7++;if(key_7==4){key_7=0;}}while(!S7);}if(S6==0&&key_7==0){Delay5ms();if(S6==0){key_6++;if(key_6==4){key_6=0;}}while(!S6);}//----------------------------if(key_7==1&&S5==0){Delay5ms();if(S5==0){time_h++;if(time_h==24){time_h=0;}}while(!S5);}if(key_7==2&&S5==0){Delay5ms();if(S5==0){time_m++;if(time_m==60){time_m=0;}}while(!S5);}if(key_7==3&&S5==0){Delay5ms();if(S5==0){time_m++;if(time_s==60){time_s=0;}}while(!S5);}//----------------------------//----------------------------if(key_7==1&&S4==0){Delay5ms();if(S4==0){time_h--;if(time_h==-1){time_h=24;}}while(!S4);}if(key_7==2&&S4==0){Delay5ms();if(S4==0){time_m--;if(time_m==-1){time_m=60;}}while(!S4);}if(key_7==3&&S4==0){Delay5ms();if(S4==0){time_m--;if(time_s==-1){time_s=0;}}while(!S4);}//----------------------------//----------------------------if(key_6==1&&S5==0){Delay5ms();if(S5==0){nao_h++;if(nao_h==24){nao_h=0;}}while(!S5);}if(key_6==2&&S5==0){Delay5ms();if(S5==0){nao_m++;if(nao_m==60){nao_m=0;}}while(!S5);}if(key_6==3&&S5==0){Delay5ms();if(S5==0){nao_s++;if(nao_s==60){nao_s=0;}}while(!S5);}//----------------------------//----------------------------if(key_6==1&&S4==0){Delay5ms();if(S4==0){nao_h--;if(nao_h==-1){nao_h=24;}}while(!S4);}if(key_6==2&&S4==0){Delay5ms();if(S4==0){nao_m--;if(nao_m==-1){nao_m=59;}}while(!S4);}if(key_6==3&&S4==0){Delay5ms();if(S4==0){nao_s--;if(nao_s==-1){nao_s=59;}}while(!S4);}//----------------------------
}
//-----------------------------------------------------------
//-----------------------------------------------------------smg xian_shi
void SMG_display(int wei,int dat)
{choose138(6);P0=0x80>>(wei-1);choose138(7);P0=xianshi[dat];
}
void LCD_display()
{if(key_6==0&&key_7==0&&S4==0){Delay4ms();while(S4==0){SMG_display(1,12);Delay200us();SMG_display(2,temp%10);Delay200us();SMG_display(3,temp/10);Delay200us();SMG_display(4,10);Delay200us();SMG_display(5,10);Delay200us();SMG_display(6,10);Delay200us();SMG_display(7,10);Delay200us();SMG_display(8,10);Delay200us();}}if(key_6==0&&key_7==0){SMG_display(1,time_s%10);Delay200us();SMG_display(2,time_s/10);Delay200us();SMG_display(3,11);Delay200us();SMG_display(4,time_m%10);Delay200us();SMG_display(5,time_m/10);Delay200us();SMG_display(6,11);Delay200us();SMG_display(7,time_h%10);Delay200us();SMG_display(8,time_h/10);Delay200us();}//-------------------------if(key_6==0&&key_7==1){i++;if(i<=70){SMG_display(1,time_s%10);Delay200us();SMG_display(2,time_s/10);Delay200us();SMG_display(3,11);Delay200us();SMG_display(4,time_m%10);Delay200us();SMG_display(5,time_m/10);Delay200us();SMG_display(6,11);Delay200us();SMG_display(7,10);Delay200us();SMG_display(8,10);Delay200us();}else if(i>70&&i<140){SMG_display(1,time_s%10);Delay200us();SMG_display(2,time_s/10);Delay200us();SMG_display(3,11);Delay200us();SMG_display(4,time_m%10);Delay200us();SMG_display(5,time_m/10);Delay200us();SMG_display(6,11);Delay200us();SMG_display(7,time_h%10);Delay200us();SMG_display(8,time_h/10);Delay200us();}else if(i>=70)i=0;}if(key_6==0&&key_7==2){i++;if(i<=70){SMG_display(1,time_s%10);Delay200us();SMG_display(2,time_s/10);Delay200us();SMG_display(3,11);Delay200us();SMG_display(4,10);Delay200us();SMG_display(5,10);Delay200us();SMG_display(6,11);Delay200us();SMG_display(7,time_h%10);Delay200us();SMG_display(8,time_h/10);Delay200us();}else if(i>70&&i<140){SMG_display(1,time_s%10);Delay200us();SMG_display(2,time_s/10);Delay200us();SMG_display(3,11);Delay200us();SMG_display(4,time_m%10);Delay200us();SMG_display(5,time_m/10);Delay200us();SMG_display(6,11);Delay200us();SMG_display(7,time_h%10);Delay200us();SMG_display(8,time_h/10);Delay200us();}else if(i>=70)i=0; }if(key_6==0&&key_7==3){i++;if(i<=70){SMG_display(1,10);Delay200us();SMG_display(2,10);Delay200us();SMG_display(3,11);Delay200us();SMG_display(4,time_m%10);Delay200us();SMG_display(5,time_m/10);Delay200us();SMG_display(6,11);Delay200us();SMG_display(7,time_h%10);Delay200us();SMG_display(8,time_h/10);Delay200us();}else if(i>70&&i<140){SMG_display(1,time_s%10);Delay200us();SMG_display(2,time_s/10);Delay200us();SMG_display(3,11);Delay200us();SMG_display(4,time_m%10);Delay200us();SMG_display(5,time_m/10);Delay200us();SMG_display(6,11);Delay200us();SMG_display(7,time_h%10);Delay200us();SMG_display(8,time_h/10);Delay200us();}else if(i>=70)i=0;}//-------------------------if(key_7==0&&key_6==1){       i++;if(i<=70){SMG_display(1,nao_s%10);Delay200us();SMG_display(2,nao_s/10);Delay200us();SMG_display(3,11);Delay200us();SMG_display(4,nao_m%10);Delay200us();SMG_display(5,nao_m/10);Delay200us();SMG_display(6,11);Delay200us();SMG_display(7,10);Delay200us();SMG_display(8,10);Delay200us();}else if(i>70&&i<140){SMG_display(1,nao_s%10);Delay200us();SMG_display(2,nao_s/10);Delay200us();SMG_display(3,11);Delay200us();SMG_display(4,nao_m%10);Delay200us();SMG_display(5,nao_m/10);Delay200us();SMG_display(6,11);Delay200us();SMG_display(7,nao_h%10);Delay200us();SMG_display(8,nao_h/10);Delay200us();}else if(i>=70)i=0;}if(key_7==0&&key_6==2){i++;if(i<=70){SMG_display(1,nao_s%10);Delay200us();SMG_display(2,nao_s/10);Delay200us();SMG_display(3,11);Delay200us();SMG_display(4,10);Delay200us();SMG_display(5,10);Delay200us();SMG_display(6,11);Delay200us();SMG_display(7,nao_h%10);Delay200us();SMG_display(8,nao_h/10);Delay200us();}else if(i>70&&i<140){SMG_display(1,nao_s%10);Delay200us();SMG_display(2,nao_s/10);Delay200us();SMG_display(3,11);Delay200us();SMG_display(4,nao_m%10);Delay200us();SMG_display(5,nao_m/10);Delay200us();SMG_display(6,11);Delay200us();SMG_display(7,nao_h%10);Delay200us();SMG_display(8,nao_h/10);Delay200us();}else if(i>=70)i=0;}if(key_7==0&&key_6==3){i++;if(i<=70){SMG_display(1,10);Delay200us();SMG_display(2,10);Delay200us();SMG_display(3,11);Delay200us();SMG_display(4,nao_m%10);Delay200us();SMG_display(5,nao_m/10);Delay200us();SMG_display(6,11);Delay200us();SMG_display(7,nao_h%10);Delay200us();SMG_display(8,nao_h/10);Delay200us();}else if(i>70&&i<140){SMG_display(1,nao_s%10);Delay200us();SMG_display(2,nao_s/10);Delay200us();SMG_display(3,11);Delay200us();SMG_display(4,nao_m%10);Delay200us();SMG_display(5,nao_m/10);Delay200us();SMG_display(6,11);Delay200us();SMG_display(7,nao_h%10);Delay200us();SMG_display(8,nao_h/10);Delay200us();}else if(i>=70)i=0;}//-------------------------
}
//-----------------------------------------------------------
void main()
{clean();Timer0Init();while(1){LCD_display();an_jian();Read_temp();naozhong();}
}

onewire.c

/*程序说明: 单总线驱动程序软件环境: Keil uVision 4.10 硬件环境: CT107单片机综合实训平台(外部晶振12MHz) STC89C52RC单片机日    期: 2011-8-9
*/
#include "reg52.h"sbit DQ = P1^4;  //单总线接口//单总线延时函数
void Delay_OneWire(unsigned int t)  //STC89C52RC
{t=t*12;while(t--);
}//通过单总线向DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{unsigned char i;for(i=0;i<8;i++){DQ = 0;DQ = dat&0x01;Delay_OneWire(5);DQ = 1;dat >>= 1;}Delay_OneWire(5);
}//从DS18B20读取一个字节
unsigned char Read_DS18B20(void)
{unsigned char i;unsigned char dat;for(i=0;i<8;i++){DQ = 0;dat >>= 1;DQ = 1;if(DQ){dat |= 0x80;}        Delay_OneWire(5);}return dat;
}//DS18B20设备初始化
bit init_ds18b20(void)
{bit initflag = 0;DQ = 1;Delay_OneWire(12);DQ = 0;Delay_OneWire(80);DQ = 1;Delay_OneWire(10); initflag = DQ;     Delay_OneWire(5);return initflag;
}

onewire.h

#ifndef __ONEWIRE_H
#define __ONEWIRE_Hunsigned char rd_temperature(void);  //; ;
void Delay_OneWire(unsigned int t);
void Write_DS18B20(unsigned char dat);
unsigned char Read_DS18B20(void);
bit init_ds18b20(void);
#endif

**

码字不容易,点个赞再走!!!!

**

蓝桥杯单片机第八届 电子表(定时器中断)相关推荐

  1. 蓝桥杯单片机——用NE555定时器来测量频率

    蓝桥杯单片机比赛第十届以及十二届(第二场)中会用到NE555来测量频率以及频率周期,平时也会用到所以这个是必须要掌握的知识,简单来介绍一下芯片和编程用法. 芯片简介 NE555是属于555系列的计时I ...

  2. 蓝桥杯单片机stc15f2k61s2矩阵按键中断扫描代码

    使用中断函数进行矩阵按键的扫描,在<手把手教你学51单片机>上面的代码修改了一下.感觉这个代码写的比较好. #include<stc15f2k60s2.h>#define uc ...

  3. 蓝桥杯单片机比赛学习:6、中断系统之定时器中断的基本原理

    上节我们讲了中断的外部中断,基本的了解了一下中断,这一节我们继续来学习中断系统的定时器中断基本原理,本节很重要无论是在比赛中还是在单片机.嵌入式等的学习上都有着很重要的地位.如对本作者有兴趣可以去我主 ...

  4. 关于第八届蓝桥杯单片机初赛----电子钟设计的题目分析和编程思路分享

    关于第八届蓝桥杯单片机初赛----电子钟设计的题目分析和编程思路分享 1.前言 蓝桥杯单片机比赛,对于初试者,比如那些没有接触51系列单片机,或者很少编程训练的人而言,确实很有挑战力.而即使对于有基础 ...

  5. 第八届蓝桥杯单片机省赛----程序题

    main.c程序 #include<stc15f2k60s2.h> #include "ds18b20.h" #include <ds1302.h>#def ...

  6. 蓝桥杯单片机学习过程记录(二十九)第八届国赛超声波测距机

    蓝桥杯单片机学习过程记录(二十九)第八届国赛超声波测距机 题目如下: 已完成 应用的内容: EEPROM. 定时器.数码管 led灯,独立按键 DA电压输出 超声波测距 /* ------------ ...

  7. 蓝桥杯单片机比赛学习:5、中断系统之外部中断的基本原理

    中断的基本概念 百度百科上是这样说的,当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作 ...

  8. 【蓝桥杯单片机组模块】14、STC15定时器2的PWM使用

    微信搜索:ReCclay,也可免费阅读博主蓝桥系列所有文章,后台回复"代码"即可获取蓝桥所有备赛代码!关注博主公众号,还可拥有加入博主粉丝群实时沟通技术难题.免费下载CSDN资源等 ...

  9. 蓝桥杯单片机比赛学习:7、中断系统之串口中断的基本原理

    这一节我们讲一下蓝桥杯单片机比赛中断中的最后一个模块--串口.中断的其他模块在我的个人主页(4条消息) Do My Best的博客_CSDN博客-蓝桥杯单片机比赛学习领域博主有兴趣的可以去学习. 通信 ...

最新文章

  1. Anaconda3-5.3.0-Windows-x86_64
  2. 解决:elasticsearch 更新报错:The number of object passed must be even but was [1]
  3. 推荐Android学习-农民伯伯
  4. 世界级数学家加入华为,曾获菲尔兹奖 网友:终于知道数理化的重要了
  5. 如何把Sql Server2005 数据库转换成Access
  6. javascript二维数组
  7. 【架构师面试题库1】—etcd高可用集群搭建
  8. android调用摄像头拍照
  9. linux下查看CPU、内存、磁盘信息
  10. 【SQL】通过rowid查找及删除重复记录
  11. java 检测ip网速_使用Speedtest CLI测试你的网速
  12. oeasy教您玩转vim - 88 - # 自动命令autocmd
  13. 用自己写的六爻装卦程序了占卜一下 2010 年
  14. PHP编写poc,代码实战/萌新如何编写sql注入的poc
  15. 跨境电商o2o模式的表现形式有哪些?
  16. 黑客为“炫技”随机攻击,结果被“顺着网线”抓了
  17. 关于termux在手机上搭载Linux系统,python,ssh
  18. mac os 开启redis_在Mac os x 安装 Redis
  19. python图片保存jpg、show变成bmp_Python 图片格式转换
  20. 华为mate20 android,华为mate20pro开箱

热门文章

  1. Arduino uno循迹小车总结
  2. 京东物流收购德邦股份:崔维星将套现40亿 失去公司控股权
  3. 做了一个获取全国大中城市天气的小工具
  4. Nike最新AR应用可扫描测量消费者脚大小,提供合适鞋码
  5. vue中使用国际化i8n切换语言
  6. 【安卓学习笔记】百度地图的使用
  7. KD2671系列智能数字绝缘电阻测试仪
  8. MIO神达A700/A701ROM刷机教程
  9. Android手机应用程序转移到SD卡操作
  10. 【MEIF:ℓ1-ℓ0混合分解】