当前位置:网站首页>蓝桥杯单片机省赛第十一届
蓝桥杯单片机省赛第十一届
2022-07-02 03:29:00 【超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毫秒@12.000MHz
{
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0x20; //设置定时初值
T2H = 0xD1; //设置定时初值
AUXR |= 0x10; //定时器2开始计时
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总线内部延时函数
void IIC_Delay(unsigned char i)
{
do{_nop_();}
while(i--);
}
//I2C总线启动信号
void IIC_Start(void)
{
SDA = 1;
SCL = 1;
IIC_Delay(DELAY_TIME);
SDA = 0;
IIC_Delay(DELAY_TIME);
SCL = 0;
}
//I2C总线停止信号
void IIC_Stop(void)
{
SDA = 0;
SCL = 1;
IIC_Delay(DELAY_TIME);
SDA = 1;
IIC_Delay(DELAY_TIME);
}
//发送应答或非应答信号
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);
}
//等待应答
bit IIC_WaitAck(void)
{
bit ackbit;
SCL = 1;
IIC_Delay(DELAY_TIME);
ackbit = SDA;
SCL = 0;
IIC_Delay(DELAY_TIME);
return ackbit;
}
//I2C总线发送一个字节数据
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总线接收一个字节数据
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边栏推荐
- venn圖取交集
- Docker installs canal and MySQL for simple testing and implementation of redis and MySQL cache consistency
- Oracle的md5
- ORA-01547、ORA-01194、ORA-01110
- Work hard all day long and be alert at sunset
- Unity脚本的基础语法(6)-特定文件夹
- spark调优
- Comment élaborer une stratégie nuageuse à l'ère des nuages mixtes
- 在QML中加载不同字体
- Intersection vengraph
猜你喜欢

Yan Rong looks at how to formulate a multi cloud strategy in the era of hybrid cloud

Verilog avoid latch

Download and use of the super perfect screenshot tool snipaste
![[golang] leetcode intermediate bracket generation & Full Permutation](/img/93/ca38d97c721ccba2505052ef917788.jpg)
[golang] leetcode intermediate bracket generation & Full Permutation

Verilog 过程赋值 区别 详解

Exchange rate query interface

Halcon image rectification

West digital decided to raise the price of flash memory products immediately after the factory was polluted by materials

Sentry experience and architecture, a fledgling monitoring product with a market value of $100million

NLog使用
随机推荐
Detailed explanation of the difference between Verilog process assignment
Detailed explanation of ThreadLocal
Verilog 线型wire 种类
[untitled] basic operation of raspberry pie (2)
Verilog avoid latch
Grpc quick practice
Large screen visualization from bronze to the advanced king, you only need a "component reuse"!
Retrofit's callback hell is really vulnerable in kotlin synergy mode
The page in H5 shows hidden execution events
Xlwings drawing
This article describes the step-by-step process of starting the NFT platform project
Pycharm2021 delete the package warehouse list you added
Continuous assignment of Verilog procedure
Verilog wire type
Go execute shell command
知物由学 | 自监督学习助力内容风控效果提升
Verilog timing control
Verilog 过程连续赋值
Review materials of project management PMP high frequency examination sites (8-1)
h5中的页面显示隐藏执行事件