ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

蓝桥杯单片机学习笔记 2022年1月6号更新

2022-01-06 13:32:17  阅读:195  来源: 互联网

标签:P2 初始化 1111 void 蓝桥 单片机 ----- 2022 sbit


关于我写的程序啥都不是还有脸上传的事

之前一直在用txt记笔记,但是后来因为代码太多了,所以想到了记到csdn上
下面是正文,无顺序,想到哪写到哪。

一些基础的

-在138译码器中,前3位代表5 6 7

P2=0xA0对应着1010 0000,则5 6 7为101,为1111 1011,Y5为0,则配置的是Y5C,控制P00-P07

P2=0x80对应着1000 0000,则5 6 7为100 为1111 0111,Y4为0,对应Y4C,这个是led灯

P2=0xC0对应着1100 0000,则5 6 7为110 为1111 1101,Y6为0,对应Y6C,这是打开数码管的片选端(控制是第几个显示),后面写P0为什么表示选哪几个,例:0x80就是1000 0000,第一个显示,也可以写为P2=(P2&0X1f)|0X80,0x80前面那个表示将P2.0-P2.4置为0

P2=0xFF对应着1111 1111,则5 6 7为111 为1111 1110,Y7为0,对应Y7C,这个是打开数码管的数据端(控制是显示什么数字)

P2=0xE0对应着 1110 1111,则5 6 7位111为1111 1110,Y7为0,对应Y7C,这个是打开数码管的数据端(控制是显示什么数字)

sfr是定义特殊功能寄存器,单片机里面,共有两种寄存器,第一种是ROM,第二种是RAM。
1 ROM的功能:ROM的数据在程序运行的时候是不容改变的,除非你再次烧写程序,他就会改变,就像我们的书本,印上去就改不了了,除非再次印刷,这个就是ROM的原理。
2 RAM的功能:RAM就是在程序运行中,数据会随时改变的,就像我们的黑板,写上了可以擦,擦完再写上去,相当于程序运行的时候,调用ROM里面的数据进行各种运算。

共阳极数码管数据表:

unsigned char code num[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF,0XC6};

表示显示的数字,从0到9,后面三个分别为-、全灭、C

数码管片选位置表(从左到右0-7):

unsigned char code weizhi[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

数码管调用函数,前面是位置,后面是显示的东西

void shumaguan_control(uchar a,uchar b)
{
	delay_ms(1);
	P2=(P2&0X1f)|0xC0;P0=weizhi[a];//
	P2=(P2&0X1f)|0xFF;P0=shuzi[b];
	delay_ms(1);
}

定时器

定时器0,设置1s:

void Init_timer0()      
{
	TMOD = 0x01;      
	TH0 = (65535 - 50000) / 256;  //50000微秒
	TL0 = (65535 - 50000) % 256;	
	EA  = 1;     
	ET0 = 1;     
	TR0 = 1;     
}

下面是以时钟为例,写执行的内容

void Service_timer0() interrupt 1
{
	TH0 = (65535 - 50000) / 256;    
	TL0 = (65535 - 50000) % 256;	
count++;
	if(count == 20)   //20*50ms为1s
	{
		second++;
		count = 0;
	}	
	if(second == 60)
	{
		minute++;
		second=0;
	}
	if(minute==60)
	{
		hour++;
		minute=0;
		if(hour==24) hour=0;
	}
	
}

矩阵按键

定义引脚

sbit R1=P3^0;//第一排初始化(如果跳线帽在右边,则只有最左侧一列可以控制,写这个没问题)
sbit R2=P3^1;//第二排初始化
sbit R3=P3^2;//第三排初始化
sbit R4=P3^3;//第四排初始化

sbit C1=P3^4;//第一列初始化(此为从右往左数)
sbit C2=P3^5;//第二列初始化
sbit C3=P4^2;//第三列初始化
sbit C4=P4^4;//第四列初始化

初始化矩阵键盘

void Init()//初始化矩阵键盘
{
	R1=R2=R3=R4=1;
	C1=C2=C3=C4=1;
}

DS18B20配置

首先是看原理图,找到DQ,连接着P14
所以先定义好DQ

sbit DQ=P1^4;
void dsinit()
{
  DQ=0;
	Delay500us();
  DQ=1;
	Delay500us();
}

防抖

按下按键,语句只执行一次:
这里以R1为例

if(R1==0)
	{
		delay_ms(50);
		if(R1==0)
		{
			//执行语句
			while(R1==0);
		}
	}

下面是一堆delay函数

有不同时间的,应该好用,我自己试过了

void Delay100us()		//@12.000MHz
{
	unsigned char i, j;

	i = 2;
	j = 39;
	do
	{
		while (--j);
	} while (--i);
}

void Delay500us()		//@12.000MHz
{
	unsigned char i, j;

	i = 6;
	j = 211;
	do
	{
		while (--j);
	} while (--i);
}


void delay_ms(unsigned int n)
{
    unsigned int i=0,j=0;
    for(i=0;i<n;i++)
        for(j=0;j<123;j++);
}

nop()的意思是一条空语句,用来延时

PCF8591

本来上课讲了,但是我一点也没听,看了这篇文章之后,就懂了,可以说是写的真好
关于iic与pcf8591

步骤:开启总线-----发送地址+写-----发送控制字节-----等待PCF8591响应-----停止总线-----重新启动总线-----发送地址+读------读取数据-----主机发送非应答信号-----停止总线

PCF8591的设备地址包括固定部分和可编程部分。可编程部分需要根据硬件引脚A0、A1和A2来设置。设备地址的最后一位用于设置数据传输的方向,即读/写位,在IIC总线协议中,设备地址是起始信号后第一个发送的字节。如果硬件地址引脚A0、A1、A2均接地,那么,PCF8591的设备的读操作地址为:0x91;而写操作地址则为:0x90。读是1,写是0

光敏传感器接到AIN1,通道1;控制寄存器应写入:0x01。
电位器Rb2接到AIN3,通道3;控制寄存器应写入:0x03。

三位数显示在数码管上:
百位:dat / 100
十位:(dat % 100) / 10
个位:dat % 10

先写这么多,剩下等我做完十二届省赛再回来补

标签:P2,初始化,1111,void,蓝桥,单片机,-----,2022,sbit
来源: https://blog.csdn.net/qq_42887663/article/details/122341288

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有