当前位置:网站首页>The first game of the 11th provincial single chip microcomputer competition of the Blue Bridge Cup
The first game of the 11th provincial single chip microcomputer competition of the Blue Bridge Cup
2022-07-02 03:38:00 【Super 561】
main.c
#include <STC15F2K60S2.H>
#include <IIC.H>
#define NO_KEY 0XFF
#define KEY_STATE0 0
#define KEY_STATE1 1
#define KEY_STATE2 2
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 int set_dianya=0;
unsigned char count;
unsigned char key_press;
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)&&(P34==1)&&(P35==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>=5)
{
key_count=0;
key_val=key_scan();
switch(key_val)
{
case 4:key_press++;break;
case 5:key_press++;break;
case 6:key_press++;break;
case 7:key_press++;break;
case 8:key_press++;break;
case 9:key_press++;break;
case 10:key_press++;break;
case 11:key_press++;break;
case 12:
display_mode++;
if(display_mode==3)
{display_mode=0;}
key_press=0;
break;
case 13:if(display_mode==2)
{count=0;}
key_press=0;
break;
case 14:key_press++;break;
case 15:key_press++;break;
case 16:
if(display_mode==1)
{
set_dianya=set_dianya+50;
if(set_dianya>500)
{set_dianya=0;}
}
key_press=0;break;
case 17:
if(display_mode==1)
{
if(set_dianya>0)
{
set_dianya=set_dianya-50;
}
else
{set_dianya=500;}
}
key_press=0;break;
case 18:key_press++;break;
case 19:key_press++;break;
}
}
}
unsigned char smg_display[8];
unsigned char smg_du[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned int smg_count;
unsigned int dianya;
unsigned char ad;
unsigned int ad_count;
unsigned int ad_before;
unsigned int ad_now;
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;
ad=read_ad(0x03);
dianya=ad/51.0f*100;
ad_before=dianya;
ad_now=read_ad(0x03);
ad_now=ad_now/51.0f*100;
if((ad_before>set_dianya)&&(ad_before>ad_now)&&(ad_now<set_dianya))
{
count++;
}
}
}
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==0)
{
smg_display[0]=0x3E;
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];
}
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]=smg_du[(set_dianya)/100]|0x80;
smg_display[6]=smg_du[(set_dianya)/10%10];
smg_display[7]=smg_du[(set_dianya)%10];
}
if(display_mode==2)
{
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[count/10];
smg_display[7]=smg_du[count%10];
}
}
}
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;
}
unsigned int led_count;
unsigned char led_ctrl=0xff;
unsigned int dianya_count;
bit led_flag=0;
void led_process()
{
if(led_count>10)
{
led_count=0;
if(dianya<set_dianya)
{
dianya_count++;
if(dianya_count>500)
{
led_flag=1;
dianya_count=0;
}
}
else
{
led_flag=0;
}
if(led_flag==1)
{
led_ctrl&=~0x01;
}
else
{
led_ctrl|=0x01;
}
if(count%2)
{
led_ctrl&=~0x02;
}
else
{
led_ctrl|=0x02;
}
if(key_press>=3)
{
led_ctrl&=~0x04;
}
else
{
led_ctrl|=0x04;
}
Device_ctrl(0x80,led_ctrl);
}
}
void main()
{
Timer2Init();
Device_ctrl(0xa0,0x00);
Device_ctrl(0x80,0xff);
while(1)
{
key_process();
smg_process();
ad_process();
led_process();
}
}
void timer2service() interrupt 12
{
key_count++;
smg_count++;
led_count++;
ad_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
边栏推荐
猜你喜欢
Failed to upgrade schema, error: “file does not exist
【DesignMode】建造者模式(Builder model)
Download and use of the super perfect screenshot tool snipaste
傅里叶级数
Which of PMP and software has the highest gold content?
一文彻底理解评分卡开发中——Y的确定(Vintage分析、滚动率分析等)
蓝桥杯单片机省赛第十一届第一场
蓝桥杯单片机省赛第五届
ThreadLocal详解
Get started with Aurora 8b/10b IP core in one day (5) -- learn from the official routine of framing interface
随机推荐
Global and Chinese market of bone adhesives 2022-2028: Research Report on technology, participants, trends, market size and share
MySQL之账号管理
Review materials of project management PMP high frequency examination sites (8-1)
潘多拉 IOT 开发板学习(RT-Thread)—— 实验1 LED 闪烁实验(学习笔记)
Unity脚本的基础语法(8)-协同程序与销毁方法
0基础如何学习自动化测试?按照这7步一步一步来学习就成功了
It took me only 3 months to jump out of the comfort zone and become an automated test engineer for 5 years
《MATLAB 神经网络43个案例分析》:第42章 并行运算与神经网络——基于CPU/GPU的并行神经网络运算
Detailed explanation of the difference between Verilog process assignment
一文彻底理解评分卡开发中——Y的确定(Vintage分析、滚动率分析等)
Global and Chinese market of X-ray detectors 2022-2028: Research Report on technology, participants, trends, market size and share
C # joint Halcon's experience of breaking away from Halcon environment and various error reporting solutions
焱融看 | 混合云时代下,如何制定多云策略
What is the logical structure of database file
[HCIA continuous update] working principle of OSPF Protocol
How about Ping An lifetime cancer insurance?
NLog使用
Basic syntax of unity script (6) - specific folder
Knowing things by learning | self supervised learning helps improve the effect of content risk control
Global and Chinese markets for hand hygiene monitoring systems 2022-2028: Research Report on technology, participants, trends, market size and share