单片机at89c51程序

单片机at89c51程序,第1张

#include<reg51h>

void delay(int a)

{

while(a--);

}

main()

{

int i;

for(i=0;i<3;i++)

    {

    P1=0x16;

    delay(30000);

    P1=0x00;

    delay(30000);

    }

    P1=0x16;

    P2=0x35;

    while(1);

}

;用汇编代码设计程序,完成8个LED灯的循环闪烁:

;LED1亮,其余灭->LED2亮,其余灭……,如此循环5次后,

;进行全灭->全亮闪烁,时间间隔为500ms用p0口控制

下列程序已经测试通过

;----------------------

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP T0_INT

MAIN:

SETB TR0 ;T0定时方式0

MOV SP, #60H

MOV IE, #82H

MOV B, #61 ;定时500ms,500 000 / 8192 = 61

;-----------------------

MOV A, #127

MOV R1, #40

LP0:MOV P0, A

JBC F0, $ + 5

SJMP $ - 3

RR A

DJNZ R1, LP0

;-----------------------

CLR A

LP1:MOV P0, A

JBC F0, $ + 5

SJMP $ - 3

CPL A

LJMP LP1

;-----------------------

T0_INT: ;自动重新装入0

DJNZ B, T0_END

MOV B, #61

SETB F0

T0_END:

RETI

;-----------------------

END

#include<reg51h> 包含单片机专用头文件

#include<intrinsh> 这个是什么俺也不知道,但这个程序不需要这个头文件

void Delay10ms(unsigned int c); 自定义的延时函数声明

main() 主函数

{

unsigned int LED; 建立一个数值型变量,变量名 LED

LED=0xfe; 给这个变量赋值,0xfe 换成二进制数为 1111 1110

while(1) 主循环

{

P2=LED; 点亮发光管,即先点亮右边的第一个

Delay10ms(50); 延时一段时间

LED=LED<<1; 点亮的发光管,向左移动一位

if (P2==0x00) 判断是否8个全部点亮了

{

LED=0xff; 如果全部点亮,则将全部发光管熄灭

}

}

}

void Delay10ms(unsigned int c)延时函数主程序

{

unsigned char a, b;建立两个变量 a b

for(;c>0;c--)循环语句,不断改变变量数值,已达到延时目的

{

for(b=38;b>0;b--)

{

for(a=130;a>0;a--);

}

}

}

给你翻译了,希望能帮到你

用定时器定时10ms,中断程序里将两个IO管脚状态取反即可。但两个管脚的原始状态是相反的。

大致 程序如下:

主程序里

TMOD=0X01;

TH0=

TL0=

EA=1;

ET0=1;

PWM1=0;//一个管脚置低

PWM2=1;//另一个管脚置高

TR0=1;

中断程序中:

TH0=

TL0=

PWM1=!PWM1;

PWM2=!PWM2;

在数码管依次排列好这一句话,首先取模,然后写显示函数,写完函数放置while(1)中无限循环下去

代码如下:

#include; //用的是单独 *** 作,没有用总线

sbit led1 = P1^0;

sbit led2 = P1^1;

sbit led3 = P1^2;

sbit led4 = P1^3;

sbit led5 = P1^4;

sbit led6 = P1^5;

sbit led7 = P1^6; //看清楚自己的管脚,不一定对应,这里采用P0对应段选

code unsigned char led_paly[5] = {0x76,0x79,0x38,0x38,0x5c};// H E L L O

void delay(unsigned int um)//延时函数

{

int i,j;

for(i = 0;i &lt; um;i++)

{

for(j = 0;j &lt; 200;j++);

}

}

void display()

{

P0 = led_paly[0];//显示H

led2 = 0;

delay(50);

led2 = 1;

P0 = led_paly[1];//显示E

led3 = 0;

delay(50);

led3 = 1;

P0 = led_paly[2];//显示L

led4 = 0;

delay(50);

led4 = 1;

P0 = led_paly[3];//显示E

led5 = 0;

delay(50);

led5 = 1;

P0 = led_paly[4];//显示O

led6 = 0;

delay(50);

led6 = 1;

}

void main(void)

{

while(1)

{

display();

}

}

扩展资料:

51单片机的接口作用

P0口:可以被定义为数据/地址的低八位,能够用于外部程序/数据存储器。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:标准输入输出I/O,P1口管脚写入1后,被内部上拉为高,可用作输入。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:既可用于标准输入输出I/O,也可用于外部程序存储器或数据存储器访问时的高八位地址。

P3口:既可以做标准输入输出I/O,也可作为AT89C51的一些特殊功能口。

以上就是关于单片机at89c51程序全部的内容,包括:单片机at89c51程序、关于AT89c51单片机定时器实现延时子程序的问题、AT89c51流水灯程序如何从中间向两边不用定时器的写法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9307297.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存