单片机的中断定时器/计数器 60s倒计时 的设计实现
一、实验目的:
1、通过AT89C51的定时器实现60s倒计时,显示采用两位数码管动态显示。
2、用PROTEUS设计,仿真基于AT89C51单片机的60s倒计时实验。
注意扫描频率为12MHZ。
二、实验电路图设计如下:
图(2)
三、实验仪器和实验设备
PC机、PROTEUS软件或W-A-51综合开发学习版。
四、源程序设计
根据电路图自行编写
我写的如下代码:
#include<reg52.h>
#include<intrins.h>
void time0over();
sbit M2=P1^2;/*十位*/
sbit M3=P1^3;/*个位*/
char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int k=60,m=0;
void delay(int n) //延时函数
{
int z;
for(z=0;z<n;z++)
_nop_();
}
void main()
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;/*50ms*/
TR0=1;
while(1)
{
if(TF0)
{
TF0=0;
TH0=0x3c;
TL0=0xb0;
P0=table[k/10]; /*十位*/
M3=1;M2=0; /*个位关*/
delay(100);
M3=0;M2=0; /*个位开*/
P0=table[k%10]; /*个位*/
M2=1;M3=0; /*十位关*/
delay(100);
M2=0;M3=0; /*十位开*/
m++;
}
if(m==20)
{
m=0;
k--;
if(k==-1)k=60;
}
}
}
我本想通过用定时来实现控制这个三极管 但好像无法成 ,如图(1)所示。但用如图(2)却·能实现这个这个60s倒计时的实验。但是可能有些画图的时候会出现闪屏,也有的不会出现闪屏,但具体原因,我也不知道。
但应该是器件画图的问题。
这是利用一个人的时角差来展示这个倒计时的实现的 你可以把 延迟函数delay() 的延迟数调大一点就可以明白啦。
学习方式:理解三极管的放大作用:http://www.360doc.com/content/10/0314/13/1880_18715245.shtml
当晶体管被用作放大器使用时,其中两个电极用作信号 (待放大信号) 的输入端子;两个电极作为信号 (放大后的信号) 的输出端子。 那么,晶体管三个电极中,必须有一个电极既是信号的输入端子,又同时是信号的输出端子,这个电极称为输入信号和输出信号的公共电极。 按晶体管公共电极的不同选择,晶体管放大电路有三种:共基极电路 ( Common base circuit)、共射极电路(Common emitter circuit) 和 共集极电路(Common collector circuit),如下图示。
图11 由于共射极电路放大电路的电流增益和电压增益均较其它两种放大电路为大,故多用作讯号放大使用。 |
晶体三极管的放大作用晶体管是一个电流控制组件,其集极电流 IC可以由基极电流IB控制,只需轻微的改变基流IB就可以引起很大的集流变化IC。由于晶体管基流IB的轻微变化可以控制较大的集流IC,我们利用这一特点,用它来放大微弱的电信号,称为晶体管的放大作用 (Amplification),简称晶体管放大。简单来说,晶体管的放大原理是把微弱的电信号 (微弱的电压信号 Vi) 加在基极上,使基极电流按电信号变化,通过晶体管的电流控制作用,就可以在负载上得到与原信号变化一样,但增强了的电信号 (较大的电压信号 Vo)。
详情请参考:http://bbs.csdn.net/topics/390662889