51单片机第2讲:数码管

1 共阳极数码管

复制代码
ORG 00H
MAIN: MOV  DPTR, #TABLE  ; 把后面的表值存在DPTR中
	   MOV    R0, #0  ; 向R0设定初值
LOOP:  MOV    A, R0   ;把初值给累加器A
	   MOVC  A, @A+DPTR; 间接寻址,取表中代码,@A等同于指向DPTR的指针
	   MOV     P0, A  ;把上一句中取到的码从P0送出
	   ACALL   DLY1S ; 调用1秒延时
	   INC  R0 ;R0自加一 
	   CJNE  R0, #16 , LOOP ;R0中的值不是16,循环 
	   JMP  MAIN; 重新开始,间断循环
//这里	MAIN:  到 JMP  MAIN; 形成一个大循环
DLY1S: MOV    R5, #50 ; 延时子函数
  D1:  MOV    R6, #100; 
  D2:  MOV    R7, #100 ; 
DJNZ    R7, $ ;
DJNZ    R6, D2;
DJNZ    R5, D1 ; 
RET 

;这是一个数组
TABLE:  DB 0c0H,0f9H, 0a4H, 0b0H, 99H,92H,82H,0f8H
        DB 80H,90H,88H,83H,0c6H,0a1H,86H,8eH   ;字符码表

END

MOVC 指令

MOVC A, @A+DPTR

复制代码
; 以DPTR为基址,A为偏移量
MOV DPTR, #TABLE  ; 设置表首地址
MOV A, #INDEX     ; 设置偏移量(0,1,2,...)
MOVC A, @A+DPTR  ; 读取表中第INDEX个数据

CJNE 指令

全称:Compare and Jump if Not Equal

功能 :比较两个操作数,不相等则跳转

同时影响:进位标志CY

CJNE A, #data, rel

复制代码
; 累加器A与立即数比较
CJNE A, #30H, NEXT  ; 如果A≠30H,跳转到NEXT
                    ; 如果A=30H,顺序执行
相关推荐
M78佐菲6 小时前
ARM学习笔记(1)
linux·arm开发·笔记·嵌入式硬件·学习
崇山峻岭之间11 小时前
HC32F460PETB的PB2的Vout123
单片机
恶魔泡泡糖11 小时前
stm32F103C8T6标准库串口接收之中断方式2
stm32·单片机·嵌入式硬件
充哥单片机设计12 小时前
【STM32开源项目】智能小区充电桩
stm32·单片机·嵌入式硬件·毕业设计·小区充电桩·智能小区充电桩
嵌入式-老费12 小时前
esp32开发与应用(如何解决SoC冷启动的问题)
单片机·嵌入式硬件
充哥单片机设计14 小时前
【STM32开源项目】智能语音台灯
stm32·单片机·嵌入式硬件·毕业设计·单片机设计·智能语音台灯
EatFan14 小时前
全栈自造 Status Deck(四):硬件终于到了,从点亮屏幕到跑通第一个 Demo
单片机·物联网·esp32
sunoo-22915 小时前
【嵌入式裸机开发Day04】i.MX6ULL 蜂鸣器驱动详解:从引脚地址查找到代码实现全流程
arm开发·单片机·嵌入式硬件·学习·串口·裸机
Brilliantwxx16 小时前
【STM32】 SPI阻塞式通信与HAL源码 (源码分析)
stm32·单片机·嵌入式硬件
Doraemomo16 小时前
IMX6ULL裸机开发——PWM
arm开发·嵌入式硬件·imx6ull