单片机控制LED灯闪烁的程序,编译时遇到了两个错误,如图
程序目标:通过定时器精确控制时间,让LED2每隔1秒亮或灭#include<reg52.h>typedefunsignedintuint16;typedefunsigne...
程序目标:通过定时器精确控制时间,让LED2每隔1秒亮或灭
#include<reg52.h>
typedef unsigned int uint16;
typedef unsigned char uint8;
sbit ADDR0=P1^0;
sbit ADDR1=P1^1;
sbit ADDR2=P1^2;
sbit ADDR3=P1^3;
sbit ENLED=P1^4;
sbit LED2=P0^0;
void delay(uint8); //声明一个延迟x秒的函数
main()
{
ENLED=0;ADDR3=0; //打开74HC138译码器
ADDR2=1;ADDR1=1;ADDR0=0;//输入110信号,给LEDS6输出0
while(1)
{
LED2=~LED2; //LED2原来是暗的变亮,原来是亮的变暗
delay(1);//延迟1秒
}
}
delay(x) //定义一个延迟x秒的函数
{
uint8 i,j;
TMOD=0x01; //设定寄存器模式为16位定时器
TH0=0xDC;TL0=0x00; //设定16位定时器的高八位和低八位初值
for(i=0;i!=x;i++) //大循环:一个循环=1秒,循环x次,总计x秒
for(j=0;j!=100;j++) //中循环:一个循环=0.01秒,循环100次,总计1秒
{
for(;0==TF0;) //小循环:TH0,TL0从初值累加到溢出所需的时间=0.01秒
{
TR0=1; //打开定时器从初值开始累加
}
TF0=0; //TF是溢出标志需要手动清零,TF==0表示没溢出
}
}
编译时出现如下错误
下面我列出该程序需要用到的电路
图一:一排LED灯泡,其中LED2是要点亮的
图二:74HC138译码器,3线8线译码器
图三:单片机电路
图四:TMOD寄存器的作用
图五:TCON寄存器的作用
图六:再给我出错的编程截个图
怎么修改才能让程序正确?非常感谢给我回答的好人,祝大家身体健康 展开
#include<reg52.h>
typedef unsigned int uint16;
typedef unsigned char uint8;
sbit ADDR0=P1^0;
sbit ADDR1=P1^1;
sbit ADDR2=P1^2;
sbit ADDR3=P1^3;
sbit ENLED=P1^4;
sbit LED2=P0^0;
void delay(uint8); //声明一个延迟x秒的函数
main()
{
ENLED=0;ADDR3=0; //打开74HC138译码器
ADDR2=1;ADDR1=1;ADDR0=0;//输入110信号,给LEDS6输出0
while(1)
{
LED2=~LED2; //LED2原来是暗的变亮,原来是亮的变暗
delay(1);//延迟1秒
}
}
delay(x) //定义一个延迟x秒的函数
{
uint8 i,j;
TMOD=0x01; //设定寄存器模式为16位定时器
TH0=0xDC;TL0=0x00; //设定16位定时器的高八位和低八位初值
for(i=0;i!=x;i++) //大循环:一个循环=1秒,循环x次,总计x秒
for(j=0;j!=100;j++) //中循环:一个循环=0.01秒,循环100次,总计1秒
{
for(;0==TF0;) //小循环:TH0,TL0从初值累加到溢出所需的时间=0.01秒
{
TR0=1; //打开定时器从初值开始累加
}
TF0=0; //TF是溢出标志需要手动清零,TF==0表示没溢出
}
}
编译时出现如下错误
下面我列出该程序需要用到的电路
图一:一排LED灯泡,其中LED2是要点亮的
图二:74HC138译码器,3线8线译码器
图三:单片机电路
图四:TMOD寄存器的作用
图五:TCON寄存器的作用
图六:再给我出错的编程截个图
怎么修改才能让程序正确?非常感谢给我回答的好人,祝大家身体健康 展开
展开全部
void delay(uint8 x);
main()
{}
void delay(uint8 x); //声明一个延迟x秒的函数 //定义一个延迟x秒的函数
{
uint8 i,j;
TMOD=0x01; //设定寄存器模式为16位定时器
TH0=0xDC;TL0=0x00; //设定16位定时器的高八位和低八位初值
for(i=0;i!=x;i++) //大循环:一个循环=1秒,循环x次,总计x秒
for(j=0;j!=100;j++) //中循环:一个循环=0.01秒,循环100次,总计1秒
{
for(;0==TF0;) //小循环:TH0,TL0从初值累加到溢出所需的时间=0.01秒
{
TR0=1; //打开定时器从初值开始累加
}
TF0=0; //TF是溢出标志需要手动清零,TF==0表示没溢出
}
}
main()
{}
void delay(uint8 x); //声明一个延迟x秒的函数 //定义一个延迟x秒的函数
{
uint8 i,j;
TMOD=0x01; //设定寄存器模式为16位定时器
TH0=0xDC;TL0=0x00; //设定16位定时器的高八位和低八位初值
for(i=0;i!=x;i++) //大循环:一个循环=1秒,循环x次,总计x秒
for(j=0;j!=100;j++) //中循环:一个循环=0.01秒,循环100次,总计1秒
{
for(;0==TF0;) //小循环:TH0,TL0从初值累加到溢出所需的时间=0.01秒
{
TR0=1; //打开定时器从初值开始累加
}
TF0=0; //TF是溢出标志需要手动清零,TF==0表示没溢出
}
}
追答
警告可以不理他。
宿兴电子
2024-11-28 广告
2024-11-28 广告
联系我们一、有无震荡源 无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。 二、价格不同 有源蜂鸣器往比无源蜂鸣器贵,就是因为里面多个震荡...
点击进入详情页
本回答由宿兴电子提供
展开全部
”delay(x) //定义一个延迟x秒的函数“改为“void delay(uint8 x)//定义一个延迟x秒的函数”
更多追问追答
追答
我修改后没有别的错误了啊,你哪里改错了,这个警告是说不同的类型,你会不会改错地方了啊,要不我把把你那个修改后没出问题的发给你吧。。。那个声明的部分要和定义的部分保持一致,要么都写上void,要么都不要void
#include
typedef unsigned int uint16;
typedef unsigned char uint8;
sbit ADDR0=P1^0;
sbit ADDR1=P1^1;
sbit ADDR2=P1^2;
sbit ADDR3=P1^3;
sbit ENLED=P1^4;
sbit LED2=P0^0;
void delay(uint8); //声明一个延迟x秒的函数
main()
{
ENLED=0;ADDR3=0; //打开74HC138译码器
ADDR2=1;ADDR1=1;ADDR0=0;//输入110信号,给LEDS6输出0
while(1)
{
LED2=~LED2; //LED2原来是暗的变亮,原来是亮的变暗
delay(1);//延迟1秒
}
}
void delay(uint8 x) //定义一个延迟x秒的函数
{
uint8 i,j;
TMOD=0x01; //设定寄存器模式为16位定时器
TH0=0xDC;TL0=0x00; //设定16位定时器的高八位和低八位初值
for(i=0;i!=x;i++) //大循环:一个循环=1秒,循环x次,总计x秒
for(j=0;j!=100;j++) //中循环:一个循环=0.01秒,循环100次,总计1秒
{
for(;0==TF0;) //小循环:TH0,TL0从初值累加到溢出所需的时间=0.01秒
{
TR0=1; //打开定时器从初值开始累加
}
TF0=0; //TF是溢出标志需要手动清零,TF==0表示没溢出
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询