c51单片机系统资源区的p3.4孔连脉冲源的down孔,按动An锁按钮,在数码管上记数脉冲个数的程序
时间: 2024-03-21 18:41:03 浏览: 138
好的,以下是一个简单的C语言代码,可以实现你的需求:
```
#include <REG51.H>
#define uchar unsigned char
#define uint unsigned int
sbit lock_btn=P2^0; // AN锁按钮
uint count=0; // 计数器变量
void init(void);
void display(uint num);
void delay(uint n);
void main()
{
init(); // 初始化
while(1)
{
if(lock_btn==0) // 检测AN锁按钮是否按下
{
while(lock_btn==0); // 等待按钮释放
display(count); // 显示计数器的值
}
}
}
void init(void)
{
TMOD=0x05; // 设置定时器0为模式1,定时器1为模式0
TH0=0; // 定时器0初值
TL0=0;
TH1=0; // 定时器1初值
TL1=0;
ET0=1; // 允许定时器0中断
ET1=0; // 禁止定时器1中断
EA=1; // 允许总中断
TR0=1; // 启动定时器0
TR1=0; // 停止定时器1
P3_4=1; // 初始化P3.4为高电平输入
}
void display(uint num)
{
uchar i;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f // 数码管显示表
};
for(i=0;i<4;i++)
{
P1=table[num%10]; // 显示个位数
num/=10; // 取下一位数
P2=0x0f<<i; // 依次点亮数码管的四个位数
delay(1); // 稍作延时
}
}
void delay(uint n)
{
uint i,j;
for(i=0;i<n;i++)
for(j=0;j<125;j++);
}
void timer0_isr() interrupt 1
{
count++; // 计数器加1
}
```
在这个程序中,我们首先定义了一个计数器变量count,用来保存接收到的脉冲个数。然后在init()函数中,我们初始化了定时器0和定时器1,并且将P3.4口设置为高电平输入。在display()函数中,我们定义了一个数码管显示表,并且将计数器的值转换为数码管可以显示的格式,并输出到数码管上。在主函数中,我们不断检测AN锁按钮的状态,如果检测到按钮被按下,就锁定计数器的值并且在数码管上显示出来。
需要注意的是,具体的程序实现会涉及到具体的单片机型号、编程语言和开发环境等因素,因此需要根据实际情况进行调整和修改。希望这个代码对你有所帮助。
阅读全文