首页 > 其他分享 >单片机初学日记9.16-9.22

单片机初学日记9.16-9.22

时间:2024-09-25 20:22:45浏览次数:9  
标签:P2 9.22 Led Val 9.16 unsigned 单片机 while Key

准备

1.软件安装 
        编写软件 keilv5 
        烧录软件 stcisp 

2.新建工程:养成编程习惯

            从上到下 由主到次
            芯片AT89C52
            品字 第一列工程名 第二列 user主程序 driver底层
            魔术棒 hex文件创建
        

函数

3.  点灯 两种方式进行点亮

        对整体赋值

        例如 P2=0x5f //运用十六进制

        //0x5f 为0101 1111 D6和D8为点亮状态

        对单个赋值

        例如 P2_0=0  D8为点亮状态
         

//头语言区
#include <REGX52.H>

//主程序
void main()
{
	while(1)
	{	
			P1=0x5f;	//编写代码的地方
	}
}

4.延迟函数 Delay(50) //延迟50

void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;
	while(xms--)
	{
	i = 11;
	j = 190;
	do
	{
		while (--j);
		} while (--i);
		}
	}

5.流水灯

_crol_左移    _cror_右 #include<intrins.h> 
#include <REGX52.H>
#include <intrins.h>
 int Led =0x5f;
 void main()
{
	while(1)
	{	
			P2=Led;
			Led=_crol_(Led,1);
	}
}

流转时加速,达到一定界限会重置流转的时间

#include <REGX52.H>
#include <intrins.h>
//头文件
 int Led =0x5f;//初始灯光设置
 int time=500;
void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;
	while(xms--)
	{
	i = 11;
	j = 190;
	do
	{
		while (--j);
		} while (--i);
		}
	}
void main()
{
	while(1)
	{	
			P2=Led;
			Delay(time);
			Led=_crol_(Led,1);
			time=time-100;//流转越来越快
			if(time==0){time=500;}//达到一定限制,进行重置
	}
}

模块化编程

6.独立按键

unsigned char Key_Read()
{	
unsigned char temp =0;
if(P3_1==0)temp=1;
if(P3_0==0)temp=2;
if(P3_2==0)temp=3;
if(P3_3==0)temp=4;
return temp;
}
//优先读取按键返回值
Key_Val=Key_Read();//读取键码
Key_Down=Key_Val&(Key_Val^Key_Old);//检测上升沿
Key_Up=~Key_Val&(Key_Val^Key_Old);//检测下降沿
Key_Old=Key_Val;//扫描变量
//纯背这块 定义后在这么写

小项目

自动开启流转为1000 带有次数限制 流转20次暂停

s1流转变为100 s2流转变为20

s3灯光变为4个(初始为两个) s4次数重置

//主区域
#include <REGX52.H>
#include<intrins.h>

//按键读取函数
unsigned char Key_Read()
{	
unsigned char temp =0;
if(P3_1==0)temp=1;
if(P3_0==0)temp=2;
if(P3_2==0)temp=3;
if(P3_3==0)temp=4;
return temp;
}
void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;
	while(xms--)
	{
	i = 11;
	j = 190;
	do
	{
		while (--j);
		} while (--i);
		}
	}
//声明变量
unsigned char Key_Val,Key_Down,Key_Up,Key_Old;
unsigned int time =1000;
unsigned char Led=0x5f;
unsigned int count=0;

void main ()
{
	while(1){
						Key_Val=Key_Read();//读取键码
						Key_Down=Key_Val&(Key_Val^Key_Old);//检测上升沿
						Key_Up=~Key_Val&(Key_Val^Key_Old);//检测下降沿
						Key_Old=Key_Val;//扫描变量
						
						if(count<=10){
						P2=Led;
						Led=_cror_(Led,1);
						Delay(time);
						P2=Led;
						count++;}
				switch(Key_Down)
				{
				case 1:
				time=100;
				break;
				case 2:
				time=20;
				break;
				case 3:
				Led=0xC3;
				break;
				case 4:
				count=0;
				break;
				}
}	
}

//主区域
#include <REGX52.H>
#include<intrins.h>

//按键读取函数
unsigned char Key_Read()
{	
unsigned char temp =0;
if(P3_1==0)temp=1;
if(P3_0==0)temp=2;
if(P3_2==0)temp=3;
if(P3_3==0)temp=4;
return temp;
}
void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;
	while(xms--)
	{
	i = 11;
	j = 190;
	do
	{
		while (--j);
		} while (--i);
		}
	}
//声明变量
unsigned char Key_Val,Key_Down,Key_Up,Key_Old;
unsigned int time =1000;
unsigned char Led=0xfe;
unsigned int mode = 3;
unsigned int open =0;
unsigned char Led_34[4]={0x7e,0xbd,0xdb,0xe7};
unsigned int i ;

void main ()
{
	P2=Led;
	while(1){
						Key_Val=Key_Read();//读取键码
						Key_Down=Key_Val&(Key_Val^Key_Old);//检测上升沿
						Key_Up=~Key_Val&(Key_Val^Key_Old);//检测下降沿
						Key_Old=Key_Val;//扫描变量
						
						
				switch(Key_Down)
				{
				case 1:
				open=0;
				break;
				case 2:
				open=1;
				break;
				case 3:
				mode++;
				if(mode==5){mode=1;}
				break;
				case 4:
				mode--;
				if(mode==255){mode=3;}
				break;
				}
				if(open==0)
				{
					switch(mode)
					{
					case 1:
					P2=Led;
					Led=_crol_(Led,1);
					Delay(500);
					P2=Led;
					break;
					case 2:
					P2=Led;
					Led=_cror_(Led,1);
					Delay(500);
					P2=Led;
					break;
					case 3:
					P2=Led_34[i];
					i++;
					if(i==4){i=0;}
					Delay(500);
					
					break;
					case 4:
					P2=Led_34[i];
					if(i==0){i=4;}
					i--;
					Delay(500);
					break;
						}
}
}	
}

7.动态数码管

先点亮LED模块然后利用SMG点亮灯条构成一个完整的表达符号

138译码器 P22 P23 P24 分别为1 2 4  最高值为7 代表LED8 对其进行点亮

#include <REGX52.H>

void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;
	while(xms--)
	{
	i = 11;
	j = 190;
	do
	{
		while (--j);
		} while (--i);
		}
	}
	
void main ()
{
while(1){
	P2_2=0;
	P2_2=1;
	P2_2=0;
	
	P0=0xfe;
	Delay(500);
	P0=0x00;
	Delay(500);
	
	}

}

进行简单的显示可以增加相应的流动效果

简单的定义简单明了

#include <REGX52.H>
#include "Delay.h"
unsigned char table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
void Nixie(unsigned char Local,Num) //0-8λÖõĵÆ
{
	switch(Local)
	{
		case 1:
			P2_2=1; P2_3=1;P2_4=1;
		break;
		case 2:
			P2_2=0; P2_3=1;P2_4=1;
		break;
		case 3:
			P2_2=1; P2_3=0;P2_4=1;
		break;
		case 4:
			P2_2=0; P2_3=0;P2_4=1;
		break;
		case 5:
			P2_2=1; P2_3=1;P2_4=0;
		break;
		case 6:
			P2_2=0; P2_3=1;P2_4=0;
		break;
		case 7:
			P2_2=1; P2_3=0;P2_4=0;
		break;
		case 8:
			P2_2=0; P2_3=0;P2_4=0;
		break;
	//·ÖÅäµÆ¿é
	}
	//µãÁÁµÆ¿é
	P0=table[Num];
	P0=0x00;
	
}

定时器

确定频率,一般为1毫秒 删除AUXR&=07f

标签:P2,9.22,Led,Val,9.16,unsigned,单片机,while,Key
From: https://blog.csdn.net/2201_75813159/article/details/142414308

