基于PIC16F877的四位数码管动态显示PROTEUS仿真

发布者:明石轩最新更新时间:2016-11-03 来源: eefocus关键字:PIC16F877  数码管  动态显示P  ROTEUS仿真 手机看文章 扫描二维码
随时随地手机看文章
源程序代码说明

;*********************************************
;** 文件名:four_led.asm                    **
;** 功  能:四位数码管动态显示1234          **
;*********************************************

     LIST P=16F877,R=DEC      ; 设定汇编参数为PIC16F877,默认数制为十进制
     #INCLUDE    ; 将含文档P16F877.INC包含进程序中来
     CBLOCK 0x20              ; 设定自定义寄存器从0x20单元开始存放
     ENDC                     ; 声明结束
;
;-------- 定义寄存器 ------------
     CBLOCK       ; 声明以下为自定义寄存器
     DLY          ; 延时变量 
     DISPNUM0     ; 数码管个位寄存器
     DISPNUM1     ; 数码管十位寄存器
     DISPNUM2     ; 数码管百位寄存器
     DISPNUM3     ; 数码管千位寄存器
     ENDC       ; 声明自定义寄存器结束
;--------- 初始化程序 -----------
;
     ORG  0                ; 程序从0000H单元开始执行
     NOP                   ; ICD必需的空操作指令
     BANKSEL TRISB         ; 选择BANK1
     MOVLW    0            ; 将0送入W
     MOVWF    TRISB        ; 再送入端口方向控制寄存器TRISB,设定端口B全部为输出
     MOVWF    TRISD
     BANKSEL  PORTB        ; 回到BANK0
     MOVLW    0FFH         ; 将十六进制数0xFF送W
     MOVWF    PORTB        ; 再转到端口B数据寄存器PORTB关闭所有数码管
     MOVLW    0            ; 预设数码管显示初值
     MOVWF    DISPNUM3
     MOVLW    1
     MOVWF    DISPNUM2
     MOVLW    2
     MOVWF    DISPNUM1
     MOVLW    3
     MOVWF    DISPNUM0 
;------------- 主程序 -----------
MAIN:
     MOVLW    0x32
     MOVWF    DLY
M0:
     CALL     LEDDISP4      ; 呼叫数码管显示子程序显示
     DECFSZ DLY,1           ; 重复调用数码管显示子程序为延时程序
     GOTO    M0
     MOVF    DISPNUM2,0     ; 取出数码管百位的值到W
     MOVWF   DISPNUM3       ; 再由W送到数码管千位
     MOVF    DISPNUM1,0     ; 取出数码管十位的值到W
     MOVWF   DISPNUM2       ; 再转到数码管百位
     MOVF    DISPNUM0,0     ; 取出数码管个位值到W
     MOVWF   DISPNUM1       ; 再转入数码管十位
     INCF    DISPNUM0,1     ; 将数码管个位的值1,结果存回DISPNUM0
     BTFSC   DISPNUM0,4     ; 判断数码管个位寄存器的值是否大于0x0F
     CLRF    DISPNUM0       ; 是,将DISPNUM清0 
     GOTO    MAIN           ; 循环执行
;----------- 主程序结束 ---------
;----- 四位数码管显示子程序 -----
LEDDISP4:
     MOVF    DISPNUM0,0    ; 取数码管个位寄存器的值到W
     CALL    CONVERT       ; 查表取回数码管显示码
     MOVWF   PORTD         ; 送端口数据寄存器PORTD显示
     MOVLW   0xFE          ; 个位数码管显示控制吗0xFE送W
     MOVWF   PORTB         ; 送端口B点亮个位数码管
     CALL    DELAY2_5MS    ; 延进2.5MS
     MOVLW   0xFF
     MOVWF   PORTB
;
     MOVF    DISPNUM1,0   ; 取数码管个位寄存器的值到W
     CALL    CONVERT      ; 查表取回数码管显示码
     MOVWF   PORTD        ; 送端口数据寄存器PORTD显示
     MOVLW   0xFD         ; 个位数码管显示控制吗0xFE送W
     MOVWF   PORTB        ; 送端口B点亮个位数码管
     CALL    DELAY2_5MS   ; 延进2.5MS
     MOVLW   0xFF
     MOVWF   PORTB
