单片机比赛准备05-蓝桥杯-第三届初赛模拟题(模拟传送装置)

简介: 单片机比赛准备05-蓝桥杯-第三届初赛模拟题(模拟传送装置)

image.png

image.png

image.png

iic.h:


#ifndef _IIC_H#define _IIC_H#define uchar unsigned char#define uint unsigned int //函数声明voidIIC_Start(void); 
voidIIC_Stop(void);  
voidIIC_Ack(bitackbit); 
voidIIC_SendByte(unsignedcharbyt); 
bitIIC_WaitAck(void);  
unsignedcharIIC_RecByte(void); 
ucharad_read(ucharadd);
voideeprom_write(ucharadd,uchardat);
uchareeprom_read(ucharadd);
#endif

iic.c:


/*程序说明: IIC总线驱动程序软件环境: KeiluVision4.10硬件环境: CT107单片机综合实训平台8051,12MHz: 2011-8-9*/#include "stc15f2k60s2.h"#include <iic.h>#include "intrins.h"#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();}    #define SlaveAddrW 0xA0#define SlaveAddrR 0xA1//总线引脚定义sbitSDA=P2^1;  /*数据线*/sbitSCL=P2^0;  /*时钟线*///总线启动条件voidIIC_Start(void)
{
SDA=1;
SCL=1;
somenop;
SDA=0;
somenop;
SCL=0;    
}
//总线停止条件voidIIC_Stop(void)
{
SDA=0;
SCL=1;
somenop;
SDA=1;
}
//应答位控制voidIIC_Ack(bitackbit)
{
if(ackbit) 
    {   
SDA=0;
    }
else    {
SDA=1;
    }
somenop;
SCL=1;
somenop;
SCL=0;
SDA=1; 
somenop;
}
//等待应答bitIIC_WaitAck(void)
{
SDA=1;
somenop;
SCL=1;
somenop;
if(SDA)    
    {   
SCL=0;
IIC_Stop();
return0;
    }
else    { 
SCL=0;
return1;
    }
}
//通过I2C总线发送数据voidIIC_SendByte(unsignedcharbyt)
{
unsignedchari;
for(i=0;i<8;i++)
    {   
if(byt&0x80) 
        {   
SDA=1;
        }
else        {
SDA=0;
        }
somenop;
SCL=1;
byt<<=1;
somenop;
SCL=0;
    }
}
//从I2C总线上接收数据unsignedcharIIC_RecByte(void)
{
unsignedcharda;
unsignedchari;
for(i=0;i<8;i++)
    {   
SCL=1;
somenop;
da<<=1;
if(SDA) 
da|=0x01;
SCL=0;
somenop;
    }
returnda;
}
ucharad_read(ucharadd)
{
uchartemp;
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_Stop();
IIC_Start();
IIC_SendByte(0x91);
IIC_WaitAck();
temp=IIC_RecByte();
IIC_Stop();
returntemp;
}
voideeprom_write(ucharadd,uchardat)
{
IIC_Start();
IIC_SendByte(0xa0);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_SendByte(dat);
IIC_WaitAck();
IIC_Stop();
}
uchareeprom_read(ucharadd)
{
uchartemp;
IIC_Start();
IIC_SendByte(0xa0);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_Stop();
IIC_Start();
IIC_SendByte(0xa1);
IIC_WaitAck();
temp=IIC_RecByte();
IIC_Stop();
returntemp;
}

主函数:


