
判断开关对应的端口电平,改变led对应端口即可。
交替闪烁就是在循环中让两个LED端口交替高低电平。
循环中加入延时。延时函数我用循环实现。题目没有要求精准延时,如精准需用中断。
#include <reg52h>
#define uInt unsigned int
sbit D1=P2^0;
sbit D2=P2^1;
sbit S1=P3^2;
void mDelayuS( uInt us );
void main()
{
if(S1)
D1=D2=0;
while(S1==0) D1=!D2,mDelayuS(1000),D2=D1;
}
void mDelayuS( uInt us )
{
while ( us -- ); / 24MHz MCS51 /
}
#include<reg52h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit KEY=P3^3; //定义按键输入端口
sbit LED=P1^2; //定义led输出端口
/------------------------------------------------
主函数
------------------------------------------------/
void main (void)
{
KEY=1; //按键输入端口电平置高
while (1) //主循环
{
if(!KEY) //如果检测到低电平,说明按键按下
LED=0;
else
LED=1; //这里使用if判断,如果按键按下led点亮,否则熄灭
//上述4句可以用一句替代 LED=KEY;
//主循环中添加其他需要一直工作的程序
}
}
C语言写LED数码管显示程序与汇编是一致的,将显示的基本内容定义在一个数组中就可以了,比如:
#include<reg51h>
#define uchar unsigned char
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
sbit rstkey=P2^2;
sbit speaker=P2^0;
void delay()//延时约400毫秒
{
uchar i,j;
for(i=0;i<200;i++)
for(j=0;j<250;j++);
}
main()
{
uchar i,key;
P2=0xff;
while(1)
{
i=0;
P1=table[i];
while(1)
{
key=P3;
if(key!=0)break;
}
switch(key)
{
case 0x01:i=1;break;
case 0x02:i=2;break;
case 0x04:i=3;break;
case 0x08:i=4;break;
case 0x10:i=5;break;
case 0x20:i=6;break;
case 0x40:i=7;break;
case 0x80:i=8;break;
default:break;
}
P1=table[i];//显示按下抢答器的号
P0=key;//显示按下键号的LED
while(1)
{
if(rstkey==0)break;//主持人按下复位键则重新开始
speaker=~speaker;//否则蜂鸣器报警
delay();
}
}
}
原理图没有吗?这方面能力的提升最好有自己的单片机开发板,这样学习不会枯燥,效果也好些,我就是学习吴鉴鹰51单片机开发板的,有视频教程,很方便学起来,你也可以自己动手做些小实验,学习板很多,用的话找像吴鉴鹰单片机开发板这样教程详细,板子功能多的
以上就是关于在线等,急,用C语言编程,实现单片机控制两个LED灯:当S1开关闭合时,两个LED灯交替闪烁全部的内容,包括:在线等,急,用C语言编程,实现单片机控制两个LED灯:当S1开关闭合时,两个LED灯交替闪烁、单片机编程:LED发光二极管的初始状态为亮。按一下按键,LED灯灭。再按一下,LED亮,用C语言编程该怎么写、用C语言怎么编写7段LED的显示程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)