;
     MOVF    DISPNUM2,0   ; 取数码管个位寄存器的值到W
     CALL    CONVERT      ; 查表取回数码管显示码
     MOVWF   PORTD        ; 送端口数据寄存器PORTD显示
     MOVLW   0xFB         ; 个位数码管显示控制吗0xFE送W
     MOVWF   PORTB        ; 送端口B点亮个位数码管
     CALL    DELAY2_5MS   ; 延进2.5MS
     MOVLW   0xFF
     MOVWF   PORTB
;
     MOVF    DISPNUM3,0   ; 取数码管个位寄存器的值到W
     CALL    CONVERT      ; 查表取回数码管显示码
     MOVWF   PORTD        ; 送端口数据寄存器PORTD显示
     MOVLW   0xF7         ; 个位数码管显示控制吗0xFE送W
     MOVWF   PORTB        ; 送端口B点亮个位数码管
     CALL    DELAY2_5MS   ; 延进2.5MS
     MOVLW   0xFF
     MOVWF   PORTB
;
       RETURN              ; 返回子程序呼叫处
;--- 四位数码管显示子程序结束 ---
;---------- 查表子程序 ----------
CONVERT:
        ADDWF PCL       ; 把W的值加到PC的低8位
TABLE:
        RETLW H'C0'     ; 0
        RETLW H'F9'     ; 1
        RETLW H'A4'     ; 2
        RETLW H'B0'     ; 3
        RETLW H'99'     ; 4
        RETLW H'92'     ; 5
        RETLW H'82'     ; 6
        RETLW H'F8'     ; 7
        RETLW H'80'     ; 8
        RETLW H'90'     ; 9
        RETLW H'88'     ; A
        RETLW H'83'     ; b
        RETLW H'C6'     ; C
        RETLW H'A1'     ; d
        RETLW H'86'     ; E
        RETLW H'8E'     ; F
;-----------查表子程序结束----------;
;===================================
 #INCLUDE   ; 将2.5MS延时子程序包含进程序中      ;
; 晶振16MHz时延时2.5毫秒   ;
;===================================


 END

关键字:PIC16F877  数码管  动态显示P  ROTEUS仿真 引用地址:基于PIC16F877的四位数码管动态显示PROTEUS仿真

上一篇:PIC16与PIC18的I/O--lat寄存器的解释
下一篇:12864 LCD图形显示程序例子

推荐阅读最新更新时间:2024-03-16 15:19

