A. 51单片机电子时钟设计怎么更改led灯闪烁频率用汇编语言
你这个程序错误太多了,用汇编时关键的几个程序段都未分清:主程序、定时器T0中断、定时器T1中断等,因MOV IE,#8AH语句说明用的是中断方式,显然漏了 ORG 0000H、ORG 000BH和ORG 001BH伪指令。要改时间可改CJNE R7,#160,JW中的160。
B. 用C语言编写一个单片机控制LED灯闪烁变化的编程 急用!!!!!!!!!
C语言实现LED灯闪烁控制配套51单片机开发板。
#include //包含单片机寄存器的头文件
/****************************************
函数功能:延时一段时间
*****************************************/
void delay(void) //两个void意思分别为无需返回值,没有参数传递。
{
unsigned int i; //定义无符号整数,最大取值范围65535。
for(i=0;i<20000;i++) //做20000次空循环。
; //什么也不做,等待一个机器周期。
}
/*******************************************************
函数功能:主函数 (C语言规定必须有也只能有1个主函数)。
********************************************************/
void main(void)
{
while(1) //无限循环。
{
P0=0xfe; //P1=1111 1110B, P0.0输出低电平。
delay(); //延时一段时间。
P0=0xff; //P1=1111 1111B, P0.0输出高电平。
delay(); //延时一段时间。
}
}
单片机驱动LED灯的源程序:
#include<reg52.h> //头文件。
#define uint unsigned int
#define uchar unsigned char
sbit LED1=P1^7; //位定义。
void delay_ms(uint);//mS级带参数延时函数。
void main()
{
while(1)
{
LED1=0;
delay_ms(1000);
LED1=1;
delay_ms(1000);
}
}
void delay_ms(uint z) //延时子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
(2)51单片机控制led闪烁汇编语言扩展阅读:
单片机应用分类:
通用型:
这是按单片机(Microcontrollers)适用范围来区分的。例如,80C51式通用型单片机,它不是为某种专门用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。
总线型:
这是按单片机(Microcontrollers)是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、 数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接。
另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。
控制型:
这是按照单片机(Microcontrollers)大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型。
通常是小封装、低价格,外围器件和外设接口集成度高。 显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。
参考资料来源:网络-单片机
C. 51单片机控制LED汇编显示程序
程序思想如下 可以想象成一个整数000每次加1后显示一次知道999后溢出跳回起点继续,程序如下
ORG 0000H
AJMP START
START: MOV 30H,#00H ;数码管显示初值
MOV 31H,#00H
MOV 40H,#00H ;显示增量
MOV 41H,#01H
STL1: ACALL LED ;LED显示
ACALL DELAY0.5S
ACALL BCDADD
MOV A,30H
ANL A,#0F0H
JNZ START ;判断是不是超过999
AJMP STL1
BCDADD: CLR C
MOV A,31H
ADDC A,41H
DA A
MOV 31H,A
MOV A,30H
ADDC A,40H
DA A
MOV 30H,A
RET
LED: MOV A,30H
ANL A,#0FH
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
MOV A,31H
ANL A,#0F0H
SWAP A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
MOV A,31H
ANL A,#0FH
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P2,A
RET
DELAY0.5S: MOV R6,#200
SL1: MOV R5,#250
SL2: NOP
DJNZ R5,SL2
DJNZ R6,SL1
RET
TAB: DB 0C0H ;0
DB 0F9H ;1
DB 0A4H ;2
DB 0B0H ;3
DB 099H ;4
DB 092H ;5
DB 082H ;6
DB 0F8H ;7
DB 080H ;8
DB 090H ;9
DB 088H ;A
DB 083H ;B
DB 0C6H ;C
DB 0A1H ;D
DB 086H ;E
DB 08EH ;F
END
PS1:延迟0.5秒的晶振是3.57MHZ
PS2:希望我的LED显示代码没写错,我是认为你是0-7接的A-DP
PS3:网络的显示格式真恶心 将就着看吧 程序倒是应该没有什么错误
P4:程序已经修改 重新拷贝一下吧
D. 51单片机LED操作汇编语言程序解释
ORG 0000H //程序的入口
LJMP MAIN //跳到MAIN标号处
ORG 0100H //MAIN入口
MAIN: MOV TMOD, #10H //定义定时器/计数器的工作模式,此为T1方式0,为13位定时器/计数
MOV TL1, #00H //向定时器低位置初值
MOV TH1, #4BH //向定时器高位置初值
MOV R1, #20 //赋值
MOV R0, #00H //赋值
MOV A, #00H //赋值
MOV P3, A //p3口清零(T1口对应p3.5)
MOV DPTR, #TAB //取表中的值
SETB TR1 //开户定时器T1
LOOP: JBC TF1, PTF1 //TF1为1时(TF1为T1的溢出标志位),清零,并跳到标号PTF1;
AJMP LOOP //等待中断
PTF1: MOV TL1, #00H //向定时器低位置初值
MOV TH1, #4BH //向定时器高位置初值;因为方式0不能自动重装初值,所以要软件重装初值
DJNZ R1, LOOP //循环
MOV R1, #20 //赋值
MOV A, R0
ADD A,#01H //加1
DA A //累加器十进制调整
ANL A, #0FH //与操作
MOV R0, A //保存A到R0中
MOVC A, @A+DPTR //取表中的值到A
MOV P1, A //将A送到P1口输出
CPL P3.1 //取反
CPL P3.2 //取反
AJMP LOOP //循环
TAB: //表中的内容
DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
END
E. 用汇编语言编写51单片机程序让LED灯亮0.5秒,灭2秒无限循环
ORG 0000H
MOV SP,#60H
E: CLR P1.0 ; P1.0 LED亮
ACALL DEL_1S ; 0.5 秒
SETB P1.0 ; P1.0 LED灭
ACALL DEL_2S ;2秒
SJMP E ; 循环
DEL_1S: MOV R2,#10 ; 0.5秒
JMP DEL_2S+2
DEL_2S: MOV R2,#40 ; 2秒
SETB TR1
LOOP: JNB TF1,$
MOV TL1,#0B0H
MOV TH1,#3CH
CLR TF1
DJNZ R2,LOOP
CLR TR1
RET
END
F. 求51单片机定时LED闪烁程序代码
#include<reg52.h>//包括一个52标准内核的头文件
#defineucharunsignedchar
/******************************主函数*****************************/
voidtimer0();
voidmain()//主程序
{
TMOD=0x01;//定时器0工作方式1
EA=1;
ET0=1;//定时器0中断
TR0=1;//启动定时器0
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
while(1);//程序循环
}
/*****************************定时器0中断*************************/
voidtimer0()interrupt1
{
uchart;//定义变量
TF0=0;//定时器清0
t++;//中断一次累加1
if(t==20)//预置值,溢出20次就是1秒钟,晶振12MHZ
{
t=0;
P3=~P3;//反转LED灯的亮灭
}
}
/*****************************************************************/
G. 51单片机用汇编语言实现八个LED的全亮全灭
;以89c51单片机为例,假定用P1控制LED:IO_LED EQU P1;led_0 BIT P1.0;led_1 BIT P1.1;led_2 BIT P1.2;led_3 BIT P1.3;led_4 BIT P1.4;led_5 BIT P1.5;led_6 BIT P1.6;led_7 BIT P1.7; ;定义开关LED的数据,假定LED正极一端接电源,另一端通过限流电阻接I/O端口: DATA_CloseLED EQU 11111111B;DATA_OpenLED EQU 00000000B;ORG 0000HAJMP MAINORG 0030H;-----------------------;延时0.5秒程序(注:此延时函数摘自STC-ISP)DELAY500MS:;@12.000MHzPUSH 30HPUSH 31HPUSH 32HMOV 30H,#4MOV 31H,#205MOV 32H,#180NEXT:DJNZ 32H,NEXTDJNZ 31H,NEXTDJNZ 30H,NEXTPOP 32HPOP 31HPOP 30HRET;-----------------------;下面是主程序MAIN:MOV IO_LED,#DATA_CloseLED;同时关闭8个LEDLCALLDELAY500MS;延时0.5秒MOV IO_LED,#DATA_OpenLED;同时打开8个LEDLCALLDELAY500MS;延时0.5秒LJMP MAIN;循环END;上面程序演示了8个LED间隔0.5秒同时亮和灭的变化。51单片机用汇编语言实现八个LED的全亮全灭
H. 51单片机 通过串口发送控制LED灯 闪烁频率 c代码 跪求!!
下面的程序我已经调试过了,你可以直接使用,但是一秒闪烁次数t的最大为2000,如果要大于这个数,你必须改小dalay1ms ()内的j值,就可以改大t
#include <reg52.h>
sbit LED0=P1^0;
unsigned int t=0,k;
void dalay1ms (unsigned int i) //晶振选用11.0592
{
unsigned int j;
for(i;i>0;i--)
for(j=922;j>0;j--);
}
void main ()
{
EA=1;
ES=1;
TMOD=0x20; //定时器T1方式为2
TH1=0xfa; //波特率设定为9600
TL1=0xfa;
while(1)
{
if(t!=0)
{
k=2000/t;
dalay1ms (k) ;
LED0=!LED0;
}
if(t==0)
LED0=0;
}
}
void counter4(void) interrupt 4
{
while(RI==0);
RI = 0;
t= SBUF;
}
I. 51系列单片机控制LED的发光(汇编语言编写)
硬件做好了吗
可以看看原理图
我做单片机的