‘壹’ 单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
单片机流水灯C语言程序的源代码如下:
#include //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8个流水灯反向逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8个流水灯依次全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8个流水灯依次反向全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp>>=1;
}
void delay(uint t) //定义延时函数
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
(1)单片机延时程序500ms扩展阅读
51单片机流水灯的源代码如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
‘贰’ 时钟频率为12MHZ, 如何利用51单片机定时/计数器定时500ms
我说一下原理
12MHZ的51单片机,定时器最大只能定时65.535ms,所以要定时500ms的时间,
需要产生10次50ms的定时。
步骤如下:
1、每隔50ms定时器中断溢出,计数+1。
2、当计数达到10次时,便产生了500ms的定时啦,然后,你自己根据你的设计,需要让单片机做什么就自己写些什么(比如让某个io口取反)
3、计数达到10次后,不要忘了初始化计数。
最后给点建议:1、要让定时器计数50ms,只能在定时器的工作方式1下进行;
2、定时器初值: TH0 = 0x3C; TL0 = 0x0B0;(我使用的是定时器0)
思路和原理都给你了,只要你看懂了,想让计时器计时多少s都如鱼得水。
‘叁’ 单片机c语言的延时程序500ms
一般单片机在c语言中很难得到精确的延时,所以一般对时间要求高的都用计时器中断来做了。如果时间要求不严格可以用for循环来做,你可以实际测试一下,把时间延时到大概一秒左右,然后烧进单片机里运行,比如一个灯亮灯灭的程序,看着灯计数,同时用秒表计时,几个几十次后取平均值就能知道大概时间了。
‘肆’ 单片机实验p1.0灯亮500ms灭500ms使用定时器怎么编程
很简单,大致思路如下:
1、在初始化程序中设置定时器初值为50ms,同时定义一个计数变量,P1.0置1(假定低电平点亮LED)。
2、在定时器中断服务程序中,重装定时器初值,计数变量加1,判断计数变量是否等于10,如果等于10则取反P1.0,同时计数变量清零,否则,中断返回。
‘伍’ 求单片机高手帮我算下这个延时程序的500ms是怎么算出来的
设51系列单片机晶振频率Fosc为12MHz
则第个机器周期 =12/Fosc =1μs
.
每条MOV Rn,#data指令耗用1个机器周期
6条NOP指令执行耗用6个机器周期
每条DJNZ Rn,rel指令耗用2个机器周期,
D2内循环耗用机器周期数N2=1+(6+2)250 =2001
D1外循环耗用机器周期数N1=1+(N2+2)250=500751
运行整段程序耗用机器周期数N=1+N1=500752
.
运行整段程序延时时间 =500752x1μs ≈500ms
‘陆’ 单片机汇编语言流水灯,定时器中断控制,(500ms)延时
单片机汇编语言流水灯,用定时器中断控制,可以初始化设置定时器时间(如50mS注定时器最大定时时间到不了500mS,需要加计数存储,中断10就是500mS),有多种方式实现如作一个流水状态表,定时读取写入IO端口 表加一,,或者用左移太移等方式都可以实现在,网上有很多这种实例。
‘柒’ 单片机延迟500ms试写出延迟程序
根据外部晶振的不同,延时1毫秒的循环次数也不一样,一般12m晶振的话用
for(j=time;j>0;j--);延时时,1毫秒time大概为125左右,这里用110,大概晶振为11.0592m,所以这段程序,内部循环完成1毫秒延时,外部循环完成500毫秒延时。