四个8段数码管显示从0.00到15.00 按一次按键只增加0.1 想要每次增加1 代码要怎么改呢?
- 利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开始每1秒钟加1。
- 51单片机汇编语言按键控制数码管加1加到999
- 求救:c51单片机按键每按一次同时数码管显示数字加一
- 单片机c语言按键每按一次加一一直到加到100程序怎么写?求高手指点。
利用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;
}