按下按键后数码管会先灭后亮是什么原?pic单片机编程用按键控制数

这里有个例子你可以看看,其实动态显示原理很简单,就是显示频率超过了人眼的分辨率比如while

  为了解决用户可能碰到关于"按下按键后数码管会先灭后亮是什么原?pic单片机编程用按键控制数"相关的问题,酷网经过收集整理为用户提供相关的解决办法,请注意,解决办法仅供参考,不代表本网同意其意见,如有任何问题请与本网联系。"按下按键后数码管会先灭后亮是什么原?pic单片机编程用按键控制数"相关的详细问题如下:pic单片机编程用按键控制数码管时,按下按键后数码管会先灭后亮是什么原因

蛋清敷脸可以收缩毛孔,紧致肌肤,蛋清敷脸也可以能将毛孔里的脏东西清理出来,同时具备收缩毛孔功效。改善脸上的油光,痘痘和脸面的不平衡,也能提高你的自信~但是鸡蛋清并不是直接敷在脸上的,要和其他东西混在一起敷,效果会更好,说白了就是自制一个面膜,但是呢这个面膜的针对性更强,原料自己可以把控可以说是最放心最安全的面膜了。1、蜂蜜蛋清面膜方法:蜂蜜、蛋清、牛奶、黄瓜汁,黄瓜汁加入牛奶50ml,加蛋清一个,蜂蜜适量,调匀后涂在脸上,大约在20-30分钟后洗净,洗净后用上护肤品。你会发现自己的皮肤滑滑的,超级超级嫩。功效:长期坚持用可以抗皱、美白、精致肌肤。2、蛋清海藻颗粒面膜方法:鸡蛋(蛋清)、一包海藻

扩展阅读,根据您访问的内容系统为您准备了以下扩展内容,希望对您有帮助。

pic单片机编程用按键控制数码管时,按下按键后数码管会先灭后亮是什么原因

pic没玩过,但按键处理应该和51一样的.你按下按键,防抖用延时10ms吧,这时按下按键,如果没松手,程序一直执行延时程序,当然数码不显示了。

一般方法是防抖调用延时子程序改为调用显示子程序。这样,你按下按键,数码管就会显示。

8小时时钟复位代码 (三个数码管 三个按键 按键分别控制时 分 秒 PIC单片机16F1937)?

用一个时基计数累加就行了.追问我是菜鸟级别的 能不能用程序表示 谢谢啦!

有pic用的独立键盘与数码管的动态扫描的程序吗

#include<pic.h>//独立键盘与数码管的动态扫描:当第一个键按下后为123456,第二键223456,第三键323456,第四键423456;在上一基础上增加数码管扫描程序

#define uchar unsigned char//宏定义

#define uint unsigned int

__CONFIG(0x3b31);//设置配置位

const uchar table[]={0x3f,0x06,0x5b,0x4f,//注意code是用在51单片机中的程序储存器中,const是一个常量,pic和51的单片机也可以共用的常量,但要写在前头

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x20};//数码管数字表从0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,无显示

uchar key_num;//先定义一个变量为数码管的按第几个键作一个变量

void delay(uint x);//声明

void init();

void scan();

void didi(uchar);

void disp(uchar num1,uchar num2,uchar num3,uchar num4,uchar num5,uchar num6);

void main()

{

init();//调用初始化

while(1)//因为要不断地循环扫描键盘检测是否按下所以要进行死循环

{

scan();//调用键盘扫描程序

disp(key_num,2,3,4,5,6);//在调用键盘扫描的同时调用数码管,又因为第一个是未知用key_num变量,其他的是已知就直接写

}

}

void delay(uint x)//延迟函数x表示毫秒

{

uint a,b;

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

for(b=110;b>0;b--);//嵌套

}

void init()

{

TRISB=0xff;//因为RB接键盘要检测是否接通所以有设全为输入状态

TRISD=0;//因为RD接的是LED二极管设置全为输出状态

TRISE0=0;//设置RE0蜂鸣器为输出状态

TRISA=0;//设置数码管的位选为全输出状态

RE0=0;//先设置蜂鸣器为关闭不响

PORTD=0;//设置LED的输出先全部关闭

PORTA=0;//在初始化时数码管不能显示

}

void scan()//键盘扫描程序

