用51单片机设计3位led数码显示管作秒表00.0-99.0求设计电路与c语言程序

用51单片机设计3位led数码显示管作秒表00.0-99.0求设计电路与c语言程序,第1张

#include "STC12C54H"

#define uchar unsigned char

#define uint unsigned int

#define dataport P1//P1直接驱动数码管的8个阳极

sbit wei1=P3^3;//再有三个管脚接3个三极管驱动数码管的阴极

sbit wei2=P3^4;

sbit wei3=P3^5;

uint a=0;//中断次数计数,一次50ms,20次为1 秒

//共阴数码管七段码

uchar TABLE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//延时子程序

void delay1ms(uint t)

{

uint i,j,k;

for(i=t;i>0;i--)

for(j=15;j>0;j--)

for(k=27;k>0;k--);

}

//显示子程序

void display(uint n)

{

uchar a1,a2,a3;

a1=n/100%10;

a2=n/10%10;

a3=n%10;

wei1=1;

dataport=TABLE[a1];

delay1ms(1);

wei1=0;

dataport=0x80|TABLE[a2];//这里多个小数点

delay1ms(1);

wei3=1;

dataport=TABLE[a3];

delay1ms(1);

wei3=0;

}

void init(void)

{

TMOD=0X01;

TH0=(655536-50000)/256;//定时50ms

TL0=(655536-50000)%256;

EA=1;

ET0=1;

TR0=1;

P1M0=0;

P1M1=0xff;//P1口设为推挽输出,驱动能力强

P3M0=0;

P3M1=0x38;//P33P34 P35口设为推挽输出

}

void main(void)//主程序

{

init();//初始状态设定

while(1)

{

display(a/2);//显示计数值,以十分之一秒为单位

}

}

void timer0(void)interrupt 1//中断子程序

{

TH0=(655536-50000)/256;

TL0=(655536-50000)%256;

a++;

if(a==1980)a=0;//1980次是99秒

}

这个程序可以实现秒的计时,按键控制开始、暂停、清零功能,更多功能自己在看清程序的基础上进行改进。

#include <reg51H>

sbit P3_5 =P3^5;

unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};

unsigned char second;

unsigned char keycnt;

unsigned int tcnt;

void main(void)

{

unsigned char i,j;

TMOD=0x02;

ET0=1;

EA=1;

second=0;

P1=dispcode[second/10];

P2=dispcode[second%10];

while(1)

{

if(P3_5==0)

{

for(i=20;i>0;i--)

for(j=248;j>0;j--);

if(P3_5==0)

{

keycnt++;

switch(keycnt)

{

case 1:

TH0=0x06;

TL0=0x06;

TR0=1;

break;

case 2:

TR0=0;

break;

case 3:

keycnt=0;

second=0;

P1=dispcode[second/10];

P2=dispcode[second%10];

break;

}

while(P3_5==0);

}

}

}

}

void t0(void) interrupt 1 using 0

{

tcnt++;

if(tcnt==4000)

{

tcnt=0;

second++;

if(second==100)

{

second=0;

}

P1=dispcode[second/10];

P2=dispcode[second%10];

}

}

#include<AT89X51H>

unsigned char code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00

};

unsigned char second;

unsigned char keycnt;

unsigned int cnt;

void main(void)

{

unsigned char i,j;

TMOD=0x02;

EA=1;

ET0=1;

second=0;

P0=table[second/10];

P2=table[second%10];

while(1)

{

if(P3_0==0)

{

for(i=20;i>0;i--)

for(j=248;j>0;j--);

if(P3_0==0)

{

keycnt++;

switch(keycnt)

{

case 1:

TH0=0x06;

TL0=0x06;

TR0=1;

break;

case 2:

TR0=0;

break;

case 3:

keycnt=0;

second=0;

P0=table[second/10];

P2=table[second%10];

break;

}

while(P3_0==0);

}

}

}

}

void to(void) interrupt 1 using 0 //定时器0,方式0

{

cnt++;

if(cnt==400)

{

cnt=0;

second++;

if(second==100)

{

second=0;

}

P0=table[second/10];

P2=table[second%10];

}

}

以上就是关于用51单片机设计3位led数码显示管作秒表00.0-99.0求设计电路与c语言程序全部的内容,包括:用51单片机设计3位led数码显示管作秒表00.0-99.0求设计电路与c语言程序、用C语言编写秒表的程序(单片机控制的时钟设计)、急求8051单片机秒表程序,要求:显示精度0.01秒,由两个按键控制,一个按键控制启停,一个按键控制清零等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9510778.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存