#include "stc15f2k60s2.h"#include <iic.h>#include "intrins.h"ucharseg[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0X82,0XF8,
0X80,0X90,0XFF};//数码管显示值ucharn;//led的移位状态uinttim;//定时器计时的值uintzhong;//重量的值ucharflag_s=0;//继电器开关标志ucharfangxiang=0;//灯的方向ucharyi,er,san,si;//数码管显示位voidallinit();
voidDelayms(uintms);
voiddisplay(ucharyi,er,san,si);
voidkey();
voidled_zheng();
voidled_fan();
voidcontrol();
voidTimer0Init(void);
voidTimer1Init(void);
voidmain()
{
allinit();
Timer0Init();
Timer1Init();
eeprom_write(0x00,0);
while(1)
    {
display(yi,er,san,si);
    }
}
voidallinit()
{
P2=0xa0;P0=0x00;//关闭蜂鸣器继电器P2=0x80;P0=0xff;//关闭ledP2=0xe0;P0=0xff;//段选P2=0xc0;P0=0xff;//位选}
voiddisplay(ucharyi,er,san,si)
{   
P2=0xe0;P0=0xff;
P2=0xe0;P0=seg[yi];//段选P2=0xc0;P0=0x01;//位选Delayms(1);
P2=0xe0;P0=0xff;
P2=0xe0;P0=seg[er];//段选P2=0xc0;P0=0x02;//位选Delayms(1);
P2=0xe0;P0=0xff;
P2=0xe0;P0=seg[san];//段选P2=0xc0;P0=0x04;//位选Delayms(1);
P2=0xe0;P0=0xff;
P2=0xe0;P0=seg[si];//段选P2=0xc0;P0=0x08;//位选Delayms(1);
/*P2=0xe0;P0=seg[wu];//段选P2=0xc0;P0=0x10;//位选Delayms(2);
P2=0xe0;P0=seg[liu];//段选P2=0xc0;P0=0x20;//位选Delayms(2);
P2=0xe0;P0=seg[qi];//段选P2=0xc0;P0=0x40;//位选Delayms(2);
P2=0xe0;P0=seg[ba];//段选P2=0xc0;P0=0x80;//位选Delayms(2);
*/}
voidkey()
{
if(P30==0)
    {
Delayms(5);
if(P30==0)
        {
flag_s=0;
        }
while(!P30)
        {
display(yi,er,san,si);
        };
    }
if(P31==0)
    {
Delayms(5);
if(P31==0)
        {
fangxiang=2;
        }
while(!P31)
        {
display(yi,er,san,si);
        };
    }
if(P32==0)
    {
Delayms(5);
if(P32==0)
        {
fangxiang=1;
        }
while(!P32)
        {
display(yi,er,san,si);
        };
    }
if(P33==0)
    {
Delayms(5);
if(P33==0)
        {
flag_s=1;
        }
while(!P33)
        {
display(yi,er,san,si);
        };
    }
}
voidled_zheng()
{
P2=0x80;
P0=~(1<<n);
n++;
if(n==8)n=0;
}
voidled_fan()
{
P2=0x80;
P0=~(0x80>>(8-n));
n--;
if(n==0)n=8;
}
voidcontrol()
{
P2=0xa0;P0=0x00;//关闭蜂鸣器继电器P2=0x80;P0=0xff;//关闭ledP2=0xe0;P0=0xff;//段选P2=0xc0;P0=0xff;//位选if(zhong>750)
    {
P2=0xa0;P0=0x40;//关闭蜂鸣器继电器P2=0x80;P0=0xff;//关闭led    }
elseif(flag_s==1)
    {
P2=0xa0;P0=0x10;
if(fangxiang==1)
led_zheng();
elseif(fangxiang==2)
led_fan();
else        {
P2=0xa0;P0=0x10;
P2=0x80;P0=0xff;
        }
    }
else    {
fangxiang=0;
n=0;
P2=0xa0;P0=0x00;//关闭蜂鸣器继电器P2=0x80;P0=0xff;//关闭led    }
}
voidDelayms(uintms)       //@11.0592MHz{
unsignedchari, j,k;
for(k=ms;k>0;k--)
    {
_nop_();
_nop_();
_nop_();
i=11;
j=190;
do        {
while (--j);
        } while (--i);
    }
}
voidTimer0Init(void)       //1毫秒@11.0592MHz{
AUXR|=0x80;       //定时器时钟1T模式TMOD&=0xF0;       //设置定时器模式TL0=0xCD;     //设置定时初值TH0=0xD4;     //设置定时初值TF0=0;        //清除TF0标志TR0=1;        //定时器0开始计时EA=1;
ET0=1;
}
voidTimer1Init(void)       //1微秒@11.0592MHz{
AUXR|=0x40;       //定时器时钟1T模式TMOD&=0x0F;       //设置定时器模式TL1=0x9A;     //设置定时初值TH1=0xA9;     //设置定时初值TF1=0;        //清除TF1标志TR1=1;        //定时器1开始计时EA=1;
ET1=1;
}
voidtimer1(void) interrupt3{
ucharadd=0x00;
uchartemp;
if(zhong>750)
    {
temp=eeprom_read(add);
if(zhong!=temp)
        {
eeprom_write(add,zhong);
add++;
        }
    }
}
voidtimer0(void) interrupt1{
tim++;
key();
zhong=(uint)(ad_read(0x03)/255.0*1000);
yi=zhong/1000;
er=zhong/100%10;
san=zhong/10%10;
si=zhong%10;
if(tim==200)
    {
tim=0;
control();
    }
}
目录
相关文章
|
6月前
|
物联网
STC51单片机-实验开发装置仿真-物联网应用系统设计
STC51单片机-实验开发装置仿真-物联网应用系统设计
142 0
|
4月前
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)
|
6月前
|
存储 移动开发
80C51单片机----数据传送类指令
80C51单片机----数据传送类指令
189 2
|
6月前
|
机器学习/深度学习 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-659 比赛安排
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-659 比赛安排
47 0
|
6月前
|
传感器 监控 测试技术
单片机开发|基于51单片机的全自动黑板檫粉尘清除装置设计与实现
单片机开发|基于51单片机的全自动黑板檫粉尘清除装置设计与实现
|
6月前
|
传感器 监控 测试技术
单片机开发|基于51单片机的全自动黑板檫粉尘清除装置设计与实现
单片机开发|基于51单片机的全自动黑板檫粉尘清除装置设计与实现
|
6月前
|
传感器 人工智能 Java
单片机开发|基于51单片机的全自动黑板檫粉尘清除装置设计
教师常年在课堂上上课,粉笔的灰尘会对学生的健康造成很大的危害,很多教师都会患上肺部疾病。教师在课堂教学中,如何有效地消除粉尘对教师的身体造成的不良影响,是一个亟待解决的问题。本文以51单片机为核心,实现并设计一种全自动黑板檫粉尘清除装置。由黑板擦上的压力传感器进行检测,由51单片机来控制吸尘器(吸尘风机),以完成清理。本系统的主要功能包括:压力检测、按键控制、灯光显示、电扇除尘等。本文在对国内外有关文献进行整理和归纳的基础上,首先介绍了全自动黑板檫粉尘清除装置的研制背景和研究意义,并结合国内外的研究情况,提出了本文的主要研究内容和系统的设计思路。接着,对系统的硬件电路进行了详细的设计,并编写了
|
传感器 监控 测试技术
单片机开发|基于51单片机的全自动黑板檫粉尘清除装置设计与实现
教师常年在课堂上上课,粉笔的灰尘会对学生的健康造成很大的危害,很多教师都会患上肺部疾病。教师在课堂教学中,如何有效地消除粉尘对教师的身体造成的不良影响,是一个亟待解决的问题。本文以51单片机为核心,实现并设计一种全自动黑板檫粉尘清除装置。由黑板擦上的压力传感器进行检测,由51单片机来控制吸尘器(吸尘风机),以完成清理。本系统的主要功能包括:压力检测、按键控制、灯光显示、电扇除尘等。本文在对国内外有关文献进行整理和归纳的基础上,首先介绍了全自动黑板檫粉尘清除装置的研制背景和研究意义,并结合国内外的研究情况,提出了本文的主要研究内容和系统的设计思路。接着,对系统的硬件电路进行了详细的设计,并编写了
189 0
单片机-蓝桥杯 用光敏电阻测量光照强度并显示在数码管上。
单片机-蓝桥杯 用光敏电阻测量光照强度并显示在数码管上。
226 1
蓝桥杯第11届国赛单片机组
蓝桥杯第11届国赛单片机组
119 0