|
[color=#ff0000,strength=3)"]单片机编程是硬件编程:
1. 编写底层驱动
2. 根据电路原理图来实现
&附电路原理图:



[color=#ff0000,strength=3)"]

&硬件实物图:

[color=#ff0000,strength=3)"]实现的功能演示:
1. 8个LED小灯的正向与反向流水演示
C代码源程序:
# include <reg51.h>
typedef unsigned char uint8; //宏定义
typedef unsigned int uint16;
sbit ENLED = P1^4; //位声明
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
main()
{
uint8 j = 0;
uint16 i;
ENLED = 0;
ADDR0 = 0; ADDR1 = 1; ADDR2 = 1; ADDR3 = 1;
while (1)
{
P0 = ~(1 << j++);//00000001 按位取反后为11111110
//非精确延时
for(i = 0; i < 20000; i++); //分号不能少
while (8 == j)
{
j = 0;
}
}
}
汇编代码源程序:
ORG 00H
MOV DPTR,#TABLE
MAIN:
MOV P1,#11101110B ;38译码器对三极管的开关控制,使LED灯能正常工作
MOV R2,#0
START:
MOV A,R2
MOVC A,@A+DPTR ;MOVC A,@A+DPTR 写成 MOVC A,@DPTR+A 是错误的
MOV P0,A
LCALL DELAY100MS
INC R2
CJNE R2,#13,START
SJMP MAIN
TABLE:DB 0FEH, 0FDH, 0FBH, 0F7H, 0EFH, 0DFH, 0BFH, 7FH, 0BFH, 0DFH, 0EFH, 0F7H, 0FBH, 0FDH
DELAY100MS: ;@11.0592MHz
PUSH 30H
PUSH 31H
MOV 30H,#180
MOV 31H,#68
NEXT:
DJNZ 31H,NEXT
DJNZ 30H,NEXT
POP 31H
POP 30H
RET
END
|
|