当前位置:网站首页>The second game of the 12th provincial single chip microcomputer competition of the Blue Bridge Cup
The second game of the 12th provincial single chip microcomputer competition of the Blue Bridge Cup
2022-07-02 03:38:00 【Super 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 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 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 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
边栏推荐
- Verilog state machine
- Gradle foundation | customize the plug-in and upload it to jitpack
- 近段时间天气暴热,所以采集北上广深去年天气数据,制作可视化图看下
- Unity脚本的基础语法(6)-特定文件夹
- Global and Chinese markets for electronic laryngoscope systems 2022-2028: Research Report on technology, participants, trends, market size and share
- Which of PMP and software has the highest gold content?
- 一文彻底理解评分卡开发中——Y的确定(Vintage分析、滚动率分析等)
- Grpc quick practice
- 汇率的查询接口
- Getting started with MQ
猜你喜欢
Exchange rate query interface
How to do medium and long-term stocks, and what are the medium and long-term stock trading skills?
Oracle的md5
[golang] leetcode intermediate bracket generation & Full Permutation
蓝桥杯单片机省赛第十一届第一场
"Analysis of 43 cases of MATLAB neural network": Chapter 42 parallel operation and neural network - parallel neural network operation based on cpu/gpu
Account management of MySQL
蓝桥杯单片机第四届省赛
ThreadLocal详解
一天上手Aurora 8B/10B IP核(5)----从Framing接口的官方例程学起
随机推荐
One of the future trends of SAP ui5: embrace typescript
Knowing things by learning | self supervised learning helps improve the effect of content risk control
Verilog parallel block implementation
知物由学 | 自监督学习助力内容风控效果提升
Oracle 常用SQL
[database]jdbc
Basic syntax of unity script (6) - specific folder
[C Advanced] brother Peng takes you to play with strings and memory functions
Use blocking or non blocking for streamline
0基础如何学习自动化测试?按照这7步一步一步来学习就成功了
What do you know about stock selling skills and principles
《MATLAB 神經網絡43個案例分析》:第42章 並行運算與神經網絡——基於CPU/GPU的並行神經網絡運算
FFMpeg AVFrame 的概念.
UI (New ui:: MainWindow) troubleshooting
Continuous assignment of Verilog procedure
MySQL index, transaction and storage engine
终日乾乾,夕惕若厉
Qt的网络连接方式
The page in H5 shows hidden execution events
Merge interval, linked list, array