单片机----第三届蓝桥杯国赛

第三届蓝桥杯国赛

题目

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我的解答

DS1302

DS1302.h
#ifndef __DS1302_H__
#define __DS1302_H__
extern unsigned char DS1302_Time[3];
void DS1302_Init();
void SetTime();
void ReadTime();
#endif
DS1302.c
#include <STC15F2K60S2.H>

#define DS1302_Sec 0x80
#define DS1302_Min 0x82
#define DS1302_Hou 0x84
#define DS1302_WP  0x8E

sbit DS1302_SCLK=P1^7;
sbit DS1302_IO=P2^3;
sbit DS1302_CE=P1^3;
unsigned char DS1302_Time[3]={
   11,50,59};
void DS1302_Init()
{
   
	DS1302_CE=0;
	DS1302_SCLK=0;
}
void DS1302_Write(unsigned char Command,Data)
{
   
	unsigned char k;
	DS1302_CE=1;
	for(k=0;k<8;k++)
	{
   
		DS1302_IO=Command&(0x01<<k);
		DS1302_SCLK=0;
		DS1302_SCLK=1;
	}
	for(k=0;k<8;k++)
	{
   
		DS1302_IO=Data&(0x01<<k);
		DS1302_SCLK=0;
		DS1302_SCLK=1;
	}
	DS1302_CE=0;
}
unsigned char DS1302_Read(unsigned char Command)
{
   
	unsigned char k,Data=0x00;
	Command|=0x01;
	DS1302_CE=1;
	for(k=0;k<8;k++)
	{
   
		DS1302_IO=Command&(0x01<<k);
		DS1302_SCLK=0;
		DS1302_SCLK=1;
	}
	for(k=0;k<8;k++)
	{
   
		DS1302_SCLK=1;
		DS1302_SCLK=0;
		if(DS1302_IO){
   Data|=(0x01<<k);};
	}
	DS1302_IO=0;
	DS1302_CE=0;
	
	return Data;
}
void SetTime()
{
   
	unsigned char Temp;
	DS1302_Write(DS1302_WP,0x00);
	
	Temp=DS1302_Time[0];
	DS1302_Write(DS1302_Hou,Temp/10*16+Temp%10);
	
	Temp=DS1302_Time[1];
	DS1302_Write(DS1302_Min,Temp/10*16+Temp%10);
	
	Temp=DS1302_Time[2];
	DS1302_Write(DS1302_Sec,Temp/10*16+Temp%10);
	
	DS1302_Write(DS1302_WP,0x80);
}
void ReadTime()
{
   
	unsigned char Temp;
	Temp=DS1302_Read(DS1302_Hou);
	DS1302_Time[0]=Temp/16*10+Temp%16;
	Temp=DS1302_Read(DS1302_Min);
	DS1302_Time[1]=Temp/16*10+Temp%16;
	Temp=DS1302_Read(DS1302_Sec);
	DS1302_Time[2]=Temp/16*10+Temp%16;
}
iic.h
#ifndef __IIC_H__
#define __IIC_H__

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); 
void AT24C02_Write(unsigned char Address,Data);
unsigned char AT24C02_Read(unsigned char Address);
void Delay1ms(unsigned int x);
#endif

iic

iic.c
/*
  程序说明: IIC总线驱动程序
  软件环境: Keil uVision 4.10 
  硬件环境: CT107单片机综合实训平台 8051,12MHz
  日    期: 2011-8-9
*/

#include "reg52.h"
#include "intrins.h"

#define DELAY_TIME 5

#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1

//总线引脚定义
sbit SDA = P2^1;  /* 数据线 */
sbit SCL = P2^0;  /* 时钟线 */

void IIC_Delay(unsigned char i)
{
   
    do{
   _nop_();}
    while(i--);        
}
//总线启动条件
void IIC_Start(void)
{
   
    SDA = 1;
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SDA = 0;
    IIC_Delay(DELAY_TIME);
    SCL = 0;	
}

//总线停止条件
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;  					// 0:应答,1:非应答
    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)
### PyCharm 打开文件显示全的解决方案 当遇到PyCharm打开文件显示全的情况时,可以尝试以下几种方法来解决问题。 #### 方法一:清理缓存并重启IDE 有时IDE内部缓存可能导致文件加载异常。通过清除缓存再启动程序能够有效改善此状况。具体操作路径为`File -> Invalidate Caches / Restart...`,之后按照提示完成相应动作即可[^1]。 #### 方法二:调整编辑器字体设置 如果是因为字体原因造成的内容显示问题,则可以通过修改编辑区内的文字样式来进行修复。进入`Settings/Preferences | Editor | Font`选项卡内更改合适的字号大小以及启用抗锯齿功能等参数配置[^2]。 #### 方法三:检查项目结构配置 对于某些特定场景下的源码视图缺失现象,可能是由于当前工作空间未能正确识别全部模块所引起。此时应该核查Project Structure的Content Roots设定项是否涵盖了整个工程根目录;必要时可手动添加遗漏部分,并保存变更生效[^3]。 ```python # 示例代码用于展示如何获取当前项目的根路径,在实际应用中可根据需求调用该函数辅助排查问题 import os def get_project_root(): current_file = os.path.abspath(__file__) project_dir = os.path.dirname(current_file) while not os.path.exists(os.path.join(project_dir, '.idea')): parent_dir = os.path.dirname(project_dir) if parent_dir == project_dir: break project_dir = parent_dir return project_dir print(f"Current Project Root Directory is {get_project_root()}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值