‘壹’ 51单片机 用定时器T1控制两位数码管做从0计数到60的实验,每一秒加1,可是怎都不显示,求高手帮忙找原因
通过定时器初值可以看出单片机使用的是11.0592MHz晶振
把函数void dispiay(uchar ge,uchar shi)
改成void display(uchar shi,uchar ge)
即可编译通过
只是函数拼写错误和变量顺序错误
‘贰’ 单片机 2位数间隔1s自动加1 的程序怎么写呀、
2位数间隔1s自动加1 的程序的实现方法:
1 利用定时器1,定时50毫秒,每当50毫秒定时时间到时,使用软件计数器计数,当计数到20时,即1秒时间到。(这时软件计数器要清零,重新开始为下一秒计数)
2 每当1秒时间到时,应该让你的自动加1计数器加1。
3 楼上的朋友配合的真好,这么快就已经给出了具体的程序 其中 time为软件计数器;x为自动加1计数器。你可以作为参考,修改后嵌入到自己的程序中。
‘叁’ 单片机按键按一次就加一
按键相对是个低速任务。你按的再快,一秒可以按十次吗?什么?你可以。。那你就是作弊了。因为哪怕你反应的过来。按键可不行。所以。这个本质你需要牢牢抓住。那么你可以选择一秒之内只检测几次按键。把几乎是连续在使用的机器时间碎片化。比如在一个碎片里只查一次按键。是的,你现在就是这么做的。只是循环太快。碎片太多。按键的抖动你都查到了。所以你需要的仅仅是慢下来。极限就是刚刚说的查10次。算算,这是一个100ms的定时。明白定时器的真正用途了吗?如果你实际这么实验了你会发现这的确有效。不会加个成百上千了。接下来你需要设置一个逻辑让按键检测只对下降沿起作用。最好的办法就是和前次的状态比较。如果上次的状态为高而此次状态为低。那么这就是个下降沿。于是你需要一个寄存器保存上一次的状态。并每次比较后更新。原来这寄存器是这么用的。。实际实验后发现这么干已经可以保证基本每次长按只会加1。但是短按似乎会丢失。那是因为。100ms实在是长了些。电平保持100ms有时是太难了。所以,你可以适当提高频率。比如提高10倍。以10ms为周期。基本能解决大多数问题。
‘肆’ 单片机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;
}
‘伍’ 单片机按键加一、减一
利用外部中断实现按键按一下数码管数字加1,实现00-99的循环,另一个按键实现清零,不管数码管数字是多少,该按键按下数码管显示00