问一个51单片机LED流水灯的延时问题

kgct059 2015-01-26 09:18:55
-------------------------------------------------------------------------------
* 实 验 名 : 跑马灯实验
* 实验说明 : LED灯做跑马灯左右移动
* 连接方式 : 见接线图
* 注 意 :
*******************************************************************************/

//--包含你要使用的头文件
#include <reg52.h>

//--声明全局函数--//
void Delay10ms(unsigned int c); //延时10ms

//--声明一个全局变量--//
unsigned char LED;

/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/

void main()
{
unsigned char i;

//--首先赋值LED--//
LED = 0xFE;

while (1)
{
//--LED往左闪烁--//
for (i = 0 ;i < 7 ; i++)
{
//--将LED 的值赋给P2口--//
P0 = LED;

Delay10ms(50); //延时一下,为了让灯有持续点亮的时间

LED = LED << 1; // 将LED里面的值左移一位,然后重新赋给LED

LED = LED | 0x01; // 移位后,前面的位为高电平
}

//--LED向右显示--//
for (i = 0 ;i < 7 ; i++)
{
P0 = LED;

Delay10ms(50);

LED = LED >> 1; // 右移

LED = LED | 0x80; // 移位后,后面的位为高电平
}

}

}

/*******************************************************************************
* 函 数 名 : Delay10ms
* 函数功能 : 延时函数,延时10ms
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/

void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b;

//--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}

}
}

想问下延时函数为什么是循环嵌套,a=130,b=38是什么意思是,
...全文
914 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kgct059 2015-01-28
  • 打赏
  • 举报
回复
比如说单片机晶振是12Mhz,那130,38怎么计算
wwwqqq12345688888 2015-01-27
  • 打赏
  • 举报
回复
这种要算指令周期的延时不可靠 来个中断你的延迟就错了 还是老老实实用定时器做吧 不需要算指令周期 不需要掐指头算多少指令
野男孩 2015-01-26
  • 打赏
  • 举报
回复
想问下延时函数为什么是循环嵌套,a=130,b=38是什么意思是, 这是计算来的,跟晶振的频率有关,不同的晶振频率不同,延时的代码也不一样。主要是调整循环次数来生成不同的指令条数达到延时目的
Evankaka 2015-01-26
  • 打赏
  • 举报
回复
想问下延时函数为什么是循环嵌套,a=130,b=38是什么意思是, 因为要延时,然后就弄个双层循环,但是什么都不干,,a=130,b=38这是通过计算出来的,一般和你单片机的晶振有关。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