16c54四位LED时钟显示程序

发布者:rnm888最新更新时间:2019-10-23 来源: eefocus关键字:16c54  四位LED  时钟显示 手机看文章 扫描二维码
随时随地手机看文章

title"clock"
list p=16c54,n=66
PIC54 equ 1ffh
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;written by:PIC单片机www.pic16.com ;;
;;四位LED时钟显示程序 ;;
;;RB1-SW1秒设置 RB2-SW2分设置 RB3-SW3时设置 ;;
;;RB1--RB7接LED段码,RA0--RA3做选通 ;;
;;使用4M晶振TMR0滪分频为1:16 TMRO的循环时间为4.096MS 244次为一秒 ;;
;;用sec_nth计数 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
pointer equ 00h
rtcc equ 01h
pc equ 02h
status equ 03h
fsr equ 04h
port_a equ 05h
port_b equ 06h
;---------------------------------
carry equ 0
c equ 0
dcarry equ 1
dc equ 1
z_bit equ 2
z equ 2
p_down equ 3
pd equ 3
t_out equ 4
to equ 4
pa0 equ 5
pa1 equ 6
pa2 equ 7
;---------------------------------
zero equ 0x7e
one equ 0x0c
two equ 0xb6
three equ 0x9e
four equ 0xcc
five equ 0xda
six equ 0xfa
seven equ 0x0e
eight equ 0xfe
nine equ 0xce
colon equ 0x01
t equ 0xf0
blank equ 0x00
;-----------------------------------------
maxnths equ 0x0c ; d12
maxsecs equ 0xc4 ; d196
maxmins equ 0xc4 ; d196
maxhrs equ 0xf4 ; d244
minhrs equ 0xf3 ; d243
adjmin equ 0x09 ; d9
adjhr equ 0x22 ; d34
adjday equ 0x03 ; d3
;-----------------------------------------------
disp1 equ b'11111110' ;pa0--pa3
disp2 equ b'11111101'
disp3 equ b'11111011'
disp4 equ b'11110111'
dispoff equ b'11111111'
switch equ b'00001110' ;key in portb
;---------------------------------------------
sec equ 00h ;秒 flags d0--d7
min equ 01h ;分
hrs equ 02h ;时
chg equ 03h ;有显示或按键按下
sw1 equ 04h ;
sw2 equ 05h ;
sw3 equ 06h ;
sw_on equ 07h ;有键按下
;------------------------------------
keys equ 08h ;哪个键按下?
flags equ 09h ;the bits for :sec d0. min d1 .hrs d2.chg ;d3.sw1.sw2.sw3 d6 .swon d7
display equ 0bh ;new display
digit1 equ 0ch ;a0
digit2 equ 0dh ;a1
digit3 equ 0eh ;a2
digit4 equ 0fh ;a3 led
;---------------------------------------
sec_nth equ 10h ;秒计数单元
seconds equ 11h ;秒
minutes equ 12h ;分
hours equ 13h ;时
var equ 14h ;运算变量
count equ 15h
count1 equ 16h

start
movlw 0x03
option
movlw 0
tris port_a
tris port_b
movlw blank
movwf port_b
bcf status,pa1
bcf status,pa0
;----------------------------------------
movlw 0x01
movwf rtcc
movlw 0xfe
movwf display
movlw blank
movwf digit1
movwf digit2
movwf digit3
movwf digit4
movlw maxnths ;d12
movwf sec_nth
movlw maxsecs ;d196
movwf seconds
movlw maxmins
movwf minutes
movlw 0xff
movwf hours
movlw 00h
movwf flags
main

