单片机控制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寄存器的作用

图六:再给我出错的编程截个图

怎么修改才能让程序正确?非常感谢给我回答的好人,祝大家身体健康
展开
 我来答
lyx915367058
2013-07-04 · TA获得超过754个赞
知道小有建树答主
回答量:855
采纳率:28%
帮助的人:159万
展开全部
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表示没溢出
}
}
追问

晕,为什么声明里面写了void delay(uint8);定义里面还要再写一遍

修改完了还有一个警告怎么处理啊?

还有,大哥,你第二个void delay(uint8)是定义函数,多了一个分号

追答
警告可以不理他。
宿兴电子
2024-11-28 广告
联系我们一、有无震荡源 无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。 二、价格不同 有源蜂鸣器往比无源蜂鸣器贵,就是因为里面多个震荡... 点击进入详情页
本回答由宿兴电子提供
home翼1
2013-07-04
知道答主
回答量:26
采纳率:0%
帮助的人:20.2万
展开全部
”delay(x) //定义一个延迟x秒的函数“改为“void delay(uint8 x)//定义一个延迟x秒的函数”
更多追问追答
追问

晕,为什么声明里面写了void delay(uint8);定义里面还要再写一遍

修改完了还有一个警告怎么处理啊?

追答
我修改后没有别的错误了啊,你哪里改错了,这个警告是说不同的类型,你会不会改错地方了啊,要不我把把你那个修改后没出问题的发给你吧。。。那个声明的部分要和定义的部分保持一致,要么都写上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表示没溢出
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
物电的小狗狗
2013-07-04 · TA获得超过171个赞
知道小有建树答主
回答量:256
采纳率:0%
帮助的人:104万
展开全部
delay函数没有返回值,所以前面要加void
追问

晕,为什么声明里面写了void delay(uint8);定义里面还要再写一遍

修改完了还有一个警告怎么处理啊?

追答
还有一个问题就是void delay(uint8)有问题,你仅仅只说明了入口参数的类型是uint8,但是没有把入口参数写出来啊。你要么不搞入口参数,要么就搞完整。感觉楼主C语言的功底着实差了点啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式