
// 定义 LED 的数码管编号
int led = 1;
// 定义 LED 闪烁的间隔时间,单位为毫秒
int interval = 200;
void setup() {
// 初始化数字输出为输出模式
pinMode(led, OUTPUT);
}
void loop() {
// 让 LED 亮起来
digitalWrite(led, HIGH);
// 延迟一段时间
delay(interval);
// 让 LED 熄灭
digitalWrite(led, LOW);
// 延迟一段时间
delay(interval);
}
开关控制指示灯显示
MY8255_A EQU 0A860H;8255A口地址
MY8255_B EQU 0A861H;8255B口地址
MY8255_C EQU 0A862H;8255C口地址
MY8255_MODE EQU 0A863H;8255控制口地址
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,MY8255_MODE
MOV AL,82H
OUT DX,AL ;将控制字82H写入8255控制口,A口方式0输出,B口方式0输入, C口未用到。
A1: MOV DX,MY8255_B
IN AL,DX ;读8255 B口内容
MOV DX,MY8255_A
OUT DX,AL ; 将前面读到的B口内容送到A口,即A口内容=B口内容
CALL BREAK ;调用子程序BREAK
JMP A1;跳转到A1
BREAK PROC NEAR ;BREAK子程序
MOV AH,1
INT 16H
JZ RETURN ;读按键字符,ZF=1,则返回;ZF=0,则AL=字符
MOV AX,4C00H
INT 21H ;返回DOS
RETURN:RET
BREAK ENDP
CODE ENDS
END START
;流水灯显示
MY8255_A EQU 0b860H;8255A口地址
MY8255_B EQU 0b861H;8255B口地址
MY8255_C EQU 0b862H;8255C口地址
MY8255_MODE EQU 0b863H;8255控制口地址
DATA SEGMENT
LA DB ;留出1个字节
LB DB ;留出1个字节
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,MY8255_MODE
MOV AL,80H
OUT DX,AL ;控制字80H送入8255控制口,A口、B口都是方式0输出,C口未用到。
MOV DX,MY8255_A
MOV AL,7FH
OUT DX,AL ;将7FH送入A口
MOV LA,AL ;将7FH送入LA存储单元
MOV DX,MY8255_B
MOV AL,0FEH
OUT DX,AL ;将FEH送入B口
MOV LB,AL ;将FEH送入LB存储单元
CALL DALLY
A1: MOV AL,LA
ROR AL,1 ;LA内容循环右移1次
MOV LA,AL
MOV DX,MY8255_A
OUT DX,AL ;将循环右移后的LA内容送A口,其目的是让A口连接的LED灯依次向右循环点亮
MOV AL,LB
ROL AL,1 ;LB内容循环左移1次
MOV LB,AL
MOV DX,MY8255_B
OUT DX,AL ;将循环左移后的LB内容送B口,其目的是让B口连接的LED灯依次向左循环点亮
CALL DALLY ;延时,让一个LED灯发光稳定之后再点亮另一个
CALL BREAK ;调用BREAK子程序,看是否有键按下
JMP A1 ;跳转到A1
DALLY: MOV CX,3FFH ;延时子程序
D1: MOV AX,0FFFFH
D2: DEC AX
JNZ D2
LOOP D1
RET
BREAK PROC NEAR ;是否有键按下
MOV AH,06H
MOV DL,0FFH
INT 21H
JE RETURN ;若无,则转RETURN
MOV AX,4C00H
INT 21H ;返回DOS
RETURN:RET
BREAK ENDP
CODE ENDS
END START
#include<reg51h>
unsigned char code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};// 数码管段选
unsigned char aa,second;
sbit LED=P1^0;// 小灯
void init(); //初始化
void keypress(); //按键识别
void delay(unsigned int z);//延时
void main()
{
init();
LED = 1;
while(1)
{
if(aa==20)
{
aa=0;
second++;
LED=~LED;
if(second==21)
{
second=0;
}
}
keypress();
P0=table[second%10];
P2=table[second/10];
}
}
void init()
{
TMOD=0x01;//定时器T0的方式1
TH0=(65536-50000)/256; //高8位
TL0=(65536-50000)%256; //低8位
EA=1; //中断总允许打开
ET0=1; //定时器T0允许打开
TR0=1; //启动定时器T0
aa=0;
second=0;
}
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
网上的这种程序比较多,也不是很难,自己学学可以编的。
下面是1~8数字循环显示
;仿照例77
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
;CLR P25
;CLR P27
MOV A,#03H ;控制字
MOV DPTR,#6100H;8155的命令状态口地址
MOVX @DPTR,A
DISPLY:MOV R0,#8
MOV R3,#0FEH
MOV A,R3 ;字位
LD:MOV DPTR,#6102H;B口地址
MOVX @DPTR,A ;B口
MOV DPTR,#DTAB
MOV A,R0
MOVC A,@A+DPTR ;查表
MOV DPTR,#6101H
MOVX @DPTR,A ;A口
ACALL DELAY ;延时
MOV A,R3
RL A
MOV R3,A ; 下一位
DJNZ R0,LD ;下一位循环
SJMP DISPLY ;显示了一遍循环
RET
DTAB:DB 6FH,7FH,07H,7DH,6DH
DB 66H,4FH,5BH,06H,3FH ;数字9~0
DELAY: MOV R7,#250
DELAY1: MOV R6,#250
DELAY2:MOV R5,#4
DELAY3: DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET ;延时大约2u4255255=05s
END
以上就是关于我刚学单片机,想让LED上的第一个小灯间隔200MS闪烁,我编的程序是这样的全部的内容,包括:我刚学单片机,想让LED上的第一个小灯间隔200MS闪烁,我编的程序是这样的、汇编语言 编写 程序 LED 灯显示、AT89C51,编写C语言程序,实现LED灯间隔1s亮一次 ,显示器开始计时从00~20等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)