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


main.c
#include <STC15F2K60S2.H>
#include <IIC.H>
void Device_ctrl(unsigned char p2date,unsigned char p0date)
{
P0=p0date;
P2=P2&0X1F|p2date;
P2&=0X1F;
}
unsigned int ad_count;
unsigned int dianya1;
unsigned int dianya3;
unsigned char add=0x01;
bit dianya_flag;
unsigned int set_dianya1=250;
unsigned int set_dianya3=300;
unsigned char read_ad(unsigned char add)
{
unsigned char date;
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_Start();
IIC_SendByte(0x91);
IIC_WaitAck();
date=IIC_RecByte();
IIC_SendAck(1);
IIC_Stop();
return date;
}
void ad_process()
{
if(ad_count>10)
{
ad_count=0;
dianya1=read_ad(0x01);
dianya1=dianya1/51.0f*100;
dianya3=read_ad(0x03);
dianya3=dianya3/51.0f*100;
}
}
unsigned char smg_display[8];
unsigned char smg_du[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned int smg_count;
unsigned char display_mode;
unsigned char mode=1;
void smg_show()
{
unsigned int 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)
{
smg_display[0]=0x73;
smg_display[1]=smg_du[mode];
smg_display[2]=0x00;
smg_display[3]=0x00;
smg_display[4]=0x00;
if(dianya_flag)
{
smg_display[5]=smg_du[set_dianya3/100]|0x80;
smg_display[6]=smg_du[set_dianya3/10%10];
smg_display[7]=smg_du[set_dianya3%10];
}
else
{
smg_display[5]=smg_du[set_dianya1/100]|0x80;
smg_display[6]=smg_du[set_dianya1/10%10];
smg_display[7]=smg_du[set_dianya1%10];
}
}
else
{
smg_display[0]=0x3E;
smg_display[1]=smg_du[mode];
smg_display[2]=0x00;
smg_display[3]=0x00;
smg_display[4]=0x00;
if(dianya_flag==0)
{
smg_display[5]=smg_du[dianya3/100]|0x80;
smg_display[6]=smg_du[dianya3/10%10];
smg_display[7]=smg_du[dianya3%10];
}
else
{
smg_display[5]=smg_du[dianya1/100]|0x80;
smg_display[6]=smg_du[dianya1/10%10];
smg_display[7]=smg_du[dianya1%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)
{
Device_ctrl(0x80,~0X01);
dianya_flag=~dianya_flag;
if(display_mode)
{
if(dianya_flag)
{
mode=3;
add=0x03;
}
else
{
mode=1;
add=0x01;
}
}
else
{
if(dianya_flag)
{
mode=3;
add=0x03;
}
else
{
mode=1;
add=0x01;
}
}
}
if(Trig_btn==0x04)
{
display_mode++;
if(display_mode==2)
{
display_mode=0;
}
Device_ctrl(0x80,~0X02);
}
if(Trig_btn==0x02)
{
if(display_mode==1)
{
if(mode==1)
{
if(set_dianya1<500)
{
set_dianya1=set_dianya1+20;
}
}
if(mode==3)
{
if(set_dianya3<500)
{
set_dianya3=set_dianya3+20;
}
}
}
Device_ctrl(0x80,~0X04);
}
if(Trig_btn==0x01)
{
if(display_mode==1)
{
if(mode==1)
{
if(set_dianya1>=20)
{
set_dianya1=set_dianya1-20;
}
}
if(mode==3)
{
if(set_dianya3>=20)
{
set_dianya3=set_dianya3-20;
}
}
}
Device_ctrl(0x80,~0X08);
}
}
}
void Timer2Init() //1 millisecond @12.000MHz
{
AUXR |= 0x04; // Timer clock 1T Pattern
T2L = 0x20; // Set initial value of timing
T2H = 0xD1; // Set initial value of timing
AUXR |= 0x10; // Timer 2 Start timing
IE2|=0X04;
EA=1;
}
unsigned int led_count;
unsigned char led_ctrl=0xff;
void led_process()
{
if(led_count>10)
{
led_count=0;
if(mode==1)
{
if(dianya1>set_dianya1)
{
led_ctrl&=~0x01;
}
else
{
led_ctrl|=0x01;
}
}
if(mode==3)
{
if(dianya3>set_dianya3)
{
led_ctrl&=~0x02;
}
else
{
led_ctrl|=0x02;
}
}
if(mode==1)
{
led_ctrl&=~0x04;
}
else
{
led_ctrl|=0x04;
}
if(display_mode==0)
{
led_ctrl&=~0x08;
}
else
{
led_ctrl|=0x08;
}
if(dianya1>dianya3)
{
led_ctrl&=~0x10;
}
else
{
led_ctrl|=0x10;
}
Device_ctrl(0x80,led_ctrl);
}
}
void main()
{
Timer2Init();
Device_ctrl(0xa0,0x00);
Device_ctrl(0x80,0xff);
while(1)
{
smg_process();
key_process();
ad_process();
led_process();
}
}
void timer2service() interrupt 12
{
key_count++;
smg_count++;
ad_count++;
led_count++;
smg_show();
}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边栏推荐
- The 6th Blue Bridge Cup single chip microcomputer provincial competition
- C#聯合halcon脫離halcon環境以及各種報錯解决經曆
- Oracle common SQL
- 高性能 低功耗Cortex-A53核心板 | i.MX8M Mini
- 蓝桥杯单片机省赛第十一届第二场
- KL divergence is a valuable article
- FFMpeg AVFrame 的概念.
- Introduction to Robotics II. Forward kinematics, MDH method
- Unity脚本的基础语法(6)-特定文件夹
- "Analysis of 43 cases of MATLAB neural network": Chapter 42 parallel operation and neural network - parallel neural network operation based on cpu/gpu
猜你喜欢

《MATLAB 神经网络43个案例分析》:第41章 定制神经网络的实现——神经网络的个性化建模与仿真

JIT deep analysis

【直播回顾】战码先锋首期8节直播完美落幕,下期敬请期待!

High performance and low power cortex-a53 core board | i.mx8m Mini

高性能 低功耗Cortex-A53核心板 | i.MX8M Mini

傅里叶级数

Failed to upgrade schema, error: “file does not exist

PY3, PIP appears when installing the library, warning: ignoring invalid distribution -ip

蓝桥杯单片机第六届温度记录器

MD5 of Oracle
随机推荐
[HCIA continuous update] working principle of OSPF Protocol
Custom classloader that breaks parental delegation
Global and Chinese market of X-ray detectors 2022-2028: Research Report on technology, participants, trends, market size and share
蓝桥杯单片机省赛第十一届第二场
SAML2.0 notes (I)
In the era of programmers' introspection, five-year-old programmers are afraid to go out for interviews
Global and Chinese markets for ultrasonic probe disinfection systems 2022-2028: Research Report on technology, participants, trends, market size and share
Comment élaborer une stratégie nuageuse à l'ère des nuages mixtes
蓝桥杯单片机省赛第六届
滴滴开源DELTA:AI开发者可轻松训练自然语言模型
[HCIA continuous update] overview of dynamic routing protocol
Gradle foundation | customize the plug-in and upload it to jitpack
Network connection mode of QT
Fourier series
Uniapp uses canvas to generate posters and save them locally
Discrimination between sap Hana, s/4hana and SAP BTP
Oracle viewing locked tables and unlocking
Xlwings drawing
蓝桥杯单片机省赛第七届
It took me only 3 months to jump out of the comfort zone and become an automated test engineer for 5 years