当前位置:网站首页>The first game of the 12th Blue Bridge Cup single chip microcomputer provincial competition
The first game of the 12th Blue Bridge Cup single chip microcomputer provincial competition
2022-07-02 03:38:00 【Super 561】




main.c
#include <STC15F2K60S2.H>
#include <IIC.H>
#include <ONEWIRE.H>
#define NO_KEY 0XFF
#define KEY_STATE0 0
#define KEY_STATE1 1
#define KEY_STATE2 2
unsigned int temp_count;
float temp;
unsigned int temp_now=0;
unsigned int temp_set=25;
unsigned int dianya;
bit dianya_mode=1;
void Init_temp()
{
init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
}
float read_temp()
{
float date;
unsigned char low,high;
init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
low=Read_DS18B20();
high=Read_DS18B20();
date=(high<<8)|low;
date=date*0.0625;
return date;
}
void temp_process()
{
if(temp_count>100)
{
temp_count=0;
temp=read_temp();
temp=temp*100;
temp_now=temp;
Init_temp();
}
}
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 int key_count;
unsigned char display_mode;
unsigned char key_scan()
{
static unsigned char key_state=KEY_STATE0;
unsigned char key_value=0,key_temp;
unsigned char key1,key2;
P30=0;P31=0;P32=0;P33=0;P34=1;P35=1;P42=1;P44=1;
if(P44==0){key1=0X70;}
if(P42==0){key1=0XB0;}
if(P35==0){key1=0XD0;}
if(P34==0){key1=0XE0;}
if((P44==1)&&(P42==1)&&(P35==1)&&(P34==1)){key1=0XF0;}
P30=1;P31=1;P32=1;P33=1;P34=0;P35=0;P42=0;P44=0;
if(P30==0){key2=0X0E;}
if(P31==0){key2=0X0D;}
if(P32==0){key2=0X0B;}
if(P33==0){key2=0X07;}
if((P30==1)&&(P31==1)&&(P32==1)&&(P33==1)){key2=0X0F;}
key_temp=key1|key2;
switch(key_state)
{
case KEY_STATE0:
if(key_temp!=NO_KEY)
{
key_state=KEY_STATE1;
}
break;
case KEY_STATE1:if(key_temp==NO_KEY)
{
key_state=KEY_STATE0;
}
else
{
switch(key_temp)
{
case 0x77:key_value=4;break;
case 0x7b:key_value=5;break;
case 0x7d:key_value=6;break;
case 0x7e:key_value=7;break;
case 0xb7:key_value=8;break;
case 0xbb:key_value=9;break;
case 0xbd:key_value=10;break;
case 0xbe:key_value=11;break;
case 0xd7:key_value=12;break;
case 0xdb:key_value=13;break;
case 0xdd:key_value=14;break;
case 0xde:key_value=15;break;
case 0xe7:key_value=16;break;
case 0xeb:key_value=17;break;
case 0xed:key_value=18;break;
case 0xee:key_value=19;break;
}
key_state=KEY_STATE2;
}
break;
case KEY_STATE2:
if(key_temp==NO_KEY)
{
key_state=KEY_STATE0;
}break;
}
return key_value;
}
void key_process()
{
unsigned char key_val;
if(key_count>10)
{
key_val=key_scan();
switch(key_val)
{
case 4:
display_mode++;
if(display_mode==3)
{
display_mode=0;
}
break;
case 5:
dianya_mode=~dianya_mode;
break;
case 6:break;
case 7:break;
case 8:
if(display_mode==1)
{
if(temp_set>0)
{
temp_set--;
}
}
break;
case 9:
if(display_mode==1)
{
if(temp_set<99)
{
temp_set++;
}
}
break;
case 10:break;
case 11:break;
case 12:break;
case 13:break;
case 14:break;
case 15:break;
case 16:break;
case 17:break;
case 18:break;
case 19:break;
}
}
}
unsigned char smg_display[8];
unsigned char smg_du[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned int smg_count;
void smg_show()
{
unsigned char i;
Device_ctrl(0xc0,0);
Device_ctrl(0xe0,~smg_display[i]);
Device_ctrl(0xc0,0x01<<i);
i=(i+1)%8;
}
void smg_process()
{
if(smg_count>3)
{
smg_count=0;
if(display_mode==0)
{
smg_display[0]=0x39;
smg_display[1]=0x00;
smg_display[2]=0x00;
smg_display[3]=0x00;
smg_display[4]=smg_du[temp_now/1000];
smg_display[5]=smg_du[temp_now/100%10]|0x80;
smg_display[6]=smg_du[temp_now/10%10];
smg_display[7]=smg_du[temp_now%10];
}
if(display_mode==1)
{
smg_display[0]=0x73;
smg_display[1]=0x00;
smg_display[2]=0x00;
smg_display[3]=0x00;
smg_display[4]=0x00;
smg_display[5]=0x00;
smg_display[6]=smg_du[temp_set/10];
smg_display[7]=smg_du[temp_set%10];
}
if(display_mode==2)
{
smg_display[0]=0x77;
smg_display[1]=0x00;
smg_display[2]=0x00;
smg_display[3]=0x00;
smg_display[4]=0x00;
smg_display[5]=smg_du[dianya/100]|0x80;
smg_display[6]=smg_du[dianya/10%10];
smg_display[7]=smg_du[dianya%10];
}
}
}
unsigned int da_count;
void da(unsigned char date)
{
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(0x40);
IIC_WaitAck();
IIC_SendByte(date);
IIC_WaitAck();
IIC_Stop();
}
void da_process()
{
if(da_count>5)
{
da_count=0;
if(dianya_mode)
{
if(temp_now<temp_set*100)
{
da(0);
dianya=0;
}
else
{
da(255);
dianya=500;
}
}
else
{
if(temp_now<2000)
{
da(51);
dianya=100;
}
else if(temp_now<4000)
{
dianya=temp_now*3/20-200;
da(dianya/2);
}
else
{
da(51*4);
dianya=400;
}
}
}
}
unsigned char led_ctrl=0xff;
unsigned int led_count;
void led_process()
{
if(led_count>5)
{
led_count=0;
if(dianya_mode==1)
{
led_ctrl&=~0x01;
}
else
{
led_ctrl|=0x01;
}
if(display_mode==0)
{
led_ctrl&=~0x02;
}
else
{
led_ctrl|=0x02;
}
if(display_mode==1)
{
led_ctrl&=~0x04;
}
else
{
led_ctrl|=0x04;
}
if(display_mode==2)
{
led_ctrl&=~0x08;
}
else
{
led_ctrl|=0x08;
}
Device_ctrl(0x80,led_ctrl);
}
}
void main()
{
Timer2Init();
Device_ctrl(0xa0,0x00);
Device_ctrl(0x80,0xff);
Init_temp();
while(1)
{
key_process();
temp_process();
smg_process();
da_process();
led_process();
}
}
void timer2service() interrupt 12
{
key_count++;
smg_count++;
temp_count++;
da_count++;
led_count++;
smg_show();
}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
iic.c
#include "iic.h"
#define DELAY_TIME 5
//I2C Bus internal delay function
void IIC_Delay(unsigned char i)
{
do{_nop_();}
while(i--);
}
//I2C Bus start signal
void IIC_Start(void)
{
SDA = 1;
SCL = 1;
IIC_Delay(DELAY_TIME);
SDA = 0;
IIC_Delay(DELAY_TIME);
SCL = 0;
}
//I2C Bus stop signal
void IIC_Stop(void)
{
SDA = 0;
SCL = 1;
IIC_Delay(DELAY_TIME);
SDA = 1;
IIC_Delay(DELAY_TIME);
}
// Send a reply or non reply signal
void IIC_SendAck(bit ackbit)
{
SCL = 0;
SDA = ackbit;
IIC_Delay(DELAY_TIME);
SCL = 1;
IIC_Delay(DELAY_TIME);
SCL = 0;
SDA = 1;
IIC_Delay(DELAY_TIME);
}
// Waiting for an answer
bit IIC_WaitAck(void)
{
bit ackbit;
SCL = 1;
IIC_Delay(DELAY_TIME);
ackbit = SDA;
SCL = 0;
IIC_Delay(DELAY_TIME);
return ackbit;
}
//I2C The bus sends a byte of data
void IIC_SendByte(unsigned char byt)
{
unsigned char i;
for(i=0; i<8; i++)
{
SCL = 0;
IIC_Delay(DELAY_TIME);
if(byt & 0x80) SDA = 1;
else SDA = 0;
IIC_Delay(DELAY_TIME);
SCL = 1;
byt <<= 1;
IIC_Delay(DELAY_TIME);
}
SCL = 0;
}
//I2C The bus receives a byte of data
unsigned char IIC_RecByte(void)
{
unsigned char i, da;
for(i=0; i<8; i++)
{
SCL = 1;
IIC_Delay(DELAY_TIME);
da <<= 1;
if(SDA) da |= 1;
SCL = 0;
IIC_Delay(DELAY_TIME);
}
return da;
}
iic.h
#ifndef __IIC_H
#define __IIC_H
#include <STC15F2K60S2.H>
#include "intrins.h"
sbit SDA = P2^1;
sbit SCL = P2^0;
void IIC_Start(void);
void IIC_Stop(void);
bit IIC_WaitAck(void);
void IIC_SendAck(bit ackbit);
void IIC_SendByte(unsigned char byt);
unsigned char IIC_RecByte(void);
#endif边栏推荐
- Account management of MySQL
- Gradle foundation | customize the plug-in and upload it to jitpack
- VS2010 plug-in nuget
- Global and Chinese market of bone adhesives 2022-2028: Research Report on technology, participants, trends, market size and share
- 蓝桥杯单片机第六届温度记录器
- Large screen visualization from bronze to the advanced king, you only need a "component reuse"!
- C#聯合halcon脫離halcon環境以及各種報錯解决經曆
- Getting started with MQ
- Download and use of the super perfect screenshot tool snipaste
- Basic syntax of unity script (7) - member variables and instantiation
猜你喜欢

It took me only 3 months to jump out of the comfort zone and become an automated test engineer for 5 years

Eight steps of agile development process

NLog use
![[golang] leetcode intermediate bracket generation & Full Permutation](/img/93/ca38d97c721ccba2505052ef917788.jpg)
[golang] leetcode intermediate bracket generation & Full Permutation

Account management of MySQL

MD5 of Oracle

What do you know about stock selling skills and principles

Pycharm2021 delete the package warehouse list you added
![[HCIA continuous update] overview of dynamic routing protocol](/img/03/83c883afb63b7c63f6879b5513bac3.jpg)
[HCIA continuous update] overview of dynamic routing protocol

蓝桥杯单片机省赛第十二届第一场
随机推荐
js生成随机数
Analyse de 43 cas de réseaux neuronaux MATLAB: Chapitre 42 opérations parallèles et réseaux neuronaux - - opérations parallèles de réseaux neuronaux basées sur CPU / GPU
What kind of interview is more effective?
Oracle viewing locked tables and unlocking
h5中的页面显示隐藏执行事件
Global and Chinese market of autotransfusion bags 2022-2028: Research Report on technology, participants, trends, market size and share
蓝桥杯单片机省赛第六届
Verilog state machine
High performance and low power cortex-a53 core board | i.mx8m Mini
Yan Rong looks at how to formulate a multi cloud strategy in the era of hybrid cloud
C#聯合halcon脫離halcon環境以及各種報錯解决經曆
蓝桥杯单片机省赛第十一届
"Analysis of 43 cases of MATLAB neural network": Chapter 42 parallel operation and neural network - parallel neural network operation based on cpu/gpu
Basic syntax of unity script (7) - member variables and instantiation
Grpc quick practice
Fourier series
终日乾乾,夕惕若厉
ImageAI安装
Interface debugging tool simulates post upload file - apipost
Detailed explanation of ThreadLocal