008-单片机最小系统解析、函数的调用
单片机最小系统
电源电路
- 5V和3.3V是一个概念值,非准确值。
- 数字电路常用电源有24V,12V,5V,3.3V,2.5V,1.8V。
晶振电路
- 有源晶振(常称为振荡器)和无源晶振(常称为晶体)
- 接法:
复位电路
1.原理图:
2. 上电复位:正常工作时K17断开,RST为0V;上电瞬间电容充电,电容相当导线,使得RST上有电压,然后慢慢的下降至0V,进入正常工作。
3. 上电复位时间约为1.2RC。
4. 手动复位:正常工作时K17断开,RST为0V;按下按键,左边通路,使得RST上有电压且接近5V;松开按键,电容充电,电容相当导线,使得RST上有电压,然后慢慢的下降至0V,进入正常工作。
函数的调用
- 函数调用一般形式:函数名(实参列表)
- 函数调用注意事项:
- 函数调用时不加函数类型;
- 函数调用之前必须进行定义或申明;
- 函数申明时必须加函数类型、函数形参、分号。
备注:一般情况下代码顺序为主函数->其他函数->中断函数
- 函数的形参和实参
实参:调用一个有参数的函数时,函数名后面括号中得的参数。
形参:被调用的函数进行定义时,扩号内的参数。
实验一:用函数来改写一下【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];}
}
本文来自博客园,作者:shihao_Yang,转载请注明原文链接:https://www.cnblogs.com/Yang-shihao/p/14379841.html