单片机51 day46

发布于:2025-08-05 ⋅ 阅读:(16) ⋅ 点赞:(0)

单片机

一:基础概念

一:单片机最小系统

单片机:电源+时钟(晶振)+复位 //实现的最小组件

电源:5V直流

时钟(晶振):决定系统运行的速率 一般12M(不超过50M),因为过快导致稳定性,抗干扰性能下降,

​ 分为分频和倍频,一般都是分频(1/(2*6)分频)

复位:电平信号(高/低) 2种:先上升沿,在下降沿; 先下降沿,后上升沿

原理图:表示器件的逻辑连接关系

PCB:表示器件物理连接关系

二:RAM/ROM 芯片自带

RAM :随机存储器 (访问速度快) 4kb //掉电数据丢失

ROM :只读存储器 (访问速度慢) 100~200kb //掉电数据不丢失

三:发光二极管

单个二极管要求电压:0.5v~0.7v 一般给1v~2v 电流:10mv~MAX

四:流水灯

#include <reg51.h>

void delay_ms(unsigned int num)
{
	unsigned char i,j;
	while(num--)
	{
		i = 2;//看具体晶振大小
		j = 199;
	}
	do
	{
		while(--j);
	}while(--i);
}

void main(void)
{
	unsigned char dat = 0;
	
	while(1)
	{
		 P2 = 255 - dat++; //共阳极
		 delay_ms(500);
	};
}

五:显示数字

#include <reg51.h>

void delay_ms(unsigned int num)
{
	unsigned char i,j;
	while(num--)
	{
		i = 2;
		j = 199;
	}
	do
	{
		while(--j);
	}while(--i);
}

void digit_select(unsigned char digit)
{
	unsigned char num = P2;
	num &= ~(0x7 << 2);  //22 23 24 控制
	num |= (digit << 2);
	P2 = num;
}

unsigned char array[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void digit_show_num(unsigned long num)
{
 	unsigned char digits[8];
	int i = 0;  

	for (i = 7; i >= 0; i--) {
	    digits[i] = num % 10;
	    num /= 10;
	}
   
	while(1)
	{
		for(i=0;i<8;i++)
		{
			if(digits[i] != 0)
			{
				digit_select(7 - i);
				P0 = array[digits[i]]; 
				delay_ms(2);        
			}
		}
	}
}

void main(void)
{ 
	digit_show_num(65536);	//51单片机是8位系统,所以要long int	
}


网站公告

今日签到

点亮在社区的每一天
去签到