㈠ 求51单片机的上升沿和下降沿C语言检测程序列子,端口就是普通IO口。
这里只讲原理,不关注速度。实际设计工作中,已经有很多单片机能够识别io端口上升沿和下降沿中断,且方式不止一种。
sbit io_inp=P2^1;输入端
bit old_bit;输入端电平记忆
unsigned char low_high;上升下降沿标志,0=无变化,1=上升沿,2、下降沿
void io_rest(void)
{
if(old_bit=!io_inp)
{
old_bit=io_inp;
if(io_inp=1)
low_high=1;
else
low_high=2;
}
}
void main(void)
{
old_bit=io_inp=P2^1;
while(1)
{
low_high=0;
io_rest(void);
//在此应用
}
}
㈡ 一个51单片机,晶振为12MHz,让前三个LED灯分别以1ms,1s,5s的频率闪烁,怎么用c语言写,谢谢各位了~~
要实现51单片机上的三个LED灯分别以1ms, 1s, 5s的频率闪烁,可以通过定时器来控制。首先,我们设定定时器0为16位定时模式,计时50ms。然后设置一个变量进行定时器中断计数,当计数达到10(即0.5s)时,LED2的状态取反;当计数达到5000(即2.5s)时,LED3的状态取反。这样,LED1将以1ms的频率闪烁,几乎无法被人眼察觉;LED2将以1s的频率闪烁;LED3将以5s的频率闪烁。
具体实现代码如下:
#include
unsigned int count = 0;
sbit led1 = P0^0;
sbit led2 = P0^1;
sbit led3 = P0^2;
void main() {
TMOD = 0x01; // 设置定时器0工作模式1
TH0 = (65536 - 500) / 256; // 计时50ms
TL0 = (65536 - 500) % 256;
EA = 1; // 开全局中断
ET0 = 1; // 开定时器0中断
TR0 = 1; // 启动定时器0
}
void time0() interrupt 1 {
led1 = ~led1;
count++;
if (count % 1000 == 0) {
led2 = ~led2;
}
if (count == 5000) {
led3 = ~led3;
count = 0;
}
}
这段代码中,通过定时器0的中断服务程序(time0)实现对LED1、LED2和LED3的控制。需要注意的是,在实际应用中,可能需要根据具体硬件环境调整定时器的预设值,以确保定时精度。
为了使LED1的闪烁速度接近1ms,我们通过设定定时器0来计时50ms,再通过中断计数的方式实现1ms的闪烁频率。而LED2和LED3则分别以1s和5s的频率闪烁,通过调整中断计数的倍数来实现。
这种方法适用于需要精确控制LED闪烁频率的应用场景。通过这种方式,我们可以轻松地实现不同频率的LED闪烁,而无需复杂的硬件设计。
以上代码和方法仅为一种实现思路,具体实现时还需要根据实际情况进行适当调整,确保硬件和软件的完美配合。
㈢ 51单片机C语言应用程序设计实例精讲的介绍
《51单片机C语言应用程序设计实例精讲》通过大量的实例,介绍了51单片机各种C语言应用专题程序设计的流程、方法、技巧及设计思想。全书共分31章,第1章~第3章为基础知识,介绍了51单片机开发的硬件结构、指令系统、C语言设计以及Keil8051C编译器知识;第4章~第31章为本书的重点,通过28个典型的C语言应用实例,介绍了51单片机的各种应用开发和使用技术,包括输入,输出、数据采集,控制系统、存储系统与外设扩展、信号与算法实现、网络通信与传输、电源监控与抗干扰设计。