#include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int uchar Count; sbit Dot = P0^7; uchar code DSY_CODE[]= { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f }; uchar Digits_of_6DSY[]={0,0,0,0,0,0,0,0}; void DelayMS(uint x) { uchar i; while(--x) { for(i=0;i<120;i++); } } void main() { uchar i,j; P0 = 0x00; P3 = 0xff; Count =0; TMOD = 0x01; TH0 = (65535-50000)/256; TL0 = (65535-50000)%256; IE = 0x82; TR0 = 1; while(1) { j = 0x7f; for(i=7;i!=-1;i--) { j=_crol_(j,1); P3 = j; P0 = DSY_CODE[Digits_of_6DSY[i]]; if(i==1) P0 |= 0x80; DelayMS(2); } } } void Time0() interrupt 1 { uchar i; TH0 = (65535-50000)/256; TL0 = (65535-50000)%256; if(++Count !=2) return; Count = 0; Digits_of_6DSY[0]++; for(i=0;i<=7;i++) { if(Digits_of_6DSY[i] == 10) { Digits_of_6DSY[i] = 0; if(i != 7) Digits_of_6DSY[i+1]++; } else break; } }
时间: 2024-04-27 22:21:09 浏览: 120
51与DS1302程序
5星 · 资源好评率100%
这段代码是一个基于8051单片机的数字时钟程序。程序中使用了一个共阴数码管(DSY),通过P0口输出数码管显示的数字,P3口控制数码管的位选。程序通过定时器0中断来实现时钟的计时功能,每隔一秒钟更新一次显示的数字。程序中用了一些宏定义来定义常量和变量类型,如#define uchar unsigned char和#define uint unsigned int。程序中还使用了一些8051单片机的特有函数,如_intrins.h中的_crol_函数用于实现循环左移。
阅读全文