串行口通信上位机发送0~65536间的数据,数码管上显示
一. 硬件设计 二. 软件设计 1. 程序功能 以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来,波特率自定. 2. 程序源码 #include reg52.h #define uchar unsigned char #define uint unsigned int #define BUF_LEN 2 sbit dula = P2 ^ 6; sbit wela = P2 ^ 7; uint inbuf , dData; uchar flag, count; uchar wan, qian, bai, shi, ge; //数码管编码表 uc
[单片机]
串行口通信上位机发送0~65536间的数据,<font color='red'>数码管</font>上显示
51单片机——数码管、按键、矩阵按键C语言入门编程
数码管: 数码管按段数可分为七段数码管和八段数码管,八段数码管多一个DP(小数点)二极管。也可分为共阳极数码管(低电平点亮)和共阴极数码管(高电平点亮)。本开发板上使用的是2个四位一体共阴极数码管。数码管静态显示是控制数码管的每一个引脚,输入一次电平之后可以一直显示直到再一次改变电平,静态显示会增加IO口的使用,结构复杂成本高,但是会减少占用CPU的时间。数码管动态显示通过位选—段选—清零(消影)来通过发光管余辉和人的视觉暂留是我们感觉出每一位同时显示。 通过74HC138译码器(C为高位B为次高位A为低位)输入高电平输出低电平进行位选,然后通过74HC245驱动数码管段选(a为低位,DP为高位)。 //共阴极数码管段
[单片机]
51单片机——<font color='red'>数码管</font>、按键、矩阵按键C语言入门编程
51单片机静态数码管显示
1、设计要求 用一个共阳极数码管循环显示数值“0~F”,显示变换时间为1s,由P1口输出要显示的数值 2、硬件设计 使用proteus Isis仿真,选择元器件,AT89C51、7SEG-COM-AN-GRN、RESPACK8 3、软件设计 源程序: #include reg51.h #include intrins.h typedef unsigned char u8; typedef unsigned int u16; u8 smgduan = {0x3f ,0x06 ,0x5b ,0x4f ,0x66 ,0x6d ,0x7d ,0x07 , 0x7f ,0x6f ,0x77
[单片机]
51单片机静态<font color='red'>数码管</font>显示
飞思卡尔16位单片机(十一)—— 数码管动态扫描测试
一、数码管扫描介绍 这个实验是我们对GPIO输出功能的一个扩展,用GPIO驱动数码管进行动态扫描,达到显示数字的目的。本实验的硬件电路采用一个4位8段共阴数码管。 所谓“4位”指的是数码管上有4个子单元。每个子单元如下图所示。 所谓“8段”指的是每个子单元由8个发光二极管组成,如上图所示,八段分别为:A、B、C、D、E、F、G、DP。 数码管按照连接方式可以分为共阴数码管和共阳数码管。二者的区别在于每一位的8个发光二极管是阴极连接在一起还是阳极连接在一起。共阴数码管的阴极连接在一起,共阳数码管的阳极连接在一起。 共阴数码管的内部原理图如下图所示。 数码管的管脚图如下图所示。 由以上两个图可以看出,虽然4位8段
[单片机]
飞思卡尔16位单片机(十一)—— <font color='red'>数码管</font>动态扫描测试
AVR单片机8位数码管显示的程序实现(两种方法介绍)
本文为大家介绍两个AVR单片机8位数码管显示的程序实现。 AVR单片机595驱动8位数码管的显示的电路实现 主程序代码 #include #include //GCC中的延时函数头文件 #include “hc595.h” //unsigned char Led_Disbuf[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //共阴极 unsigned char Led_Disbuf[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //共阳极 unsigned char ComBuf[8] = {0
[单片机]
AVR单片机8位<font color='red'>数码管</font>显示的程序实现(两种方法介绍)
7.静态数码管
工作原理: LED显示器两种显示结构:段显示(7段,米字型)和点阵显示(58、88) 共阴接法:8个LED阴极相连(不一定要接到GND)开发板使用的是共阴数码管 共阳接法:8个LED阳极相连接(不一定要接+5V) LED显示器提供的编码为一个字节(8位,七段数码管加小数点)dp为最高位,a为最低位 共阴数码管码表: 0:0x3f 00111111 1:0x06 00000110 2:0x5b 01011011 3:0x4f 01001111 4:0x66 01100110 5:0x6d 01101101 6:0x7d 01111101 7:0x07 00000111 8:0x7f 01111111 9:0x6f 011
[单片机]
7.静态<font color='red'>数码管</font>
数码管
数码管,也称作 辉光管 ,是一种可以显示数字和其他信息的电子设备。玻璃管中包括一个金属丝网制成的阳极和多个阴极。大部分数码管阴极的形状为数字。管中充以低压气体,通常大部分为氖加上一些汞和/或氩。给某一个阴极充电,数码管就会发出颜色光,视乎管内的气体而定,一般都是橙色或绿色。 简介 尽管在外观上和 真空管 相似,其原理并非为加热阴极放射电子。因而它被称为冷阴极管或霓虹灯的一个变种。在室温下,即使处于极端的室内工作条件下,这种管子的温度很少超过40℃。 数码管的最常见形式有10个阴极,形状为数字0到9,某些数码管还有一个或两个小数点。然而也有其他类型的数码管显示字母、标记和符号。如一种“数码管”,其阴极为一个模板制成
[模拟电子]
CH454 数码管显示驱动和键盘扫描控制芯片
1、概述   CH454 是 数码管显示 驱动和 键盘扫描 控制芯片。CH454内置时钟振荡电路,可以动态驱动8 只16段的数码管或者128 只LED,支持11 段、14 段、16 段×8 以及17 段×7 等;同时还可以进行64 键的键盘扫描;CH454 通过2 线串行接口与单片机等交换数据。      2、特点   2.1. 显示驱动   ● 内置电流驱动级,段电流不小于20mA,字电流不小于150mA。   ● 动态显示扫描控制,直接驱动8 位16 段的数码管或者128 只发光管LED。   ● 各数码管的数字独立闪烁控制,可选快慢两种闪烁速度。   ● 通过占空比设定提供16 级亮度控制。   ● 部分段
[模拟电子]
CH454 <font color='red'>数码管</font>显示驱动和键盘扫描控制芯片
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved