标题: 使用单片机计数器实现点亮二极管并且用数码管显示当前计数 程序问题 [打印本页]
作者: 蓝曦臣 时间: 2019-4-12 13:15
标题: 使用单片机计数器实现点亮二极管并且用数码管显示当前计数 程序问题
5)计数器方式,原理图如下
(1)用内部定时器/计数器1的计数功能,工作在方式2,实现计数10次产生中断使P1.7所接发光二极管点亮(计数用数码管显示,需加数码管)。
(2)用内部定时器/计数器1的计数功能,工作在方式1,8位发光二极管以二进制显示按键次数。
想知道是如何实现计数,我将TMOD=0x60;他还是会自动的计数,我想实现用独立按键,按一次则加一计数,然后加到10就让发光二极管亮,
求教圈里大佬
-
1.png
(980.3 KB, 下载次数: 40)
作者: 蓝曦臣 时间: 2019-4-12 13:16
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit js=P3^5;
sbit LED1=P2^0;
sbit key1=P3^3;
uchar code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uint read()
{
uchar t1;
uint val;
while(1)
{
t1=TL1; //读取寄存器值
break;
}
val=t1-246; //10次的时候就中断
return val;
}
void delay(uint k)
{ uint x,y;
for(x=k;x>0;x--)
for(y=110;y>0;y--);
}
void Time0Init()
{
TMOD=0x60;
TH1=0xF6;
TL1=0xF6;
ET1=1;
EA=1;
TR1=1;
}
void display(uint n)//****************************************************时钟显示
{ uint z;
for(z=0;z<2;z++)
{
if(z==0)
{
LSA=1;LSB=0;LSC=0;
P0=smg[n/10];
delay(10); //延时函数,没有延时将不能显示
P0=0x00;
}
if(z==1)
{
LSA=0;LSB=0;LSC=0;
P0=smg[n%10];
delay(10);
P0=0x00;
}
}
}
void main() //*********************主函数
{
uint num;
Time0Init();
while(1)
{
if(key1==0)
{ LED1=1;
delay(20);
if(key1==0)
{
js=1;
delay(10);
js=0; //给它低电平,让它计数
delay(10);
num=read(); //将寄存器的值放入num
}while(!key1);
}
display(num);
}
}
void Time0() interrupt 3
{
LED1=0;
}
这个是可以实现功能的一个代码,但是使用了独立按键判断,我老师说那个P35接口可以直接给低电平计数,但是我不知道怎么改
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |