码迷,mamicode.com
首页 > 其他好文 > 详细

008-单片机最小系统解析、函数的调用

时间:2021-02-06 12:09:15      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:解析   其他   最小   led   clu   手动   stat   小系统   nbsp   

单片机最小系统

  • 电源电路
  1. 5V和3.3V是一个概念值,非准确值。
  2. 数字电路常用电源有24V,12V,5V,3.3V,2.5V,1.8V。
  • 晶振电路
  1. 有源晶振(常称为振荡器)和无源晶振(常称为晶体)
  2. 接法:
    技术图片
     
    技术图片
  • 复位电路
    1.原理图:
    技术图片
  1. 上电复位:正常工作时K17断开,RST为0V;上电瞬间电容充电,电容相当导线,使得RST上有电压,然后慢慢的下降至0V,进入正常工作。
  2. 上电复位时间约为1.2RC。
  3. 手动复位:正常工作时K17断开,RST为0V;按下按键,左边通路,使得RST上有电压且接近5V;松开按键,电容充电,电容相当导线,使得RST上有电压,然后慢慢的下降至0V,进入正常工作。

函数的调用

  • 函数调用一般形式:函数名(实参列表)
  • 函数调用注意事项:
  1. 函数调用时不加函数类型;
  2. 函数调用之前必须进行定义或申明;
  3. 函数申明时必须加函数类型、函数形参、分号。
    备注:一般情况下代码顺序为主函数->其他函数->中断函数
  • 函数的形参和实参
    实参:调用一个有参数的函数时,函数名后面括号中得的参数。
    形参:被调用的函数进行定义时,扩号内的参数。
     
    用函数来改写一下【005-数码管的使用】中方案三的程序代码,结果如下:
 #include<reg52.h>	//头文件

sbit LS1 = P2^2;	//74LS138控制端
sbit LS2 = P2^3;
sbit LS3 = P2^4;

unsigned char shu_ma_guan[16] = {
	0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,	//0~F的对应值
	0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unsigned char LedBuff[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};	//定义8个数码管初始状态均为00000000,即都不显示

void SecondCount();	//函数的申明
void LedRefresh();

void main()		/主函数
{
	TMOD = 0x01;	//定时器定义,晶振12Mhz,每次1ms
	TH0 = 0xFC;
	TL0 = 0x18;
	TR0 = 1;	//打开定时器
	while(1)
	{
		if(TF0 == 1)	//溢出标志
		{
			TF0 = 0;	//溢出标志复位
			TH0 = 0xFC;	//定时器定义复位
			TL0 = 0x18;
			SecondCount();						
			LedRefresh();
		}
	}	
}

void SecondCount()
{
 	static unsigned int cnt = 0;	//定义为静态变量,使得每次调用时cnt的值可以保持住
	static unsigned long sec = 0;

	cnt++;		//定时器溢出计次
	if(cnt == 1000)	        //溢出1000次,时长1000ms,为1秒
	{
		cnt = 0;	//计次清零
		sec++;		//时长加1.即过了一秒钟
		LedBuff[0] = shu_ma_guan[sec%10];	//确定数码管在某个时间时各个位的显示数字
		LedBuff[1] = shu_ma_guan[sec/10%10];
		LedBuff[2] = shu_ma_guan[sec/100%10];
		LedBuff[3] = shu_ma_guan[sec/1000%10];
		LedBuff[4] = shu_ma_guan[sec/10000%10];
		LedBuff[5] = shu_ma_guan[sec/100000%10];
		LedBuff[6] = shu_ma_guan[sec/1000000%10];
		LedBuff[7] = shu_ma_guan[sec/10000000%10];
	}	
}

void LedRefresh()
{
	static unsigned char i = 0;	
	
	if(i == 0)	//定义数码管刷新
	{LS1=0; LS2=0; LS3=0;i++;P0=LedBuff[0];}	//片选使得第一个数码管显示
	else if(i == 1)										 					
	{LS1=1; LS2=0; LS3=0;i++;P0=LedBuff[1];}	//片选使得第二个数码管显示
	else if(i == 2)
	{LS1=0; LS2=1; LS3=0;i++;P0=LedBuff[2];}
	else if(i == 3)
	{LS1=1; LS2=1; LS3=0;i++;P0=LedBuff[3];}
	else if(i == 4)
	{LS1=0; LS2=0; LS3=1;i++;P0=LedBuff[4];}
	else if(i == 5)
	{LS1=1; LS2=0; LS3=1;i++;P0=LedBuff[5];}
	else if(i == 6)
	{LS1=0; LS2=1; LS3=1;i++;P0=LedBuff[6];}
	else if(i == 7)
	{LS1=1; LS2=1; LS3=1;i=0;P0=LedBuff[7];}	
}

008-单片机最小系统解析、函数的调用

标签:解析   其他   最小   led   clu   手动   stat   小系统   nbsp   

原文地址:https://www.cnblogs.com/shihaoyang/p/14379841.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!