51单片机不加锁存器数码管动态显示0-999

更新时间:2024-04-12 07:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

51单片机不加锁存器数码管动态显示0-999

使用STC89C52RC单片机,数码管为共阳数码管PNP驱动,P3.4-P3.6控制位选,P0口控制段选信号,图中P8接到有上拉电阻的P0口,P9接到P3.4-P3.6,附上图和程序!

#include

sbit wei1=P3^6; /*百位*/ sbit wei2=P3^4; /*个位*/ sbit wei3=P3^5; /*十位*/

unsigned char code LedChar[] = { //数码管显示字符转换表 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E };

void delay(int z);

unsigned char i=0; //动态扫描的索引 unsigned int cnt=0; //记录 T0 中断次数 void main() {

unsigned long sec=0; //记录经过的秒数 EA=1; //使能总中断

TMOD=0x01; //设置 T0 为模式 1

TH0=0xB8; //为 T0 赋初值 0xFC67,定时 1ms TL0=0x00;

ET0=1; //使能 T0 中断 TR0=1; //启动 T0 while (1) { if (cnt>=1000) //判断 T0 溢出是否达到 1000 次 { cnt=0; //达到 1000 次后计数值清零 sec++; //秒计数自加 1 } wei1=0; P0=LedChar[sec]; wei1=1; delay(5); wei2=0; P0=LedChar[sec/10]; wei2=1; delay(5); wei3=0; P0=LedChar[sec/100]; wei3=1; delay(5); if(sec>999) { sec=0; }

} }

void delay(int z) {

int x,y;

for(x=z;x>0;x--) for(y=10;y>0;y--); }

/* 定时器 0 中断服务函数 */ void InterruptTimer0() interrupt 1 {

TH0 = 0xFC; //重新加载初值 TL0 = 0x67;

cnt++; //中断次数计数值加 1 }

本文来源:https://www.bwwdw.com/article/269p.html

Top