四个8段数码管显示从0.00到15.00 按一次按键只增加0.1 想要每次增加1 代码要怎么改呢?

3900℃ ALLAN

四个8段数码管显示从0.00到15.00 按一次按键只增加0.1 想要每次增加1 代码要怎么改呢?

利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开始每1秒钟加1。

共阳数码管中断程序:

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

uchar code table[]=

{

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x83,0xf8,

0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e};

uint num,a;

uchar bai,shi,ge;

void init();

void delay(uint);

void display(ucharbai,ucharshi,ucharge);

uint fb();

uint fs();

uint fg();

void main()

{

init();

while(1)

{

display(fb(),fs(),fg());

}

}

void init()

{

num=0;

a=0;

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

void display(ucharbai,ucharshi,ucharge)

{

P1=0xfd;

P0=table[bai];

delay(1);

P1=0xfb;

P0=table[shi];

delay(1);

P1=0xf7;

P0=table[ge];

delay(1);

}

void timeoff() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65526-50000)%256;

a++;

if(a%20==0)

{

num++;

if(num==999)

{

num=0;

}

}

}

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

uint fb()

{

bai=num/100;

return bai;

}

uint fs()

{

shi=num%100/10;

return shi;

}

uint fg()

{

ge =num%100%10;

return ge;

}

扩展资料

2个可编程定时/计数器·5个中断源,2个优先级(52有6个)

一个全双工串行通信口

外部数据存储器寻址空间为64kB

外部程序存储器寻址空间为64kB

逻辑操作位寻址功能·双列直插40PinDIP封装

单一+5V电源供电

CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;

RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;

ROM:用以存放程序、一些原始数据和表格;

I/O口:四个8位并行I/O口,既可用作输入,也可用作输出

T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;

五个中断源的中断控制系统;

一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;

片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M—12M。

参考资料来源:百度百科-51单片机

51单片机汇编语言按键控制数码管加1加到999

思路是对的,细节描述有问题,算法描述要严谨。为什么要99时清零啊,这可能就是错误的地方了。

系统初始化时,清除使用到的寄存器!!然后,当需要加1时做如下动作

寄存器a = a+1

如果寄存器a == 100,{寄存器b=b+1;寄存器a = 0}

这样就可以了,b中的1代表100,a中的1就是1

求救:c51单片机按键每按一次同时数码管显示数字加一

//这是PIC16F877A的, 你照这个写吧

#include<pic.h>

#define uchar unsigned char

#define uint unsigned int

__CONFIG(0x3B31);

void delay(uint z);

void key();

void init();

void Kuy(uchar num);

/*

按键,数码管,LED等,喇叭 综合实验程序

功能如下: 当你按独立键盘是按“1”是第一个LEd灯亮

,灯亮的同时喇叭也响,LCD显示按钮值。

LCD显示1到4 !!!

Console.WriteLine("Salam Uygihur!");

Console.ReadLine();

*/

const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void main()

{

init();

while(1)

{

PORTA=0x20;

key();

}

}

void delay(uint z)

{

int a,b;

for(a=z;a>0;a--)

for(b=110;b>0;b--);

}

void init()

{

TRISB=0;

TRISD=0;

TRISA=0;

TRISC=0xff;

TRISE=0;

TRISD=0;

PORTE=0;

PORTD=0;

}

void Kuy(uchar num)

{

uchar temp;

for(temp=num;temp>0;temp--)

{

RE1=1;

delay(100);

RE1=0;

delay(50);

}

}

void key()

{

if(RC0==0)

{

delay(10);

if(RC0==0)

{

while(!RC0);

PORTD=0x01;

Kuy(1);

PORTB=table[1];

}

}

if(RC1==0)

{

delay(10);

if(RC1==0)

{

while(!RC1);

PORTD=0x02;

Kuy(2);

PORTB=table[2];

}

}

if(RC2==0)

{

delay(10);

if(RC2==0)

{

while(!RC2);

PORTD=0x04;

Kuy(3);

PORTB=table[3];

}

}

if(RC3==0)

{

delay(10);

if(RC3==0)

{

while(!RC3);

PORTD=0x08;

Kuy(4);

PORTB=table[4];

}

}

}

单片机c语言按键每按一次加一一直到加到100程序怎么写?求高手指点。

给你参考

//12M晶振。2位共阳数码管,P0为段码,P2.0、P2.1位控

#include <reg51.h>

#define uchar unsigned char

sbit P20=P2^0;

sbit P21=P2^1;

sbit KEY=P2^2;

uchar ge,shi;

uchar code tab[ ]={0xC0,0xF9,0xA4,0xB0,0x99,

0x92,0x82,0xF8,0x80,0x90,};

void delay_ms(unsigned int ms) //1ms延时

{

uchar a;

while(ms--)

for(a=123;a>0;a--);

}

void display();

void main()

{

while(1)

{

display();

while(!KEY)

{

display();

if(KEY)

ge++;

}

if(ge==10)

{

ge=0;

shi++;

}

if(shi==100)

{

shi=0;

}

}

}

void display( )

{

P20=1;

P0=tab[ge];

delay_ms(5);

P20=0;

P21=1;

P0=tab[shi];

delay_ms(5);

P21=0;

}