单片机C语言 键盘编程问题 做的 关于密码锁 数码管显示 希望解答 大侠们!!!!!!

作者&投稿:博蚀 (若有异议请与网页底部的电邮联系)
单片机C语言 键盘编程问题 做的 关于密码锁 数码管显示 希望解答 大侠们!!!!!!!!!!!!!!!!~

你的main中 while(1){},这是一个永远循环而不会退出的条件判断,除非循环体中加入Break语句。
C语言的main函数是单片机上电后start.ASM(编译器自动生成文件)处理后跳转的地址。
因此main函数中,首先第一步是初始化(I/O口,寄存器,变量等),然后进入while循环体中。
在while循环体中,加入 按键管理主程序,显示管理主程序,其他模块管理主程序。

而你的情况好像是要确认开机密码?你可以在这个while前再加一个while
main()
{
init();
f_PassWordOK=true;
while(f_PassWordOK)
{
keyscan();
Display(****);
PasswordCheck();
}
while(1)
{
keyscan();
Display(****);
。。。
}
}
void PasswordCheck(void)
{
if(密码正确){
f_PassWordOK=false;
}
}

你好!程序什么时候要?是仿真实现吗

给你个框架看看
#define N 4
#dfeine INPUT 12
#define CHG 13
#define CONFIRM 14
#define idle 0
#define inputpass 1
#define chgpass 2
#define waitconfirm 3
#define end 4

unsigned char keyscan()
{
unsigned char key,tempkey;
//get key
//delay()
//confirm key
//return key
}

void show_Led(/***/)
{
//show something on leds
}

void main(void)
{
unsigned char State = idle,Key_Value,Pass[4] = {0},passCNT;
while(1)
{
Key_Value = keyscan();
switch(State)
{
case idle:{
if(INPUT == Key_Value) State = inputpass;
if(ICHG == Key_Value) State = chgpass;
State = idle;
show_Led(/*idle*/);
break;
}
case inputpass:{

if(/*Key_Value != CHG && != INPUT* && passCNT++ < N/)
{/*get pass into Pass[] & show_Led()*/}
else
{
if(passCNT == N)
{
State = waitconfirm;
}
else
{
State = idle; /*state error!*/
show_Led(/*error then idle*/);
}
}
break;
}
case chgpass:{
/*see inputpass*/
}
case waitconfirm:{
if(CONFIRM == Key_value){State = end ;};
else{/*if timeout( State = idle)*/}
break;
}
case end:{
/* add do pass check*/

}
default :{
State = idle;
show_Led(/*idle*/);
break;
}
}
}
}

你把按键扫描写成一个子程序,,然后再主程序当中不停的循环扫描,,。。


咸丰县17219029761: 单片机C语言 键盘编程问题 做的 关于密码锁 数码管显示 希望解答 大侠们!!!!!! -
傅通威赛: 给你个框架看看#define N 4#dfeine INPUT 12#define CHG 13#define CONFIRM 14#define idle 0#define inputpass 1#define chgpass 2#define waitconfirm 3#define end 4unsigned char keyscan(){ unsigned char key,tempkey; //get key //delay() //...

咸丰县17219029761: 单片机c语言编程在键盘检测方面 -
傅通威赛: P3 = 0xFE; Temp = P3; Temp = Temp & 0xF0; Delay(5); // 延时去抖动,按键在按下后,会出现锯齿波,如果不延时的话,你俺一下按键,相当于俺好几下按键,加上延时后,把按键产生的抖动去掉. P3 = 0xFE; Temp = P3; Temp = Temp & 0xF0;

咸丰县17219029761: 通过键盘往单片机中输入任意数字的C语言程序? -
傅通威赛: 我玩的pic相信51应该也差不多我整理一下发 #include unsigned char code table[]={0x3f,0x06,0x5b,0x4f, //01230x66,0x6d,0x7d,0x07, //45670x7f,0x6f,0x77,0x7c, //89ab0x39,0x5e,0x79,0x71}; //cdef unsigned char temp; unsigned char key; unsigned ...

咸丰县17219029761: 单片机的c语言,编写了一个键盘的按键函数 -
傅通威赛: 首先是按键需要防抖 其次,要检测按键是否放开.如果是瞬间跳几下就加防抖 按下键就跳,判断键盘改变

咸丰县17219029761: 单片机C语言按键控制LED编程3个问题 *(自学菜鸟) -
傅通威赛: #include sbit K1 = P0^0; sbit K2 = P0^1; sbit K3 = P0^2; void main (void) { while(1) { switch(P0&0x07) { case 0x06:P2=0xAA;break; case 0x05:P2=0X55;break; case 0x03:P2=0x00;break; default :P2=0xff;break; } } }

咸丰县17219029761: 单片机 C语言 矩阵键盘做特殊功能 该怎样编 各位大神帮帮忙提供1些思路 感激不尽
傅通威赛: 用逐行扫描或反转法判断按键键值,然后根据键值再履行对应功能程序的编写,可以用分支语句实现.

咸丰县17219029761: 单片机独立按键编程问题 -
傅通威赛: 基本上你的程序有一个架构上的问题.正常单片机的程序是需要无限循环的, 而main函数在C语言中, 只是会被作业系统呼叫, 执行完成后返回作业系统. 单片机中, 虽然没有作业系统, 但是其实还是应该注意让程序不要进行返回(未定义状态), 我们称之为, 主回圈.void main() { while(1) { // 主要循环程序 } } 至於你提到的功能, 就是一个循环执行的结果.

咸丰县17219029761: 单片机C语言或汇编如何编写一个独立键盘带自锁循环的程序 -
傅通威赛: sbit key; LED P1^0;void delay() {unsigned char i=20;while(i--); } void main () { LED=1; //熄灭while (1){ if(key==0) { delay(); LED=~LED; delay(); } }

咸丰县17219029761: 单片机矩阵扫描键盘问题 C语言 -
傅通威赛: 每个switch语句后加一句 while(temp!=0x0f) { temp=P3; temp=temp&0xf0; } 即:按键松手检测

咸丰县17219029761: 单片机矩阵键盘C程序 -
傅通威赛: //P2为你键盘 的IO口 unsigned char keyscan() { unsigned char temp,key; P2=0xf0; temp=P2; if(temp!=0xf0) { delay(10); if(temp!=0xf0) { temp|=0x0f; P2=temp; key=P2; while(P2!=temp)//松手检测 { P2=temp; } return key;//返回键码 } } }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网