相关文章

  • 基于STM32单片机的病人护理监测系统
    基于STM32单片机的病人护理监测系统0、毕业设计选题原则说明(重点)1、项目简介1.1系统功能1.2演示视频2、部分电路设计2.1STM32单片机核心板电路设计2.2DS18B20温度采集电路2.3MKB0805血压心率检测电路设计2.4、非接触式水位检测电路设计2.5、OLED显示电路设计3、单片机代码展......
  • 基于STM32单片机的厨房天然气蓝牙手机APP检测GSM短信报警系统
    基于STM32单片机的厨房天然气蓝牙手机APP检测GSM短信报警系统0、毕业设计选题原则说明(重点)1、项目简介1.1系统功能1.2演示视频2、部分电路设计2.1STM32单片机核心板电路设计2.2HC05蓝牙无线通信电路设计2.3sim900AGSM短信报警电路2.4、MQ-4天然气检测电路设计2.5、HC-SR505......
  • 基于STM32单片机的OneNet物联网云平台血压心率体温摔倒检测系统
    基于STM32单片机的OneNet物联网云平台血压心率体温摔倒检测系统0、毕业设计选题原则说明(重点)1、项目简介1.1、系统功能1.2、演示视频2、部分电路设计2.1、STM32单片机核心板电路设计2.2、ESP8266WIFI电路设计2.3、MKB0805血压心率检测电路设计2.4、ADXL345摔倒检测电路设计2.5、D......
  • 基于STM32单片机的OPENMV颜色识别小球追踪系统设计
    基于STM32单片机的OPENMV颜色识别小球追踪系统设计0、毕业设计选题原则说明(重点)1、项目简介1.1、系统功能1.2、演示视频2、部分电路设计2.1、STM32单片机核心板电路设计2.2、openmv使用说明2.3、stm32与openmv通信电路设计2.4、OLED液晶显示电路设计2.5、二维云台控制电路3、单片......
  • 基于STM32单片机的声音压力红外检测OneNET云平台防盗设计
    基于STM32单片机的声音压力红外检测OneNET云平台防盗设计0、毕业设计选题原则说明(重点)1、项目简介1.1系统功能1.2演示视频2、部分电路设计2.1STM32单片机核心板电路设计2.2HX711压力重力检测电路设计2.3ESP8266WIFI无线通信电路设计2.4、声音检测电路设计3、单片机代码展示3......
  • 嵌入式学习路线——2没有必要从51单片机起步了
    往期文章:1首先搞清嵌入式是什么、学了有什么用嵌入式适合哪些人学本专业的学生主要是电子类的学生,比如电子信息工程、通信工程、自动化、机械电子工程、仪器仪表等专业的学生,本人就是电子信息工程专业。计算机科学、软件工程之类的也可以学,但是这些偏纯软件方向,可能去BAT......
  • 基于单片机设计的自动门控制系统
    一、前言自动门控制系统是一种智能化的应用,能够根据人体接近信号自动完成门的打开和关闭操作。在传统的门控系统中,通常需要人手动进行门的开启和关闭,不仅费时费力,还不够智能高效。本项目采用了STC89C52作为主控芯片,并结合红外热释电模块和28BYJ-48步进电机,实现了门的自动打开和关闭......
  • H7-TOOL脱机烧录增加国产3PEAK混合信号单片机TPS32和富芮坤FR8008,FR8003和FR2012支持
    支持单路,1拖4和1拖16脱机烧录3PEAKS思瑞浦混合信号单片机TPS32M支持1、在线烧录,脱机烧录均正常。2、注意事项:推荐使用整片擦除。在线烧录:脱机烧录:接线效果:富芮坤FR8008x支持,支持在线烧录和脱机烧录在线烧录:脱机烧录:接线效果:富芮坤FR8003支持,支持在线烧录和脱机烧......
  • 23 基于51单片机的自动清洗系统(自动洗衣机)
    目录一、主要功能二、硬件资源三、程序编程四、实现现象一、主要功能基于AT89C52单片机,采用DS18B20温度传感器检测温度,通过LCD1602显示屏显示,并且按键可以加减温度的上限;点击清洗按键后,倒计时1分钟,电机正转20s,反转20s,直到倒计时结束停止,蜂鸣器报警。点击脱水按键......
  • Cisco ASA 9.22.1 发布下载,新增功能概览
    CiscoASA9.22.1-思科自适应安全设备(ASA)软件CiscoAdaptiveSecurityAppliance(ASA)请访问原文链接:https://sysin.org/blog/cisco-asa/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org新增功能重要说明ASA9.22(1)及更高版本不支持Firepower2100-......