求一个关于单片机定时器和计数器的c语言程序!大神出现吧~~~
51单片机的两个定时器一个要实现定时功能在P1口产生周期为1S的方波,另一个定时器做计数器使用,用来记录P1口产生方波数,并在单个个共阳的数码管上显示记录的数值,到了9后...
51单片机的两个定时器一个要实现定时功能在P1口产生周期为1S的方波,另一个定时器做计数器使用,用来记录P1口产生方波数,并在单个个共阳的数码管上显示记录的数值,到了9后从0重新开始计数。另外还要有一个按键,用来开关数码管的显示,但是计数器仍然计数,当一按按键,数码管熄灭,但计数器计数不停止,再按一次按键,数码管亮起,显示的是当前的计数值!求大神赐教!
展开
3个回答
展开全部
//说明:p11产生方波。p0口显示。按键接数码管的阳极公共端。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,
~0x6D,~0x7D,~0x07,~0x7F,~0x6F};//数码管段码
sbit p11=P1^1;
uchar y,z,c;
/*时间中断程序*/
void int1() interrupt 1 //时间为50MS
{
TH0=0X4C;
TL0=0X00;
z++;
if(z==10)
{z=0;
p11=~p11;
y++;
}
if(y==2) //既一高一低,2次计数才为一个周期
{y=0;
c++;
if(c==10) //满十归0
c=0;
}
P0=LED7Code[c];
}
void main()
{
TMOD=0X01;
TL0=0X00;
TH0=0x4c;
TR0=1; //启动定时计数器0
ET0=1; //开定时器中断0
EA=1; //开总中断
while(1); //原地等待
}
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,
~0x6D,~0x7D,~0x07,~0x7F,~0x6F};//数码管段码
sbit p11=P1^1;
uchar y,z,c;
/*时间中断程序*/
void int1() interrupt 1 //时间为50MS
{
TH0=0X4C;
TL0=0X00;
z++;
if(z==10)
{z=0;
p11=~p11;
y++;
}
if(y==2) //既一高一低,2次计数才为一个周期
{y=0;
c++;
if(c==10) //满十归0
c=0;
}
P0=LED7Code[c];
}
void main()
{
TMOD=0X01;
TL0=0X00;
TH0=0x4c;
TR0=1; //启动定时计数器0
ET0=1; //开定时器中断0
EA=1; //开总中断
while(1); //原地等待
}
展开全部
书上资料多,很简单的。如果是为了应付老师的话超超就行了。如果是自己想设计的话好好研究把
把TMOD 设置为一个定时一个为计数,定时的定0.5秒然后计算出TH1和TLI 的初值 计数的就8位的定为中断在中断里显示就行了
把TMOD 设置为一个定时一个为计数,定时的定0.5秒然后计算出TH1和TLI 的初值 计数的就8位的定为中断在中断里显示就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
只要设置好TMOD方波就能产生,用方式一,我认为计数用中断比较好,不浪费CPU,在中断程序里加显示程序!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询