rtcc_fill
movf rtcc,0
btfss status,z
goto rtcc_fill
incfsz sec_nth,1
goto time_done
movlw maxnths
movwf sec_nth
check_sw
btfss flags,sw_on
goto set_time
btfsc flags,sw1
goto set_time
movlw maxsecs ;d196
movwf seconds
movlw 0x7f
movwf sec_nth
btfss flags,sw2
goto hourset
movlw 0xaf
movwf sec_nth
incfsz minutes,1
goto hourset
movlw maxmins ;d196
movwf minutes
hourset
btfsc flags,sw2
goto check_time
incfsz hours,1
goto check_time
movlw maxhrs
movwf hours
goto check_time
set_time
bsf flags,sec
bsf flags,chg
incfsz seconds,1
goto time_done
movlw maxsecs
movwf seconds
bsf flags,min
bsf flags,chg
movlw adjmin
subwf sec_nth,1
incfsz minutes,1
goto time_done
movlw maxmins ;0xc4
movwf minutes
bsf flags,hrs
bsf flags,chg
movlw adjhr ;0x22
addwf sec_nth
incfsz hours,1
goto time_done
movlw maxhrs ;0xf4
movwf hours
movlw adjday ;0x03
subwf sec_nth,1
time_done
btfss flags,chg
goto cycle
check_seconds
btfss flags,sw1
goto check_time
movlw 0x00
movwf digit2
movwf digit3
movwf digit4
movlw maxsecs ;0xc4
subwf seconds,0
movwf digit1
goto split_hex
check_time
movlw 0x00
movwf digit2
movwf digit4
movlw minhrs ;0xf3
subwf hours,0
movwf digit3
movlw maxmins ;0xc4
subwf minutes,0
movwf digit1
split_hex
movlw 0x02
movwf count
movlw digit1
movwf fsr
goto loop
loop2
movlw digit3
movwf fsr
loop movlw 0x0a
subwf pointer,1
btfsc status,c
goto increment_10s
addwf pointer,1
goto next_digit
increment_10s
incf fsr,1
incf pointer,1
decf fsr,1
goto loop
next_digit
decfsz count,1
goto loop2
convert_hex_to_display
movlw digit1
movwf fsr
movlw 0x04
movwf count
next_hex
movf pointer,0
call return_code
movwf pointer
incf fsr,1
decfsz count,1
goto next_hex
fix_display
movlw zero
subwf digit4,0
btfss status,z
goto fix_sec
movlw blank
movwf digit4
fix_sec
btfss flags,sw1
goto clear_flags
movwf digit3
clear_flags
movlw 0xf0
andwf flags,1
cycle
movlw dispoff
movwf port_a
movlw switch
tris port_b
movlw 0x0f
andwf flags,1
nop
nop
nop
movf port_b,0
movwf var
btfss var,1
goto switch2
bsf flags,chg
bsf flags,sw1
bsf flags,sw_on
switch2
btfss var,2
goto switch3
bsf flags,chg
bsf flags,sw2
bsf flags,sw_on
switch3
btfss var,3
goto switch3
bsf flags,chg
bsf flags,sw3
bsf flags,sw_on
setport
movlw 0x00
tris port_b
movlw blank
movwf port_b
btfss display,0
movf digit4,0
btfss display,1
movf digit3,0
btfss display,2
movf digit2,0
btfss display,3
movf digit1,0
movwf port_b
btfsc sec_nth,7
bsf port_b,0
movf display,0
movwf port_a
movwf display
rlf display,1
bsf display,0
btfss display,4
bcf display,0
goto main
return_code
addwf pc,1
retlw zero ;0
retlw one
retlw two
retlw three
retlw four ;4
retlw five
retlw six
retlw seven
retlw eight
retlw nine ;9
org PIC54
goto start


end


关键字:16c54  四位LED  时钟显示 引用地址:16c54四位LED时钟显示程序

上一篇:用PIC12C508A控制模型源程序
下一篇:PIC12C671单片机鼠标

推荐阅读最新更新时间:2024-11-10 06:12

