久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 7940|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

我做51單片機(jī),矩陣鍵盤輸入,想輸入4位數(shù),并在數(shù)碼管上顯示出來,我的程序哪里不...

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:65696 發(fā)表于 2014-9-2 18:15 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

鍵盤掃描函數(shù),顯示函數(shù)都沒問題,都測(cè)試過了,就主函數(shù)那一塊,一直調(diào)試不出來,要實(shí)現(xiàn)的功能就是由鍵盤輸入,比如說輸入2345,就在鍵盤上分別按2345鍵,然后由數(shù)碼管顯示出來

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

sbit wela=P2^7;

sbit dula=P2^6;

uchar temp,num,num1,bitnum=0,i,flag;

uint value,temp1=1;

uchar keybuffer[4];

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

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

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

0x39,0x5e,0x79,0x71};


void delay(x)

{

uint a,b;

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

for(b=110;b>0;b--);

}


void display(uint num)

{

uchar ge,shi,bai,qian;

ge=num%10;

shi=num%100/10;

bai=num%1000/100;

qian=num/1000;


wela=1;

P0=0xf7;

wela=0;

dula=1;

P0=table[ge];

dula=0;

delay(5);


wela=1;

P0=0xfb;

wela=0;

dula=1;

P0=table[shi];

dula=0;

delay(5);


wela=1;

P0=0xfd;

wela=0;

dula=1;

P0=table[bai];

dula=0;

delay(5);


wela=1;

P0=0xfe;

wela=0;

dula=1;

P0=table[qian];

dula=0;

delay(5);


}


uchar keyscan()

{


P1=0xfe;

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xee:num=1;flag=1;

break;

case 0xde:num=2;flag=1;

break;

case 0xbe:num=3;flag=1;

break;

case 0x7e:num=4;flag=1;

break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

}

}


P1=0xfd;

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xed:num=5;flag=1;

break;

case 0xdd:num=6;flag=1;

break;

case 0xbd:num=7;flag=1;

break;

case 0x7d:num=8;flag=1;

break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

}

}


P1=0xfb;

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xeb:num=9;flag=1;

break;

case 0xdb:num=10;flag=1;

break;

case 0xbb:num=11;flag=1;

break;

case 0x7b:num=12;flag=1;

break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

}

}


P1=0xf7;

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xe7:num=13;flag=1;

break;

case 0xd7:num=14;flag=1;

break;

case 0xb7:num=15;flag=1;

break;

case 0x77:num=16;flag=1;

break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

}

}

return num;

}


void main()

{

while(1)

{


while(num1<10&bitnum<4)

{

num1=keyscan();

keybuffer[bitnum]=num1;

if(flag==1)

{

bitnum++;

flag=0;

}

}

for(i=0;i<bitnum;i++)

{

value=keybuffer[bitnum-i]*temp1+value;

temp1=temp1*10;

}   

display(value);

}

}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2014-9-2 18:29 來自手機(jī) | 只看該作者
你現(xiàn)在這個(gè)程序按鍵以后,顯示屏上面有反應(yīng)嗎
回復(fù)

使用道具 舉報(bào)

板凳
ID:63656 發(fā)表于 2014-9-3 11:01 | 只看該作者
本帖最后由 2842687945 于 2014-9-3 11:08 編輯

#include "reg52.h"
typedef unsigned int uint16;
typedef unsigned char uint8;
void main()
        {
                uint8 d;
                P1 = 0xff;//初始化P1口
                while(1)
                {
                        P1 = 0xfe;//第一行鍵,1111 1110        
                        //第一行鍵的鍵碼的判斷               
                        d = P1;
                        switch(d)
                        {
                                case 0xee:P0 = 0x3f;break;
                                case 0xde:P0 = 0x06;break;
                                case 0xbe:P0 = 0x5b;break;
                                case 0x7e:P0 = 0x4f;break;
                        }
                        P1 = 0xfd;//第二行鍵,1111 1101
                        //第二行鍵的鍵碼的判斷
                        d = P1;
                        switch(d)
                        {
                                case 0xed:P0 = 0x66;break;
                                case 0xdd:P0 = 0x6d;break;
                                case 0xbd:P0 = 0x7d;break;
                                case 0x7d:P0 = 0x07;break;
                        }
                        P1 = 0xfb;//第三行鍵,1111 1011
                        //第三行鍵的鍵碼的判斷        
                        d = P1;
                        switch(d)
                        {
                                case 0xeb:P0 = 0x7f;break;
                                case 0xdb:P0 = 0x6f;break;
                                case 0xbb:P0 = 0x77;break;
                                case 0x7b:P0 = 0x7c;break;
                        }
                        P1 = 0xf7;//第四行鍵,1111 0111        
                        //第四行鍵的鍵碼的判斷
                        d = P1;
                        switch(d)
                        {
                                case 0xe7:P0 = 0x39;break;
                                case 0xd7:P0 = 0x5e;break;
                                case 0xb7:P0 = 0x79;break;
                                case 0x77:P0 = 0x71;break;
                        }
                }
        }
回復(fù)

使用道具 舉報(bào)

地板
ID:63656 發(fā)表于 2014-9-3 11:09 | 只看該作者
這個(gè)程序是我寫的,我試過了
回復(fù)

使用道具 舉報(bào)

5#
ID:65758 發(fā)表于 2014-9-3 16:09 | 只看該作者
2842687945 發(fā)表于 2014-9-3 11:01
#include "reg52.h"
typedef unsigned int uint16;
typedef unsigned char uint8;

他要實(shí)現(xiàn)的是連續(xù)按鍵4次,然后出現(xiàn)千位數(shù)。
回復(fù)

使用道具 舉報(bào)

6#
ID:65758 發(fā)表于 2014-9-3 16:50 | 只看該作者
我感覺你那個(gè) flag 沒起作用,  另你在初始化下 num1=0  flag=0,  另外如果你那按鍵大于9以上的話,會(huì)直接調(diào)出while大循環(huán),
回復(fù)

使用道具 舉報(bào)

7#
ID:65696 發(fā)表于 2014-9-3 21:04 | 只看該作者
hesongchuan 發(fā)表于 2014-9-3 16:50
我感覺你那個(gè) flag 沒起作用,  另你在初始化下 num1=0  flag=0,  另外如果你那按鍵大于9以上的話,會(huì)直接 ...

那你說我具體應(yīng)該怎么做呢
回復(fù)

使用道具 舉報(bào)

8#
ID:65696 發(fā)表于 2014-9-3 21:05 | 只看該作者
hesongchuan 發(fā)表于 2014-9-3 16:50
我感覺你那個(gè) flag 沒起作用,  另你在初始化下 num1=0  flag=0,  另外如果你那按鍵大于9以上的話,會(huì)直接 ...

那你說我具體應(yīng)該怎么做呢
回復(fù)

使用道具 舉報(bào)

9#
ID:65758 發(fā)表于 2014-9-5 18:02 | 只看該作者
本帖最后由 hesongchuan 于 2014-9-7 13:57 編輯
lx983625241 發(fā)表于 2014-9-3 21:05
那你說我具體應(yīng)該怎么做呢

這幾天忙,很簡(jiǎn)答  啊,swith case ,語句   case 0x7e:num=4,flag=1;    num 和flag用逗號(hào)不要分號(hào),  
把  num <=10的語句去掉,     另外while(num1<10&bitnum<5)  全局變量bitnum初值等于1。   

下面程序可以實(shí)現(xiàn)連續(xù)按鍵四次,出現(xiàn)一個(gè)千位數(shù),然后在按第十個(gè)鍵  ,數(shù)碼管關(guān)閉,實(shí)驗(yàn)下吧。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit wela=P2^1;
sbit dula=P2^2;
sbit sb=P3^5;//管段數(shù)碼管鍵 第十個(gè)鍵
uchar temp,num,num1,bitnum=1,i,flag;
uint value,temp1=1;
void display(uint z);
uchar keyscan();
uchar keybuffer[4];
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}

void display(uint z)
{
uchar ge,shi,bai,qian;
ge=z%10;
shi=z/10%10;
bai=z/100%10;
qian=z/1000%10;

wela=1;
P1=0xf7;
wela=0;
dula=1;
P1=table[ge];
dula=0;
delay(5);

wela=1;
P1=0xfb;
wela=0;
dula=1;
P1=table[shi];
dula=0;
delay(5);

wela=1;
P1=0xfd;
wela=0;
dula=1;
P1=table[bai];
dula=0;
delay(5);

wela=1;
P1=0xfe;
wela=0;
dula=1;
P1=table[qian];
dula=0;
delay(5);

}

uchar keyscan()
{

P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:num=1,flag=1;
break;
case 0xde:num=2,flag=1;
break;
case 0xbe:num=3,flag=1;
break;
case 0x7e:num=4,flag=1;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}

P3=0xfd;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:num=5,flag=1;
break;
case 0xdd:num=6,flag=1;
break;
case 0xbd:num=7,flag=1;
break;
case 0x7d:num=8,flag=1;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}

P3=0xfb;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:num=9,flag=1;
break;

}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}

return num;
}
void main()
{
while(1)
{
while(bitnum<5)
{
num1=keyscan();
keybuffer[bitnum]=num1;
if(flag==1)
{
bitnum++;
flag=0;
}
}
value=0;
for(i=4;i>0;i--)
{
value=keybuffer[bitnum-i]*temp1+value;
temp1=temp1*10;
}
temp1=1;
bitnum=0;
sb=1;
while(sb==1)     //未按管段鍵,一直執(zhí)行顯示程序。
{
display(value);
}
wela=1;
P1=0xff;
wela=0;
}
}


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91一区二区 | 中文在线一区二区 | 美女高潮网站 | 久色网| 精品不卡| 色视频成人在线观看免 | 激情av网站 | 国产一区二区三区在线 | 九九综合九九 | 草久久| 色播av| 国产欧美精品一区二区色综合朱莉 | 久久国产精品免费一区二区三区 | 日韩毛片 | 国产日韩精品一区二区三区 | 国产在线一区二区 | 欧美亚州综合 | 亚洲精品国产成人 | 91一区二区三区 | 国产精品99久久久久久久vr | 精品亚洲一区二区三区 | 国产一区免费 | 日日操操 | 欧美黄在线观看 | 国产人免费人成免费视频 | 亚洲精品在线免费 | 国产高清视频一区 | 欧美一区二区三区 | 亚洲午夜精品一区二区三区他趣 | 久久久91精品国产一区二区三区 | 国产福利在线 | 干干干操操操 | 亚洲免费在线观看 | 丝袜 亚洲 另类 欧美 综合 | 国产精品欧美精品 | 亚洲欧洲精品在线 | 中文字幕在线观看av | aaa精品 | 91av视频在线免费观看 | 午夜激情小视频 | 国产成人精品区一区二区不卡 |