当前位置:网站首页>Blue Bridge Cup single chip microcomputer sixth temperature recorder
Blue Bridge Cup single chip microcomputer sixth temperature recorder
2022-07-02 03:38:00 【Super 561】
difficulty : How to record ten temperature data and display ; Define an array , To record temperature data , The number of temperature data displayed can be determined by the number of key presses
main.c
#include <STC15F2K60S2.H>
#include <DS1302.H>
#include <ONEWIRE.H>
void Timer2Init() //1 millisecond @12.000MHz
{
AUXR &= 0xFB; // Timer clock 12T Pattern
T2L = 0x18; // Set initial value of timing
T2H = 0xFC; // Set initial value of timing
AUXR |= 0x10; // Timer 2 Start timing
IE2|=0X04;
EA=1;
}
void Device_ctrl(unsigned char p2date,unsigned char p0date)
{
P0=p0date;
P2=P2&0X1F|p2date;
P2&=0X1F;
}
unsigned char smg_count;
unsigned char smg_du[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char interval_time[]={1,5,30,60};
unsigned int time;
unsigned char interval_display[8];
unsigned char time_display[8];
unsigned char caiji_display[8];
unsigned char temp_shouji[10];
unsigned char key_press=0;
unsigned char display_mode;
unsigned char shi,fen,miao;
unsigned int smg_count_flag;
unsigned int temp_duqu;
unsigned int duqu;
bit smg_flag;
bit temp_flag;
void set_sfm(unsigned char shi,unsigned char fen,unsigned char miao)
{
Write_Ds1302_Byte(0x8e,0);
Write_Ds1302_Byte(0x80,(miao/10*16)+miao%10);
Write_Ds1302_Byte(0x82,(fen/10*16)+fen%10);
Write_Ds1302_Byte(0x84,(shi/10*16)+shi%10);
Write_Ds1302_Byte(0X8e,0x80);
}
void start_temp()
{
init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
}
float read_temp()
{
unsigned char low,high;
float temp;
init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
low=Read_DS18B20();
high=Read_DS18B20();
temp=(high<<8)|low;
temp=temp*0.0625;
return temp;
}
unsigned int temp_count;
unsigned char temp_cishu=1;
unsigned char temp_number=1;
void temp_process()
{
if(temp_flag)
{
if(temp_count>time*1000)
{
temp_count=0;
temp_duqu=read_temp();
temp_shouji[temp_cishu]=temp_duqu;
temp_cishu++;
if(temp_cishu==10)
{
temp_cishu=0;
display_mode=2;
temp_flag=0;
Device_ctrl(0x80,~0X01);
}
start_temp();
}
}
}
void smg_show()
{
unsigned char i;
Device_ctrl(0XC0,0);
if(display_mode==0)
{
Device_ctrl(0xe0,~interval_display[i]);
}
if(display_mode==1)
{
Device_ctrl(0xe0,~time_display[i]);
}
if(display_mode==2)
{
Device_ctrl(0xe0,~caiji_display[i]);
}
Device_ctrl(0xc0,0x01<<i);
i=(i+1)%8;
}
void smg_process()
{
EA=0;
shi=Read_Ds1302_Byte(0x85);
fen=Read_Ds1302_Byte(0x83);
miao=Read_Ds1302_Byte(0x81);
shi=shi/16*10+shi%16;
fen=fen/16*10+fen%16;
miao=miao/16*10+miao%16;
EA=1;
if(smg_count>3)
{
smg_count=0;
interval_display[0]=0x00;
interval_display[1]=0x00;
interval_display[2]=0x00;
interval_display[3]=0x00;
interval_display[4]=0x00;
interval_display[5]=0x40;
caiji_display[0]=0x40;
caiji_display[3]=0x00;
caiji_display[4]=0x00;
caiji_display[5]=0x40;
if(display_mode==0)
{
time=interval_time[key_press];
interval_display[6]=smg_du[time/10];
interval_display[7]=smg_du[time%10];
}
if(display_mode==1)
{
time_display[0]=smg_du[shi/10];
time_display[1]=smg_du[shi%10];
time_display[3]=smg_du[fen/10];
time_display[4]=smg_du[fen%10];
time_display[6]=smg_du[miao/10];
time_display[7]=smg_du[miao%10];
if(smg_flag)
{
time_display[2]=0x00;
time_display[5]=0x00;
}
else
{
time_display[2]=0x40;
time_display[5]=0x40;
}
}
if(display_mode==2)
{
caiji_display[1]=smg_du[temp_number/10];
caiji_display[2]=smg_du[temp_number%10];
duqu=temp_shouji[temp_number];
caiji_display[6]=smg_du[duqu/10];
caiji_display[7]=smg_du[duqu%10];
}
}
}
unsigned char Trig_btn;
unsigned char Cont_btn;
unsigned int key_count;
void key_btn()
{
unsigned char readdate=P3^0xff;
Trig_btn=readdate&(Cont_btn^readdate);
Cont_btn=readdate;
}
void key_process()
{
if(key_count>10)
{
key_count=0;
key_btn();
if(Trig_btn==0x08)//s4
{
key_press++;
if(key_press==4)
{
key_press=0;
}
}
if(Trig_btn==0x04)//s5
{
if(display_mode==0)
{
display_mode=1;
temp_flag=1;
}
}
if(Trig_btn==0x02)//s6
{
if(display_mode==2)
{
Device_ctrl(0x80,0XFF);
temp_number++;
if(temp_number==11)
{
temp_number=1;
}
}
}
if(Trig_btn==0x01)//s7
{
if(display_mode==2)
{
display_mode=0;
}
}
}
}
void main()
{
Timer2Init();
set_sfm(23,59,50);
start_temp();
Device_ctrl(0xa0,0x00);
Device_ctrl(0x80,0xff);
while(1)
{
smg_process();
key_process();
temp_process();
}
}
void timer2service() interrupt 12
{
key_count++;
smg_count++;
smg_show();
smg_count_flag++;
temp_count++;
if(smg_count_flag>1000)
{
smg_count_flag=0;
smg_flag=~smg_flag;
}
}
DS1302.C
#include "ds1302.h"
// Write Bytes
void Write_Ds1302(unsigned char temp)
{
unsigned char i;
for (i=0;i<8;i++)
{
SCK = 0;
SDA = temp&0x01;
temp>>=1;
SCK=1;
}
}
// towards DS1302 Registers write data
void Write_Ds1302_Byte( unsigned char address,unsigned char dat )
{
RST=0; _nop_();
SCK=0; _nop_();
RST=1; _nop_();
Write_Ds1302(address);
Write_Ds1302(dat);
RST=0;
}
// from DS1302 Register reads data
unsigned char Read_Ds1302_Byte ( unsigned char address )
{
unsigned char i,temp=0x00;
RST=0; _nop_();
SCK=0; _nop_();
RST=1; _nop_();
Write_Ds1302(address);
for (i=0;i<8;i++)
{
SCK=0;
temp>>=1;
if(SDA)
temp|=0x80;
SCK=1;
}
RST=0; _nop_();
SCK=0; _nop_();
SCK=1; _nop_();
SDA=0; _nop_();
SDA=1; _nop_();
return (temp);
}
DS1302.H
#ifndef __DS1302_H
#define __DS1302_H
#include <STC15F2K60S2.H>
#include <intrins.h>
sbit SCK = P1^7;
sbit SDA = P2^3;
sbit RST = P1^3;
void Write_Ds1302(unsigned char temp);
void Write_Ds1302_Byte( unsigned char address,unsigned char dat );
unsigned char Read_Ds1302_Byte( unsigned char address );
#endif
ONEWIRE.C
#include "onewire.h"
// Single bus internal delay function
void Delay_OneWire(unsigned int t)
{
t=t*12;
while(t--);
}
// Single bus write operation
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);
}
// Single bus read operation
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 initialization
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_H
#include <STC15F2K60S2.H>
sbit DQ = P1^4;
void Delay_OneWire(unsigned int t);
void Write_DS18B20(unsigned char dat);
unsigned char Read_DS18B20(void);
bit init_ds18b20(void);
#endif
边栏推荐
- Verilog wire type
- Oracle 查看被锁的表和解锁
- Generate random numbers that obey normal distribution
- Kubernetes cluster storageclass persistent storage resource core concept and use
- PY3, PIP appears when installing the library, warning: ignoring invalid distribution -ip
- Didi open source Delta: AI developers can easily train natural language models
- Continuous assignment of Verilog procedure
- C#聯合halcon脫離halcon環境以及各種報錯解决經曆
- MySQL connection query and subquery
- C # joint halcon out of halcon Environment and various Error Reporting and Resolution Experiences
猜你喜欢
Docker installs canal and MySQL for simple testing and implementation of redis and MySQL cache consistency
汇率的查询接口
Yan Rong looks at how to formulate a multi cloud strategy in the era of hybrid cloud
Introduction to Robotics II. Forward kinematics, MDH method
滴滴开源DELTA:AI开发者可轻松训练自然语言模型
Eight steps of agile development process
MySQL connection query and subquery
0基础如何学习自动化测试?按照这7步一步一步来学习就成功了
蓝桥杯单片机省赛第十一届
知物由学 | 自监督学习助力内容风控效果提升
随机推荐
Continuous assignment of Verilog procedure
What do you know about stock selling skills and principles
[punch in] flip the string (simple)
C # joint halcon out of halcon Environment and various Error Reporting and Resolution Experiences
蓝桥杯单片机省赛第十二届第二场
Oracle 查看被锁的表和解锁
Kotlin basic learning 14
Network connection mode of QT
[mv-3d] - multi view 3D target detection network
Kubernetes cluster storageclass persistent storage resource core concept and use
Which of PMP and software has the highest gold content?
Didi open source Delta: AI developers can easily train natural language models
【DesignMode】原型模式(prototype pattern)
Large screen visualization from bronze to the advanced king, you only need a "component reuse"!
《MATLAB 神经网络43个案例分析》:第41章 定制神经网络的实现——神经网络的个性化建模与仿真
蓝桥杯单片机第四届省赛
h5中的页面显示隐藏执行事件
FFMpeg AVFrame 的概念.
MD5 of Oracle
Qt的网络连接方式