51单片机电子日历(可调整 带温度)DS1302时钟+12864LCD显示
可按照程序接线 51单片机显示时间(可调整)(DS1302时钟+12864LCD显示) 仿真原理图如下: 单片机源程序如下: /****************************************/ /* 带温度显示的电子日历 */ /****************************************/ #include reg51.h #include intrins.h #include string.h #define uchar unsigned char #define uint unsigned int sbit DQ=P2^7; sbit CS1=P2^1;
[单片机]
51单片机电子日历(可调整 带温度)DS1302<font color='red'>时钟</font>+12864LCD<font color='red'>显示</font>
通过51单片机实现电子时钟功能并通过LCD1602显示
通过51单片机实现时钟功能并通过LCD1602显示.rar工程文件 点击下载 实验截图如下: 实验中涉及的硬件:51单片机,LCD1602模块,EEPROM AT24C02型号一个,按键3个,蜂鸣器一个 其中LCD1602模块引脚定义如下: EEPROM引脚连接情况如下: 软件环境:uVision4(Keil_C51_V9.00( 点击下载 )).rar,Win7Sp1X64 源代码如下: **************************************************************** author:lee yang data:2011/11/12
[单片机]
武林教你学PIC32(十五)液晶显示实时时钟
春节过后,很多内容都忘记了,好在以前整理了一些子函数,子模块。今天就用子函数模块化编写,液晶LCD1602实时显示时钟。 用到这样几个文件: delay.c采用定时器延时函数,里面有延时毫秒和微秒的函数。 lcd1602.c液晶显示函数 rtc.c实时时钟函数 采用模块化编程好处就是简单方便,便于移植,主函数内容不会过于庞大,也方便阅读。 main.c的内容为: #include lcd1602.h #include delay.h #include rtc.h #include led.h int main(void) { LED_INIT(); //LED初始化 initLCD(); //初始化LCD1602 putsL
[单片机]
武林教你学PIC32(十五)液晶<font color='red'>显示</font>实时<font color='red'>时钟</font>
LCD1602液晶显示DS1302实时时钟Proteus仿真
Proteus仿真图: 仿真程序: #include reg52.h #include intrins.h #include string.h #define uint unsigned int #define uchar unsigned char //*******LCD******* sbit LCDRS=P2^0; //LCD数据/命令选择端 sbit LCDRW=P2^1; sbit LCDEN=P2^2; //LCD使能新号端 //******DS1302****** sbit IO=P1^0; //1302数据线 sbit SCLK=P1^1; //1302时钟线 sbit
[单片机]
LCD1602液晶<font color='red'>显示</font>DS1302实时<font color='red'>时钟</font>Proteus仿真
基于8051实现的可启停/显示或隐藏时间/设定当前时间的时钟
程序实现的功能: 1. 实验箱上电后, 不显示当前时间. 2. 向8051发送 Show.E 后, 显示当前时间. 3. 向8051发送 Hide.E 后, 隐藏当前时间. 4. 向8051发送 Start.E 后, 时钟开始计时. 5. 向8051发送 Stop.E 后, 时钟停止计时(若当前处于 Show 状态, 则显示停止计时前的时间). 6.向8051发送 hour:minute:second.E(hour、minute、second均为具体的数字, 且不足10 十位要添零补位) 后, 时钟按照给出的时间的整点开始计时. #include STC89C5xRC.H #include stri
[单片机]
基于8051实现的可启停/<font color='red'>显示</font>或隐藏时间/设定当前时间的<font color='red'>时钟</font>
基于DS1307的简易时钟显示程序分享
目前家用的数字电子钟,多数只能显示小时、分钟等信息,功能单一,而且大都采用LED数码管作为显示器件,功耗大,不能令消费者满意。 DS1307简介 AM/PM 标志位决定时钟工作于24小时或12小时模式,芯片有一个内置的电源感应电路,具有掉电检测和电池切换功能。 是一款低功耗,具有56字节非失性RAM的全BCD码时钟日历实时时钟芯片,地址和数据通过两线双向的串行总线的传输,芯片可以提供秒,分,小时等信息,每一个月的天数能自动调整。并且有闰年补偿功能 特点: 可对秒,时,分,每月的天数,月份,每周的天数进行计数,并具有闰年补偿功能。计年上限2100。 56字节非失性的RAM 两线串行接口 可编程方波输出 自动掉电检测和切换电路 在
[模拟电子]
单片机电子秒表时钟 数码管显示
电子秒表时钟 数码管显示 可设置时间 可用于秒表暂停、清零蜂鸣器按键音 单片机源程序如下: #include reg51.h #include delay.h #include intrins.h unsigned char code LED ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //定义共阴极LED7段显示码 unsigned char dispbit ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //定义数码管位码 unsigned char hour=23,min=58,sec=52,
[单片机]
单片机电子秒表<font color='red'>时钟</font> 数码管<font color='red'>显示</font>
LCD1602液晶显示显示时钟且能修改时间
CODE: /*************************************** 程序功能: LCD液晶显示屏显示时钟并且可以修改时间 ***************************************/ #include reg52.h #define uint unsigned int #define uchar unsigned char sbit K1=P1^0;//设置三个独立键盘 sbit K2=P1^3; sbit K3=P1^5; sbit lcdwrite=P2^5; sbit lcddatecommand=P2^6; sbit lcde=P2^7; uchar code firstlin
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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