IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 蓝桥杯万能模板 -> 正文阅读

[嵌入式]蓝桥杯万能模板

此模板包括锁存器选择,数码管显示,独立按键,矩阵按键,ne555,pcf8591,eeprom,ds18b20,ds1302。每个模块都能使用,记住此模板轻松拿省奖。

全部文件:提取码:azxy

#include "stc15f2k60s2.h"
#include "onewire.h"
#include "iic.h"
#include "ds1302.h"
typedef unsigned char u8;
typedef unsigned int u16;

u8 code duan[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
u16 dat;
u16 vv;
u16 count;
u16 count1;
u16 pl;
/**************************************************
**********************延迟函数*********************
**************************************************/
void delay(u16 i)
{
	while(i--);
}

/**************************************************
*********************锁存器选择********************
**************************************************/
void Chan_hc573(u8 chose)
{
	switch(chose)
	{
		case 4:
			P2 = (P2 & 0x1f) | 0x80; break;
		case 5:
			P2 = (P2 & 0x1f) | 0xa0; break;
		case 6:
			P2 = (P2 & 0x1f) | 0xc0; break;
		case 7:
			P2 = (P2 & 0x1f) | 0xe0; break;
	}
	P2 = (P2 & 0x1f) | 0x00;
}
/**************************************************
**********************关闭外设*********************
**************************************************/
void Init_system()
{
	P0=0x00;
	Chan_hc573(5);
	P0=0xff;
	Chan_hc573(4);
}
/**************************************************
*********************数码管选择********************
**************************************************/
void Smg_display(u8 com,u8 dat)
{
	P0=0xff;
	Chan_hc573(7);
	P0=0x01<<com;
	Chan_hc573(6);
	P0=dat;
	Chan_hc573(7);
}	
/**************************************************
*********************数码管消隐*******************
**************************************************/
void Close_smg()
{
	P0=0x00;
	Chan_hc573(6);
	P0=0xff;
	Chan_hc573(7);
}
/**************************************************
**********************数码管显示********************
**************************************************/
void Display_all()
{
	Smg_display(0,duan[vv/100%10]); delay(500);
	Smg_display(1,duan[vv/10%10]); delay(500);
	Smg_display(2,duan[vv%10]); delay(500);
	Smg_display(3,duan[10]); delay(500);
	Smg_display(4,duan[10]); delay(500);
	Smg_display(5,duan[dat/100%10]); delay(500);
	Smg_display(6,duan[dat/10%10]+0x80); delay(500);
	Smg_display(7,duan[dat%10]); delay(500);
	Close_smg();
}
/**************************************************
*********************数码管显示频率*****************
**************************************************/
void Display_pl()
{
	Smg_display(0,duan[10]); delay(500);
	Smg_display(1,duan[10]); delay(500);
	Smg_display(2,duan[10]); delay(500);
	Smg_display(3,duan[pl/10000%10]); delay(500);
	Smg_display(4,duan[pl/1000%10]); delay(500);
	Smg_display(5,duan[pl/100%10]); delay(500);
	Smg_display(6,duan[pl/10%10]); delay(500);
	Smg_display(7,duan[pl%10]); delay(500);
	Close_smg();
}
/**************************************************
***********************独立按键*********************
**************************************************/
void Key_BTN()
{
	if(P30==0)				//S7
	{
		delay(1000);
		if(P30==0)
		{
			while(P30==0) {}
		}
	}
	else if(P31==0)				//S6
	{
		delay(1000);
		if(P31==0)
		{
			while(P31==0) {}
		}
	}
	else if(P32==0)				//S5
	{
		delay(1000);
		if(P32==0)
		{
			while(P32==0) {}
		}
	}
	else if(P33==0)				//S4
	{
		delay(1000);
		if(P33==0)
		{
			while(P33==0) {}
		}
	}
}
/**************************************************
************************矩阵按键********************
**************************************************/
sbit R1=P3^0;
sbit R2=P3^1;
sbit R3=P3^2;
sbit R4=P3^3;

sbit C4=P3^4;
sbit C3=P3^5;
sbit C2=P4^2;
sbit C1=P4^4;

void Key_KBD()
{
	R1=0;
	R2=R3=R4=1;
	C1=C2=C3=C4=1;
	if(C1==0)			//S7
	{	
		delay(1000);
		if(C1==0)
		{
			while(C1==0) {}
		}
	}
	else if(C2==0)     //S11
	{
		delay(1000);
		if(C2==0)
		{
			while(C2==0) {}
		}
	}
	else if(C3==0)     //S15
	{
		delay(1000);
		if(C3==0)
		{
			while(C3==0) {}
		}
	}
	else if(C4==0)     //S19
	{
		delay(1000);
		if(C4==0)
		{
			while(C4==0) {}
		}
	}
	R2=0;
	R1=R3=R4=1;
	C1=C2=C3=C4=1;
	if(C1==0)			//S6
	{	
		delay(1000);
		if(C1==0)
		{
			while(C1==0) {}
		}
	}
	else if(C2==0)     //S10
	{
		delay(1000);
		if(C2==0)
		{
			while(C2==0) {}
		}
	}
	else if(C3==0)     //S14
	{
		delay(1000);
		if(C3==0)
		{
			while(C3==0) {}
		}
	}
	else if(C4==0)     //S18
	{
		delay(1000);
		if(C4==0)
		{
			while(C4==0) {}
		}
	}
	R3=0;
	R2=R1=R4=1;
	C1=C2=C3=C4=1;
	if(C1==0)			//S5
	{	
		delay(1000);
		if(C1==0)
		{
			while(C1==0) {}
		}
	}
	else if(C2==0)     //S9
	{
		delay(1000);
		if(C2==0)
		{
			while(C2==0) {}
		}
	}
	else if(C3==0)     //S13
	{
		delay(1000);
		if(C3==0)
		{
			while(C3==0) {}
		}
	}
	else if(C4==0)     //S17
	{
		delay(1000);
		if(C4==0)
		{
			while(C4==0) {}
		}
	}
	R4=0;
	R2=R3=R1=1;
	C1=C2=C3=C4=1;
	if(C1==0)			//S4
	{	
		delay(1000);
		if(C1==0)
		{
			while(C1==0) {}
		}
	}
	else if(C2==0)     //S8
	{
		delay(1000);
		if(C2==0)
		{
			while(C2==0) {}
		}
	}
	else if(C3==0)     //S12
	{
		delay(1000);
		if(C3==0)
		{
			while(C3==0) {}
		}
	}
	else if(C4==0)     //S16
	{
		delay(1000);
		if(C4==0)
		{
			while(C4==0) {}
		}
	}
}
/**************************************************
************************NE555**********************
**************************************************/
void Timer0_1Init(void)		
{
	AUXR |= 0x40;		
	TMOD = 0x16;		
	TL0 = 0xff;		
	TH0 = 0xff;	
	TL1 = 0xA0;	
	TH1 = 0x15;
	TR0 = 1;
    ET0 = 1;		
	TR1 = 1;
	ET1 = 1;
	EA  = 1;
}

void Service_t0() interrupt 1
{
	count++;
}

void Service_t1() interrupt 3
{
	count1++;
	if(count1==200)
	{
		pl=count;
		count=0;
		count1=0;
	}
}

/**************************************************
************************PCF8591********************
**************************************************/
u8 Read_PCF8691(u8 addr)
{
	u8 dat;
	IIC_Start();
	IIC_SendByte(0x90);
	IIC_WaitAck();
	IIC_SendByte(addr);
	IIC_WaitAck();
	IIC_Stop();
	
	IIC_Start();
	IIC_SendByte(0x91);
	IIC_WaitAck();
	dat=IIC_RecByte();
	IIC_SendAck(1);
	IIC_Stop();
	return dat;
}

void Wire_PCF8691(u8 dat)
{
	IIC_Start();
	IIC_SendByte(0x90);
	IIC_WaitAck();
	IIC_SendByte(0x40);
	IIC_WaitAck();
	IIC_SendByte(dat);
	IIC_WaitAck();
	IIC_Stop();
}
/**************************************************
************************EEPROM********************
**************************************************/
u8 Read_EEPROM(u8 addr)
{
	u8 dat;
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(addr);
	IIC_WaitAck();
	IIC_Stop();
	
	IIC_Start();
	IIC_SendByte(0xa1);
	IIC_WaitAck();
	dat=IIC_RecByte();
	IIC_SendAck(1);
	IIC_Stop();
	return dat;
}

void Wire_EEPROM(u8 addr,u8 dat)
{
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(addr);
	IIC_WaitAck();
	IIC_SendByte(dat);
	IIC_WaitAck();
	IIC_Stop();
}
/**************************************************
************************DS18B20********************
**************************************************/
float Read_temp()
{
	u8 low,hig;
	float temp;
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	delay(300);
	
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);
	low=Read_DS18B20();
	hig=Read_DS18B20();
	temp=(hig<<8) | low;
	temp=temp*0.625;
	return temp;
}
/**************************************************
*************************DS1302********************
**************************************************/
u8 time[3]={0x13,0x14,0x20};
u8 wire_time[3]={0x84,0x82,0x80};
u8 read_time[3]={0x85,0x83,0x81};

void Wire_ds1302()
{
	u8 i;
	for(i=0;i<3;i++)
	{
		Write_Ds1302_Byte(wire_time[i],time[i]);
	}
}

void Read_ds1302()
{
	u8 i;
	for(i=0;i<3;i++)
	{
		time[i]=Read_Ds1302_Byte(wire_time[i]);
	}
}
/**************************************************
************************主函数*********************
**************************************************/
void main()
{
	Init_system();
	Wire_ds1302();
	Wire_EEPROM(0x00,13);
	Timer0_1Init();
	while(1)
	{
//		Key_BTN();
//		Key_KBD();

//		Read_ds1302();
		
//		dat=Read_EEPROM(0x00);
//		
//		Wire_PCF8691(255);
//		vv=Read_PCF8691(0x03)/0.51;
//		
//		dat=Read_temp();
//		
//		Display_all();
		Display_pl();
	}
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:36:52  更:2022-04-09 18:37:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:29:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码