{

if(RB0==0)//检测如果s17等于0,这是第一个按键

{

delay(10);//去抖

if(RB0==0)//再一次检测s17是否等于0

{

didi(1);//第一个按下时响一声

while(!RB0)//要等按键松手,即松手检测,当按键按下则为0再非0为真会一直停在此,当松手后为假会继续下面的程序

disp(key_num,2,3,4,5,6);//当按下时也要进行数码扫描,因为动态显示要不断时刻扫描,未松手时会停在此所以要加

//PORTD=0x01;//只点亮一个二极管

key_num=1;//当第一个松手时显示1

}

}

if(RB1==0)//检测如果s18等于0,这是第二个按键

{

delay(10);//去抖

if(RB1==0)//再一次检测s18是否等于0

{

didi(2);//第二个按下时响两声

while(!RB1)//要等按键松手,即松手检测,当按键按下则为0再非0为真会一直停在此,当松手后为假会继续下面的程序

disp(key_num,2,3,4,5,6);//当按下时也要进行数码扫描,因为动态显示要不断时刻扫描,未松手时会停在此所以要加

//PORTD=0x02;//只点亮一个二极管

key_num=2;//当第二个时显示2

}

}

if(RB2==0)//检测如果s19等于0,这是第三个按键

{

delay(10);//去抖

if(RB2==0)//再一次检测s19是否等于0

{

didi(3);//第三个按下时响3声

while(!RB2)//要等按键松手,即松手检测,当按键按下则为0再非0为真会一直停在此,当松手后为假会继续下面的程序

disp(key_num,2,3,4,5,6);//当按下时也要进行数码扫描,因为动态显示要不断时刻扫描,未松手时会停在此所以要加

//PORTD=0x04;//只点亮一个二极管

key_num=3;//当第三个显示3

}

}

if(RB3==0)//检测如果s20等于0,这是第四个按键

{

delay(10);//去抖

if(RB3==0)//再一次检测s20是否等于0

{

didi(4);//第一个按下时响4声

while(!RB3)//要等按键松手,即松手检测,当按键按下则为0再非0为真会一直停在此,当松手后为假会继续下面的程序

disp(key_num,2,3,4,5,6);//当按下时也要进行数码扫描,因为动态显示要不断时刻扫描,未松手时会停在此所以要加

//PORTD=0x08;//只点亮一个二极管

key_num=4;//当第四个显示4

}

}

}

void didi(uchar num)//蜂鸣器程序,num表示响多少声

{

uchar di_num;

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

{

RE0=1;//蜂鸣器响

delay(100);//响100ms

RE0=0;//蜂鸣器关闭

delay(50);//关闭50ms

}

}

void disp(uchar num1,uchar num2,uchar num3,uchar num4,uchar num5,uchar num6)//数码管的扫描函数,要在里面有6个变量,每一个为一个数码管显示的数

{

PORTD=table[num1];//调用数码管的显示函数(注第一个是显示0)这是第一个数码管要显示的段选

PORTA=0x20;//00100000由原理图可得第一个数码管是由RA5控制位选的

delay(10);//因为是要动态,所以要加延时,但时间不能太长

PORTD=table[num2];//调用数码管的显示函数(注第一个是显示0)这是第二个数码管要显示的段选

PORTA=0x10;//00010000由原理图可得第二个数码管是由RA4控制位选的

delay(10);//因为是要动态,所以要加延时,但时间不能太长

PORTD=table[num3];//调用数码管的显示函数(注第一个是显示0)这是第三个数码管要显示的段选

PORTA=0x08;//00001000由原理图可得第三个数码管是由RA3控制位选的

delay(10);//因为是要动态,所以要加延时,但时间不能太长

PORTD=table[num4];//调用数码管的显示函数(注第一个是显示0)这是第四个数码管要显示的段选

PORTA=0x04;//00000100由原理图可得第四个数码管是由RA2控制位选的

delay(10);//因为是要动态,所以要加延时,但时间不能太长

PORTD=table[num5];//调用数码管的显示函数(注第一个是显示0)这是第五个数码管要显示的段选

PORTA=0x02;//00000010由原理图可得第五个数码管是由RA1控制位选的

delay(10);//因为是要动态,所以要加延时,但时间不能太长

PORTD=table[num6];//调用数码管的显示函数(注第一个是显示0)这是第六个数码管要显示的段选

PORTA=0x01;//00000001由原理图可得第六个数码管是由RA0控制位选的

delay(10);//因为是要动态,所以要加延时,但时间不能太长

}来自:求助得到的回答

相关阅读推荐:

精彩图文

猜你还喜欢

电脑数码美食烹饪健康养生时尚美容情感家庭游戏攻略职场理财生活技巧体育运动 游戏/数码写作指南 办事指南 生活/家居1 健康/养生 职场/理财 爱好/休闲 时尚/美容 美食/营养 教育/学习 家庭/情感 全部科学节气电脑网络体育运动医疗健康游戏社会民生文化艺术电子数码娱乐休闲商业理财教育科学生活烦恼资源共享其它 A B C D12002000400060008000E F G H I J K L M N O P Q R S T U V W X Y Z 0-9 A1

热门推荐