求大侠。。。帮忙解答哈单片机编程的题!!!求详细答案
编程实现以下逻辑功能。1:Q=(C+B)+D2:2s延时程序上面两大题,就详细的解题过程,谢谢,。。。对大题都不会做,最好有点讲解嘛,谢谢。。。求大侠~!~~~~要汇编语...
编程实现以下逻辑功能。
1: Q=(C+B)+D
2: 2s 延时程序
上面两大题,就详细的解题过程,谢谢,。。。对大题都不会做,最好有点讲解嘛,谢谢。。。
求大侠~!~~~~要汇编语言 展开
1: Q=(C+B)+D
2: 2s 延时程序
上面两大题,就详细的解题过程,谢谢,。。。对大题都不会做,最好有点讲解嘛,谢谢。。。
求大侠~!~~~~要汇编语言 展开
展开全部
1、如果B、C、D、Q是51单片机四个管脚的话就很简单啦,可以给B、C、D三个管脚输入不同的电平,再测量Q管脚的电平变化,可以这样:
#include<reg51.h>
sbit Q = P1^0;
sbit B = P1^1;
sbit C = P1^2;
sbit D = P1^3;
void delayms(unsigned int z)
{
unsigned int x,y;
for(x = z;x > 0;x--)
for(y = 0;y < 110;y++);
}
void main()
{
while(1)
{
Q = B|C|D;//改成Q = B + C + D;也行
delayms(10);
}
}
2、可以使用单片机的定时器中断,直接数数就行了
主要程序:
unsigned int count;//用于计数
void main()
{
TMOD = 0x01;//定义定时器0为工作方式1
TH0 = (65536 - 5000) / 256; //5ms延时
TL0 = (65536 - 5000) % 256;
ET0 = 1;//开定时器0中断
TR0 = 1;//打开定时器
EA = 1;//开全局中断
while(1)
{
if(count == 200)
{
count = 0;//计数清零,重新开始
P0 = ~P0;//P0口发光二极管闪烁
}
}
}
void Timer0(void) interrupt 1
{
TH0 = (65536 - 5000) / 256; //重新置初值
TL0 = (65536 - 5000) % 256;
count++;//每5ms加1
}
#include<reg51.h>
sbit Q = P1^0;
sbit B = P1^1;
sbit C = P1^2;
sbit D = P1^3;
void delayms(unsigned int z)
{
unsigned int x,y;
for(x = z;x > 0;x--)
for(y = 0;y < 110;y++);
}
void main()
{
while(1)
{
Q = B|C|D;//改成Q = B + C + D;也行
delayms(10);
}
}
2、可以使用单片机的定时器中断,直接数数就行了
主要程序:
unsigned int count;//用于计数
void main()
{
TMOD = 0x01;//定义定时器0为工作方式1
TH0 = (65536 - 5000) / 256; //5ms延时
TL0 = (65536 - 5000) % 256;
ET0 = 1;//开定时器0中断
TR0 = 1;//打开定时器
EA = 1;//开全局中断
while(1)
{
if(count == 200)
{
count = 0;//计数清零,重新开始
P0 = ~P0;//P0口发光二极管闪烁
}
}
}
void Timer0(void) interrupt 1
{
TH0 = (65536 - 5000) / 256; //重新置初值
TL0 = (65536 - 5000) % 256;
count++;//每5ms加1
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询