蓝桥杯单片原理图的理解

看的方法:先找到要用的外设,找到相关的锁存器使能,找或非门,再找译码器

例如:点亮led灯,低电平点亮,那么要给74hc573锁存器使能,通过74hc138译码器译码器输入一个低电平然后通过或非门变成高点平使得74h573发挥作用,然后再通过给低电平使得led点亮

用到或非门时:要用到J13引脚,12短接是存储器模式,23短接是io扩展模式

蜂鸣器(buzz)的使用:给低电平进行响应

继电器:给低电平进行响应

由于原理图中达林顿管的非门:需要io口输入高电平

变量的声明一定要放在进入函数的最前面

关掉无关的设备:需要定义一个初始化函数

报错显示没有定义函数,那么可能是没有将函数写在最前面就使用了

UNreach code,没有写入到执行的函数中去,例如main中的while(1)中去

独立按键J5 接到跳线帽接到23脚

对于只用显示一次的就可以写在主函数的while的外面,对于其他的根据分析还是要写在while循环的里面,同时如果想二次调用函数,可以定义一个别的延时,将要用到的函数写在里面去

在用到中断函数时,要将J5接到23脚,编写中断服务函数尽量少做事情

在数码管的中扫描的间隔为500;

将要显示的值要放到数码管的段码中去,在传入参数时,要注意传入的先后循序

观看官方提供的参考代码时要注意些小细节,例如驱动代码测试环境,文件声明的调用

#include <STC15F2K60S2.H>
#include "onewire.h"
unsigned char code SMG_NoDot[18] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
     0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,
     0xbf,0x7f};

unsigned char code SMG_IsDot[10] = {0x40,0x79,0x24,
	0x30,0x19,0x12,0x02,0x78,0x00,0x10};
unsigned int dat=0;
void smgdelay(unsigned int i)
{
	while(i--);
	
}
void select138(unsigned char n)
{
	switch(n)
	{
		case 4:
			P2=(0x1f&P2)|0x80;
		break;
		case 5:
			P2=(0x1f&P2)|0xa0;
		break;
		case 6:
			P2=(0x1f&P2)|0xc0;
		break;
		case 7:
			P2=(0x1f&P2)|0xe0;
		break;
		case 0:
			P2=(0x1f&P2)|0x00;
		break;
	
	}
}
void smgshow_bite(unsigned char date,unsigned char pos)
{ 	
	select138(6);
	P0=0x01<<pos;
	select138(7);
	P0=date;

}
void smgshowall()
{ 	
	select138(6);
	P0=0xff;
	select138(7);
	P0=0xff;

}
void smgshow()
{
	smgshow_bite(SMG_NoDot[dat%10],7);
	smgdelay(500);
	smgshow_bite(SMG_NoDot[(dat%100)/10],6);
	smgdelay(500);
	smgshow_bite(0xff,5);
	smgdelay(500);
	smgshow_bite(0xff,4);
	smgdelay(500);
	smgshow_bite(0xff,3);
	smgdelay(500);
	smgshow_bite(0xff,2);
	smgdelay(500);
	smgshow_bite(0xff,1);
	smgdelay(500);
	smgshow_bite(0xff,0);
	smgdelay(500);
	smgshowall();	
	
}
void delay(unsigned int i)
{
	while(i--)
	{
	smgshow();
	}
}
void temputer()
{
	unsigned char LSB,MSB;
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	delay(100);
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);
	LSB=Read_DS18B20();
	MSB=Read_DS18B20();
	init_ds18b20();
	dat=MSB;
	dat<<=8;
	dat=dat|LSB;
	
	dat=dat>>4;
//	if((dat&0xf800)==0x0000)
//	{
//		dat>>=4;
//		dat=dat*10;
//		dat=dat+(LSB&0x0f)*0.625;
//	
//	}
}


void main()
{
	while(1)
	{
	temputer();
	smgshow();
	
	}

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值