51单片机_T0定时、计数器
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{//软件延时函数,延时n毫秒
unsigned inti, j;
for(i=n;i>0;i--)
for(j=110;j>0;j--);
}
voiddisplay(int num,int rep)//控制数码管按位输出显示数值num,显示时间为2*rep毫秒
{
charBitSet[8] =
{
0x7f, 0xbf, 0xdf, 0xef,
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1)
{
if(count==20)//每20次中断即每1s,处理一次
{
num++;//显示数值加1
count=0;
P1=~P1;//指示灯状态取反
}
display(num, 1);//用数码管输出显示num
}
}
voidint_T0() interrupt 1//定时器T0中断
{
charBitSet[8] =
{
0x7f, 0xbf, 0xdf, 0xef,
0xf7, 0xfb, 0xfd, 0xfe
};//用于设置(低电平位选)数码管的位选信号,从低到高对应8个数码管
charNumberCode[16] =
{
0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6d, 0x7d, 0x07,
};//用于设置(共阴极)数码管的段选信号,从0~f共16个数值
intn, r = rep, i;
while(r-- > 0)
{
n = num;
i = 0;
while(n>=0)
{
P0 = 0xff;//关闭数码管当前位的显示,共阳极关闭显示段选信号
P2 = BitSet[i];//选中数码管对应的位
P2 = BitSet[i];//选中数码管对应的位
P0 = ~NumberCode[n%10];//向数码管的对应位中送入该位数值对应的段选信号
delay_ms(2);//每一位延时显示2ms
P2 = 0xff;//关闭所有位选
i++;//位标记
n=n/10;//取数值n的商
if(n==0)break;//当取得的商为0时退出while循环
{
count++;
TH0=(65536-iniNum)/256;
TL0=(65536-iniNum)%256;
}
//2、计数器T0,此程序中T0工作于计数器模式,每次按下按键key3触发计数中断时,数码管显示的数值加1//计数器T0中断,由按键k3触发
#include<reg52.h>
voiddelay_ms(unsigned int n)
《51系列单片机_定时、计数器》源文件
此程序使用单片机89SC52
//1、定时器T0,此程序中T0工作于定时器模式,使用中断,精确计时1秒,每秒数码管显示的数值加1,LED指示灯状态取反
#include<reg52.h>
#defineiniNum 45872//晶振频率为11.0592计时50ms的计数值
intnum, count;
voiddelay_ms(unsigned int n)
{//软件延时函数,延时n毫秒
unsigned inti, j;
for(i=n;i>0;i--)
for(j=110;j>0;j--);
}
voiddisplay(int num,int rep)//控制数码管按位输出显示数值num,显示时间为2*rep毫秒
voidmain()
{
TMOD=0x05;//设置计数器0工作于方式1,16位计数方式
TH0=0;//设置计数初值
TL0=0;
EA=1;//开总中断
ET0=1;//开计数器0中断
TR0=1;//启动计数器0
while(1)
{
display(256*TH0+TL0, 1);//用数码管输出显示计数器中的数值
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71,
};//用于设置(共阴极)数码管的段选信号,从0~f共16个数值
intn, r = rep, i;
while(r-- > 0)
{来自百度文库
n = num;
i = 0;
while(n>=0)
{
P0 = 0xff;//关闭数码管当前位的显示,共阳极关闭显示段选信号
}
}
}
}
}
voidmain()
{
num=0;//初始化计数值
count=0;
TMOD=0x01;//设置定时器0工作于方式1,16位计数方式
TH0=(65536-iniNum)/256;
TL0=(65536-iniNum)%256;//从iniNum计数到65536,每次计时50ms
EA=1;//开总中断
0xf7, 0xfb, 0xfd, 0xfe
};//用于设置(低电平位选)数码管的位选信号,从低到高对应8个数码管
charNumberCode[16] =
{
0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71,
P0 = ~NumberCode[n%10];//向数码管的对应位中送入该位数值对应的段选信号
delay_ms(2);//每一位延时显示2ms
P2 = 0xff;//关闭所有位选
i++;//位标记
n=n/10;//取数值n的商
if(n==0) break;//当取得的商为0时退出while循环
}
}
}
unsigned inti, j;
for(i=n;i>0;i--)
for(j=110;j>0;j--);
}
voiddisplay(int num,int rep)//控制数码管按位输出显示数值num,显示时间为2*rep毫秒
{
charBitSet[8] =
{
0x7f, 0xbf, 0xdf, 0xef,
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1)
{
if(count==20)//每20次中断即每1s,处理一次
{
num++;//显示数值加1
count=0;
P1=~P1;//指示灯状态取反
}
display(num, 1);//用数码管输出显示num
}
}
voidint_T0() interrupt 1//定时器T0中断
{
charBitSet[8] =
{
0x7f, 0xbf, 0xdf, 0xef,
0xf7, 0xfb, 0xfd, 0xfe
};//用于设置(低电平位选)数码管的位选信号,从低到高对应8个数码管
charNumberCode[16] =
{
0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6d, 0x7d, 0x07,
};//用于设置(共阴极)数码管的段选信号,从0~f共16个数值
intn, r = rep, i;
while(r-- > 0)
{
n = num;
i = 0;
while(n>=0)
{
P0 = 0xff;//关闭数码管当前位的显示,共阳极关闭显示段选信号
P2 = BitSet[i];//选中数码管对应的位
P2 = BitSet[i];//选中数码管对应的位
P0 = ~NumberCode[n%10];//向数码管的对应位中送入该位数值对应的段选信号
delay_ms(2);//每一位延时显示2ms
P2 = 0xff;//关闭所有位选
i++;//位标记
n=n/10;//取数值n的商
if(n==0)break;//当取得的商为0时退出while循环
{
count++;
TH0=(65536-iniNum)/256;
TL0=(65536-iniNum)%256;
}
//2、计数器T0,此程序中T0工作于计数器模式,每次按下按键key3触发计数中断时,数码管显示的数值加1//计数器T0中断,由按键k3触发
#include<reg52.h>
voiddelay_ms(unsigned int n)
《51系列单片机_定时、计数器》源文件
此程序使用单片机89SC52
//1、定时器T0,此程序中T0工作于定时器模式,使用中断,精确计时1秒,每秒数码管显示的数值加1,LED指示灯状态取反
#include<reg52.h>
#defineiniNum 45872//晶振频率为11.0592计时50ms的计数值
intnum, count;
voiddelay_ms(unsigned int n)
{//软件延时函数,延时n毫秒
unsigned inti, j;
for(i=n;i>0;i--)
for(j=110;j>0;j--);
}
voiddisplay(int num,int rep)//控制数码管按位输出显示数值num,显示时间为2*rep毫秒
voidmain()
{
TMOD=0x05;//设置计数器0工作于方式1,16位计数方式
TH0=0;//设置计数初值
TL0=0;
EA=1;//开总中断
ET0=1;//开计数器0中断
TR0=1;//启动计数器0
while(1)
{
display(256*TH0+TL0, 1);//用数码管输出显示计数器中的数值
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71,
};//用于设置(共阴极)数码管的段选信号,从0~f共16个数值
intn, r = rep, i;
while(r-- > 0)
{来自百度文库
n = num;
i = 0;
while(n>=0)
{
P0 = 0xff;//关闭数码管当前位的显示,共阳极关闭显示段选信号
}
}
}
}
}
voidmain()
{
num=0;//初始化计数值
count=0;
TMOD=0x01;//设置定时器0工作于方式1,16位计数方式
TH0=(65536-iniNum)/256;
TL0=(65536-iniNum)%256;//从iniNum计数到65536,每次计时50ms
EA=1;//开总中断
0xf7, 0xfb, 0xfd, 0xfe
};//用于设置(低电平位选)数码管的位选信号,从低到高对应8个数码管
charNumberCode[16] =
{
0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71,
P0 = ~NumberCode[n%10];//向数码管的对应位中送入该位数值对应的段选信号
delay_ms(2);//每一位延时显示2ms
P2 = 0xff;//关闭所有位选
i++;//位标记
n=n/10;//取数值n的商
if(n==0) break;//当取得的商为0时退出while循环
}
}
}