Ⅰ (郭天祥) 独立按键P3^4控制 2位数码数码管显示0加到99 按一下加1 求程序 邮箱:[email protected]
//用LED数码显示器循环显示数字0~9
#include<reg51.h> // 包含51单片机寄存器定义的头文件
/**************************************************
函数功能:盯烂尘延时函数,延时一段时间
***************************************************/
void delay(void)
{
unsigned char i,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++)
;
}
/**************************************************
函数功能:主函数
***************************************************/
void main(void)
{
unsigned char i;
unsigned char code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//数码管显示0~9的段码表,程序运行中当数组值不发生变化时,
//前面加关历枯键字code ,可以大大节约单片机的存储空间
P2=0xfe; //P2.0引脚输出低电凯禅平,数码显示器DS0接通电源工作
while(1) //无限循环
{
for(i=0;i<10;i++)
{
P0=Tab[i]; //让P0口输出数字的段码92H
delay(); //调用延时函数
}
}
}
自己再改一下吧
Ⅱ 关于郭天祥单片机开发板上AD实验的代码的一点困惑,求大虾解疑
1._nop_ 函数也是延时,一条指令周期. 因为无论指令是否有用都要占用时间.例如 a=a;
2.如果这是全部代码,diola 确实没有使用
Ⅲ 郭天祥单片机,为什么delay(3)可以而delay(4)不行
这里有3个数码管,延时子程姿梁汪序参数是毫秒数。渣磨根据视觉暂留的40ms时间,delay(n)的n小于13是可以的迹仔,但延时时间太短,比如小于3ms,那么亮度就很微弱,所以delay(3)~delay(13)都是可以的。
Ⅳ 关于郭天祥单片机教程里的流水灯程序
我用的是吴鉴鹰单片机开发板,交流可以
Ⅳ 郭天祥单片机视频教程疑问,有定时器为什么要delay
定时器是控敬世制数码管每次变换的时间,delay函数是控制数码管亮的时间。也就是说定时链厅器控亮唤肢制1,2,3,4.。。。的变换,delay测试控制1,2,3,4.。。。。的显示时间。这样才能出现一个动态效果
Ⅵ 为什么我用郭天祥的单片机按键程序,按一下会加两次,吴鉴鹰老师的就很稳定啊,我是学生。
程序问题,把按键消抖的延时时间加大即可缺敏,并液镇且要检测按键是否抬起
if(key==0)
{
delay_ms(20);//延伏埋枝时,可加长至40ms
if(key==0)
{
while(key==0);//等待按键抬起
a++;
}
}
Ⅶ 51单片机,编写延时程序,控制蜂鸣器发声;
很简单的
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit fengmingqi=P0^0; //声明IO口
void delay(uint x)//延时子函数
{
uint i,j;
for(i=x;i>0;i--)
for(j=50;j>0;j--);
}
void main(void)
{
while(1) //循环
{
fengmingqi=1; //p0.0口高电平,蜂鸣器发声
delay(500); //延时
fengmingqi=0; //p0.0口低电平,蜂鸣器不发声
delay(500); //延时
}
}
Ⅷ 数码管动态显示
我先来帮你分析一下这个程序:
(1)到(4)的功能是由P0口给出数码管的段码。我猜想在P0口和数码管的段码线之间是一个锁存器,这样能够保证当P0口的数据变化之后,数码管的数字不变化。这时,数码管不能显示相应数字,因为位码线还没有被选中。
(5)到(8)的功能是由P0口给出数码管的位码。这时位码线被选中,在段码和位码的同时作用下,数码管被激活,显示shi对应的数字。
然后延时delay(5);
执行到时(10),由于P0给出了ge的段码,而位码还没改变,这时候当然要在第一个数码管上显示第二个数码管的内容。
执行到(14),位码改变,第二个数码管被选中,这时段码和位码共同作用,世好第二个数码管显示ge所对应的数字。
然后延时。
由于第一个数码管显示ge的时间很短,只有不到十个机器周期,而正常显示的时间很长,这个时间是delay(5),所以看不出ge曾经在第一个数码管上经过,所以看上去显示效果是对的。
这也就是为什么要加延时程序(8)和(16)。如果不加的话,第一个数码管会快速的在ge和shi之间进行“切换”,最后的搜瞎铅结果是数码管一显示8,而数码管二正常显示,你可以试一下。
因此回答如下:
问题一:延时程序的目的是为了掩盖数码管一上的“切换”,给你的眼睛“错觉”。
问题二:没有讲究,是锁神知存器的锁存特性造成的,延时程序很好解决了这一问题。
楼上的回答很不准确,我不赞同。即使把13.14.15和9.10.11换一下,如果不加延时程序,问题同样存在,只不过成了数字shi经过数码管二而已。
郭天祥讲的时候,程序不是现成的,是当时现场写的,出现错误也是正常的。
Ⅸ 郭天祥单片机教学视屏第三讲中断部分的问题
没有对IT0做防抖处理。其实,由于插入和拔出的瞬间接触不可靠,在插入和拔出李租的两个过程中都触发了多次的下降沿和上升沿,即拔出时也有下降沿中断发生。
具体原理可参考单片机按键防抖的原理。
处理方法,可以在外部中断程序里加入一定的延时,如20ms。具体说来:
void exter0() interrupt 0
{
延时20毫秒;(根据经验15到30ms)
判断P3.2是否低电平;
如果是低州塌电平: D1=0;
如果是高电平:不做任何哪迹兆事。
}