51单片机8位数码管时钟c语言,51单片机8位数码管电子时钟(完结)

利用8位数码管显示时间,原理与4位数码管显示的基本一样

仿真图:

c72bb1e6a3efdec6665ee57fdfc807f8.png本文引用地址:http://www.eepw.com.cn/article/201611/323550.htm

程序源代码:

作者:胡琴

联系qq:1257394091

本程序版本规本人所有可以任意转载:

技术支持网站:http://www.51hei.com

本程序已经通过在线软件仿真和硬件制作.

org 0000h ;程序开始入口地址

sjmp main ;跳转至主程序

org 000bh ;T0中断入口地址

ljmp inti0 ;跳转至T0中断程序

org 001bh ;T1中断入口地址

ljmp inti1 ;跳转至T1中断程序

org 0030h

main:mov tmod,#11h ;设T0、T1为模式1

mov ie,#8ah ;开T0、T1允许中断

mov th0,#4ch ;赋T0 50ms初值

mov tl0,#00h

mov th1,#4ch ;赋T1 50ms初值

mov tl1,#00h

mov sp,#60h ;设置堆栈指针

mov 38h,#00 ;闹钟分初值

mov 39h,#00 ;闹钟时初值

mov 31h,#00 ;时间秒初值

mov 32h,#0

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一份C语言代码,实现单片机控制6位数码管显示时钟功能。请注意,由于不知道您使用的具体单片机型号和数码管型号,此代码仅供参考,您需要根据自己的实际情况进行修改。 ``` #include <reg52.h> #define uchar unsigned char #define uint unsigned int // 定义数码管段码表 uchar code smgduan[17] = { 0x3f, // 0 0x06, // 1 0x5b, // 2 0x4f, // 3 0x66, // 4 0x6d, // 5 0x7d, // 6 0x07, // 7 0x7f, // 8 0x6f, // 9 0x77, // A 0x7c, // B 0x39, // C 0x5e, // D 0x79, // E 0x71, // F 0x00 // 空 }; // 定义显示位选择数组 uchar code wduan[6] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf}; // 定义变量 uchar hour = 12; // 时 uchar minute = 30; // 分 uchar second = 0; // 秒 // 定义函数 void delay(uint xms) { uint i, j; for (i = xms; i > 0; i--) { for (j = 110; j > 0; j--) { ; } } } void display() { uchar shiwei, gewei, baiwei, qianwei, wanwei; shiwei = hour / 10; gewei = hour % 10; baiwei = minute / 10; qianwei = minute % 10; wanwei = second / 10; P0 = wduan[0]; P2 = smgduan[shiwei]; delay(5); P0 = wduan[1]; P2 = smgduan[gewei]; delay(5); P0 = wduan[2]; P2 = smgduan[10]; delay(5); P0 = wduan[3]; P2 = smgduan[baiwei]; delay(5); P0 = wduan[4]; P2 = smgduan[qianwei]; delay(5); P0 = wduan[5]; P2 = smgduan[wanwei]; delay(5); } void main() { TMOD = 0x01; // 定时器0工作在模式1 TH0 = 0xfc; // 定时器0初值 TL0 = 0x66; // 定时器0初值 TR0 = 1; // 启动定时器0 ET0 = 1; // 使能定时器0中断 EA = 1; // 开启总中断 while (1) { display(); // 显示时钟 } } void timer0() interrupt 1 { TH0 = 0xfc; // 定时器0初值 TL0 = 0x66; // 定时器0初值 second++; // 秒加1 if (second == 60) // 如果秒数等于60,则分加1,清零秒数 { second = 0; minute++; } if (minute == 60) // 如果分数等于60,则时加1,清零分数 { minute = 0; hour++; } if (hour == 24) // 如果时数等于24,则小时清零 { hour = 0; } } ``` 这是一个简单的单片机时钟程序,使用了定时器、中断、数码管等知识。您需要根据自己的实际情况进行修改,如数码管的引脚连接、定时器的初值、数码管显示的内容等。希望能对您有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值