51单片机 4位数码管可调的定时器C程序编写,请帮忙给个编程思路或相关程序

51单片机 4位数码管可调的定时器C程序编写,请帮忙给个编程思路或相关程序,第1张

#include<reg51h>

#define uchar unsigned char

uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9

unsigned char sec=0,min=0,hour=12,scanled;

unsigned char key,flashbit,dot,time,times=0;tflash;

unsigned char disdat[4];

sbit keyqt=P3^0;

sbit keyxz=P3^1;

sbit keytz=P3^2;

void dischg()

{

disdat[0]=min%10;

disdat[1]=min/10;

disdat[2]=hour%10;

disdat[3]=hour/10;

}

void t0isr() interrupt 1 //秒计时

{

TR0=0;

TH0=0x3c;

TL0=0xb0;

TR0=1;

time++;

if(time<10)dot=0;

else dot=1;

if(time==20)

{

time=0;

sec++;

if(sec>59)

{

sec=0;

min++;

if(min>59)

{

hour++;

if(hour>23)hour=0;

}

}

}

dischg();

}

void t1isr() interrupt 3 //显示

{

TR1=0;

TH1=0xec;

TL1=0x78;

TR1=1;

times++;

if(times>=50){times=0;tflash=~tflash;}

switch(scanled)

{

case 0:

P2=0x01;

P0=~ledtab[disdat[3]];

if((tflash==0)&&(flashbit==1))P0=~ledtab[0x10];

break;

case 1:

P2=0x02;

if(dot)P0=~(ledtab[disdat[2]]|0x80);

else P0=~ledtab[disdat[2]];

if((tflash==0)&&(flashbit==1))P0=~ledtab[0x10];

break;

case 2:

P2=0x04;

P0=~ledtab[disdat[1]];

if((tflash==0)&&(flashbit==2))P0=~ledtab[0x10];

break;

case 3:

P2=0x08;

P0=~ledtab[disdat[0]];

if((tflash==0)&&(flashbit==2))P0=~ledtab[0x10];

break;

default:break;

}

scanled++;

scanled%=4;

}

main()

{

TMOD=0x11;

TH0=0x3c;

TL0=0xb0;

TH1=0xec;

TL1=0x78;

EA=1;

TR1=1;

ET0=1;

ET1=1;

sec=0;

min=0;

hour=0;

flashbit=0;

scanled=0;

time=0;

tflash=0;

dot=1;

dischg();

while(1)

{

// flash();//闪烁

if(keyqt==0) //p30启停

{

while(keyqt==0);

TR0=~TR0;

flashbit=0;

}

if(keyxz==0) //p31选择调时、分

{

while(keyxz==0);

TR0=0;

flashbit++;

if(flashbit>2){flashbit=0;TR0=1;}

}

if(keytz==0) //调数

{

while(keytz==0);

if(flashbit==1)

{

hour++;

if(hour>23)hour=0;

}

if(flashbit==2)

{

min++;

if(min>59)min=0;

}

dischg();

}

}

}

什么鸟百度知道,不能粘贴,只好一个个地打出来。

#include <regx51h>

unsigned int ms;

unsigned char i,NixieCode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

void main()

{

    EA=1;

    TMOD=0x02;

    TH0=TL0=6;

    ET0=1;

    TR0=1;

    while(1);

}

void t0()interrupt 1

{

    if(++ms>2000)

    {

        ms=0;

        P1=NixieCode[i];

        if(++i>15)i=0;

    }

}

#include //51系列单片机定义文件

#define uchar unsigned char //定义无符号字符

#define uint unsigned int //定义无符号整数

void delay(uint); //声明延时函数

void main(void)

{

uint i;

uchar temp;

while(1)

{

temp=0xFE;

for(i=0;i<8;i++) //8个流水灯依次全部点亮

{

P1=temp;

delay(500); //调用延时函数

temp<<=1;

}

}} void delay(uint t) //定义延时函数

{

register uint bt;

for(;t;t--)

for(bt=0;bt<255;bt++);

}

MOV TMOD,#00000001B 设定定时器0工作方式为1

如果设为工作方式2,则MOV TMOD,#00000010B

如果设为工作方式0,则MOV TMOD,#00000000B

TMOD的M1M0位确定定时器工作方式:

M1M0 工作方式 功能说明00 方式0 13位定时器/计数器

01 方式1 16位定时器/计数器

10 方式2 自动重载8位定时器/计数器

11 方式3 T0分为2个8位独立计数器,T1无方式3

#include <REG51H>

sbit pause = P1^7;

void main(void)

{ EA = 1;

TMOD = 0x01;

ET0 = 1;

TR0 = 1;

pause = 0;

while(1);

}

void timeint(void) interrupt 1

{ TH0 = (65536-150)/256;

TL0 = (65536-150)%256;

pause = !pause;

}

上面的程序产生的方波高低脉冲宽度应该在153-155uS之间,这是因为51在响应中断需要3-5个机器周期时间,将150改成146应该更准确些,但若是做题目,还应该是-150。

以上就是关于51单片机 4位数码管可调的定时器C程序编写,请帮忙给个编程思路或相关程序全部的内容,包括:51单片机 4位数码管可调的定时器C程序编写,请帮忙给个编程思路或相关程序、51单片机,用定时器以间隔0.5秒在8位数码管上依次循环显示0.1.2.3.....C.D.E.F。怎么用C语言编写这个程序、51单片机c语言定时器控制流水灯等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9349194.html

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

发表评论

登录后才能评论

评论列表(0条)

保存