当前位置:网站首页>蓝桥杯单片机省赛第十二届第二场
蓝桥杯单片机省赛第十二届第二场
2022-07-02 03:29:00 【超561】
mian.c
#include <STC15F2K60S2.H>
#include <IIC.H>
unsigned int dianya_set;
unsigned int freq_ne555_set;
void Device_ctrl(unsigned char p2date,unsigned char p0date)
{
P0=p0date;
P2=P2&0X1F|p2date;
P2&=0X1F;
}
void write_24c02(unsigned char add,unsigned int date)
{
IIC_Start();
IIC_SendByte(0xa0);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_SendByte(date);
IIC_WaitAck();
IIC_Stop();
}
unsigned int read_24c02(unsigned char add)
{
unsigned int date;
IIC_Start();
IIC_SendByte(0xa0);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_Start();
IIC_SendByte(0xa1);
IIC_WaitAck();
date=IIC_RecByte();
IIC_SendAck(1);
IIC_Stop();
return date;
}
unsigned int ad_count;
unsigned int dianya;
unsigned char mode=1;
bit dianya_flag=1;
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;
if(mode==1)
{
dianya=read_ad(0x01);
dianya=dianya/51.0f*100;
}
if(mode==3)
{
dianya=read_ad(0x03);
dianya=dianya/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 int zhouqi;
unsigned int freq_ne555;
unsigned int ne555_count;
void Init_ne555()
{
TMOD|=0x05;
TH0=0;
TL0=0;
TR0=1;
}
void ne555_process()
{
ne555_count++;
if(ne555_count>1000)
{
ne555_count=0;
freq_ne555=(TH0<<8)|TL0;
TH0=0;
TL0=0;
}
}
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]=0x71;
if(freq_ne555>999999)
{
smg_display[1]=smg_du[freq_ne555/1000000];
smg_display[2]=smg_du[freq_ne555/100000%10];
smg_display[3]=smg_du[freq_ne555/10000%10];
smg_display[4]=smg_du[freq_ne555/1000%10];
smg_display[5]=smg_du[freq_ne555/100%10];
smg_display[6]=smg_du[freq_ne555/10%10];
smg_display[7]=smg_du[freq_ne555%10];
}
else if(freq_ne555>99999)
{
smg_display[1]=0x00;
smg_display[2]=smg_du[freq_ne555/100000];
smg_display[3]=smg_du[freq_ne555/10000%10];
smg_display[4]=smg_du[freq_ne555/1000%10];
smg_display[5]=smg_du[freq_ne555/100%10];
smg_display[6]=smg_du[freq_ne555/10%10];
smg_display[7]=smg_du[freq_ne555%10];
}
else if(freq_ne555>9999)
{
smg_display[1]=0x00;
smg_display[2]=0x00;
smg_display[3]=smg_du[freq_ne555/10000];
smg_display[4]=smg_du[freq_ne555/1000%10];
smg_display[5]=smg_du[freq_ne555/100%10];
smg_display[6]=smg_du[freq_ne555/10%10];
smg_display[7]=smg_du[freq_ne555%10];
}
else if(freq_ne555>999)
{
smg_display[1]=0x00;
smg_display[2]=0x00;
smg_display[3]=0x00;
smg_display[4]=smg_du[freq_ne555/1000];
smg_display[5]=smg_du[freq_ne555/100%10];
smg_display[6]=smg_du[freq_ne555/10%10];
smg_display[7]=smg_du[freq_ne555%10];
}
else if(freq_ne555>99)
{
smg_display[1]=0x00;
smg_display[2]=0x00;
smg_display[3]=0x00;
smg_display[4]=0x00;
smg_display[5]=smg_du[freq_ne555/100];
smg_display[6]=smg_du[freq_ne555/10%10];
smg_display[7]=smg_du[freq_ne555%10];
}
else if(freq_ne555>9)
{
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[freq_ne555/10];
smg_display[7]=smg_du[freq_ne555%10];
}
else
{
smg_display[1]=0x00;
smg_display[2]=0x00;
smg_display[3]=0x00;
smg_display[4]=0x00;
smg_display[5]=0x00;
smg_display[6]=0X00;
smg_display[7]=smg_du[freq_ne555%10];
}
}
if(display_mode==1)
{
zhouqi=1000000/freq_ne555;
smg_display[0]=0x37;
if(zhouqi>999999)
{
smg_display[1]=smg_du[zhouqi/1000000];
smg_display[2]=smg_du[zhouqi/100000%10];
smg_display[3]=smg_du[zhouqi/10000%10];
smg_display[4]=smg_du[zhouqi/1000%10];
smg_display[5]=smg_du[zhouqi/100%10];
smg_display[6]=smg_du[zhouqi/10%10];
smg_display[7]=smg_du[zhouqi%10];
}
else if(zhouqi>99999)
{
smg_display[1]=0x00;
smg_display[2]=smg_du[zhouqi/100000%10];
smg_display[3]=smg_du[zhouqi/10000%10];
smg_display[4]=smg_du[zhouqi/1000%10];
smg_display[5]=smg_du[zhouqi/100%10];
smg_display[6]=smg_du[zhouqi/10%10];
smg_display[7]=smg_du[zhouqi%10];
}
else if(zhouqi>9999)
{
smg_display[1]=0x00;
smg_display[2]=0x00;
smg_display[3]=smg_du[zhouqi/10000%10];
smg_display[4]=smg_du[zhouqi/1000%10];
smg_display[5]=smg_du[zhouqi/100%10];
smg_display[6]=smg_du[zhouqi/10%10];
smg_display[7]=smg_du[zhouqi%10];
}
else if(zhouqi>999)
{
smg_display[1]=0x00;
smg_display[2]=0x00;
smg_display[3]=0x00;
smg_display[4]=smg_du[zhouqi/1000%10];
smg_display[5]=smg_du[zhouqi/100%10];
smg_display[6]=smg_du[zhouqi/10%10];
smg_display[7]=smg_du[zhouqi%10];
}
else if(zhouqi>99)
{
smg_display[1]=0x00;
smg_display[2]=0x00;
smg_display[3]=0x00;
smg_display[4]=0x00;
smg_display[5]=smg_du[zhouqi/100%10];
smg_display[6]=smg_du[zhouqi/10%10];
smg_display[7]=smg_du[zhouqi%10];
}
else if(zhouqi>9)
{
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[zhouqi/10%10];
smg_display[7]=smg_du[zhouqi%10];
}
else
{
smg_display[1]=0x00;
smg_display[2]=0x00;
smg_display[3]=0x00;
smg_display[4]=0x00;
smg_display[5]=0x00;
smg_display[6]=0x00;
smg_display[7]=smg_du[zhouqi%10];
}
}
if(display_mode==2)
{
smg_display[0]=0x3E;
smg_display[1]=0x40;
smg_display[2]=smg_du[mode];
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 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)
{
display_mode++;
if(display_mode==3)
{
display_mode=0;
}
}
if(Trig_btn==0x04)
{
dianya_flag=~dianya_flag;
if(dianya_flag==1)
{
mode=1;
}
else
{
mode=3;
}
}
if(Trig_btn==0x02)
{
write_24c02(0,dianya);
dianya_set=read_24c02(0);
}
if(Trig_btn==0x01)
{
write_24c02(0x01,freq_ne555);
freq_ne555_set=read_24c02(0x01);
}
}
}
unsigned int led_count;
unsigned char led_ctrl=0xff;
void led_process()
{
if(led_count>10)
{
led_count=0;
if(dianya>dianya_set)
{
led_ctrl&=~0X01;
}
else
{
led_ctrl|=0X01;
}
if(freq_ne555>freq_ne555_set)
{
led_ctrl&=~0X02;
}
else
{
led_ctrl|=0X02;
}
if(display_mode==0)
{
led_ctrl&=~0X04;
}
else
{
led_ctrl|=0X04;
}
if(display_mode==1)
{
led_ctrl&=~0X08;
}
else
{
led_ctrl|=0X08;
}
if(display_mode==2)
{
led_ctrl&=~0X10;
}
else
{
led_ctrl|=0X10;
}
Device_ctrl(0x80,led_ctrl);
}
}
void Timer2Init() //1毫秒@12.000MHz
{
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0x18; //设置定时初值
T2H = 0xFC; //设置定时初值
AUXR |= 0x10; //定时器2开始计时
IE2|=0X04;
EA=1;
}
void main()
{
Timer2Init();
Init_ne555();
Device_ctrl(0xa0,0x00);
Device_ctrl(0x80,0xff);
while(1)
{
smg_process();
key_process();
led_process();
ad_process();
}
}
void timer2service() interrupt 12
{
smg_count++;
key_count++;
ad_count++;
smg_show();
led_count++;
ne555_process();
}
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
边栏推荐
- What kind of interview is more effective?
- Halcon image rectification
- In depth analysis of C language - variable error prone knowledge points # dry goods inventory #
- Use blocking or non blocking for streamline
- Learn PWN from CTF wiki - ret2shellcode
- Spark Tuning
- Pointer array & array pointer
- Verilog 时序控制
- C#联合halcon脱离halcon环境以及各种报错解决经历
- NLog使用
猜你喜欢
[mv-3d] - multi view 3D target detection network
How to establish its own NFT market platform in 2022
Verilog state machine
《MATLAB 神经网络43个案例分析》:第41章 定制神经网络的实现——神经网络的个性化建模与仿真
Haute performance et faible puissance Cortex - A53 Core Board | i.mx8m mini
[C Advanced] brother Peng takes you to play with strings and memory functions
Failed to upgrade schema, error: “file does not exist
Learn PWN from CTF wiki - ret2shellcode
Continuous assignment of Verilog procedure
Detailed explanation of the difference between Verilog process assignment
随机推荐
Use blocking or non blocking for streamline
MySQL index, transaction and storage engine
Global and Chinese market of handheld ultrasonic scanners 2022-2028: Research Report on technology, participants, trends, market size and share
"Analysis of 43 cases of MATLAB neural network": Chapter 41 implementation of customized neural network -- personalized modeling and Simulation of neural network
《MATLAB 神經網絡43個案例分析》:第42章 並行運算與神經網絡——基於CPU/GPU的並行神經網絡運算
Framing in data transmission
Gradle foundation | customize the plug-in and upload it to jitpack
Detailed explanation of ThreadLocal
Haute performance et faible puissance Cortex - A53 Core Board | i.mx8m mini
QT environment generates dump to solve abnormal crash
Unity脚本的基础语法(7)-成员变量和实例化
What kind of interview is more effective?
Pointer array & array pointer
Oracle的md5
[golang] leetcode intermediate bracket generation & Full Permutation
Kotlin basic learning 14
Global and Chinese markets for infant care equipment, 2022-2028: Research Report on technology, participants, trends, market size and share
Failed to upgrade schema, error: “file does not exist
Global and Chinese markets for electronic laryngoscope systems 2022-2028: Research Report on technology, participants, trends, market size and share
spark调优