欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 按下矩陣鍵盤中的16個按鍵,依次在數(shù)碼管上顯示1~16的平方, 如按下第一個按鍵顯示1... [打印本頁]

作者: cnbr    時間: 2020-6-4 17:51
標(biāo)題: 按下矩陣鍵盤中的16個按鍵,依次在數(shù)碼管上顯示1~16的平方, 如按下第一個按鍵顯示1...

請各位大佬幫忙看看,為什么這個程序在proteus中不能顯示256

#include<reg52.h>
#define uint unsigned int//宏定義
#define uchar unsigned char//宏定義
sbit wela=P2^7;//數(shù)碼管位選鎖存端
sbit dula=P2^6;//數(shù)碼管段選鎖存端
uchar disnum,temp,key,num;
uchar keyscan();  //鍵盤掃描函數(shù)聲明
display(uchar);
delay (uchar);  //延時函數(shù)聲明
uchar code table_du[]={0x3f,0x06,0x5b,0x4f,
                       0x66,0x6d,0x7d,0x07,
                       0x7f,0x6f,0x77,0x7c,
                       0x39,0x5e,0x79,0x71,0};
void main()
{
disnum=256;
while(1)
{
   num=keyscan();  //用num讀取矩陣鍵盤掃描函數(shù)的返回值
   display(num);  //數(shù)碼管顯示
   
}
}
uchar keyscan()  //矩陣鍵盤掃描函數(shù)
{
  P3=0xf0;//讓P3.0,P3.1,P3.2,P3.3等于0,P3.4,P3.5,P3.6,P3.7等于1
  temp=P3;//用temp讀取P3口當(dāng)前的值
  temp=temp&0xf0;//把temp的值和0xf0作與運(yùn)算,即保持高4位變,低4位為0
  if(temp!=0xf0)//如果此時的temp不等于0xf0,說明有按鍵被按下了
  {
   delay(10);//延時約10ms
   if(temp!=0xf0)//再次判斷是否真的有按鍵按下(即消除前沿抖動)
   {
    temp=P3;//如果有按鍵按下,temp重新讀取P3口的值
    temp=temp|0x0f;//作按位或,即保持高4位不變,低4位為1
    P3=temp;//把temp的值賦給P3口
    key=P3;//然后用key讀取P3口的值,作為按鍵的鍵值
    switch(key)//讓每一個鍵值和數(shù)碼管顯示的數(shù)對應(yīng)起來
    {
     case 0xee:disnum=1;//當(dāng)key的值為0xee時,disnum的值為1
      break;
     case 0xde:disnum=4;//當(dāng)key的值為0xde時,disnum的值為4
      break;
     case 0xbe:disnum=9;
      break;
     case 0x7e:disnum=16;
      break;
     case 0xed:disnum=25;
      break;
     case 0xdd:disnum=36;
      break;
     case 0xbd:disnum=49;
      break;
     case 0x7d:disnum=64;
      break;
     case 0xeb:disnum=81;
      break;
     case 0xdb:disnum=100;
      break;
     case 0xbb:disnum=121;
      break;
     case 0x7b:disnum=144;
      break;
     case 0xe7:disnum=169;
      break;
     case 0xd7:disnum=196;
      break;
     case 0xb7:disnum=225;
      break;
     case 0x77:disnum=256;
      break;
    }
   }
  }
return disnum;
}
display(uchar disnum)  //數(shù)碼管顯示函數(shù)
{
wela=1;
P0=0xfe;  //第1個數(shù)碼管位選
wela=0;
dula=1;
P0=table_du[disnum/100];  //百位上的數(shù)
dula=0;
P0=0xff;
delay(10);
wela=1;
P0=0xfd;  //第2個數(shù)碼管位選
wela=0;
dula=1;
P0=table_du[disnum%100/10];  //十位上的數(shù)
dula=0;
P0=0xff;
delay(10);
wela=1;
P0=0xfb;  //第3個數(shù)碼管位選
wela=0;
dula=1;
P0=table_du[disnum%100%10];  //個位上的數(shù)
dula=0;
P0=0xff;
delay(10);
}
delay(uchar x)
{
uchar a,b;
  for(a=x;a>0;a--)
      for(b=200;b>0;b--);
}


作者: wulin    時間: 2020-6-4 21:46
定義uchar disnum,temp,key,num;  賦值 disnum=256; uchar型數(shù)據(jù)最大255,256就是0。
http://m.raoushi.com/bbs/dpj-189135-1.html

作者: xianfajushi    時間: 2020-6-5 11:06
可參http://m.raoushi.com/bbs/forum.p ... mp;page=1#pid866317
作者: xianfajushi    時間: 2020-6-5 11:18
4*4=32按鍵鍵盤掃描,實(shí)現(xiàn)鍵值平方,使用一片鎖存器實(shí)現(xiàn)8位數(shù)碼管驅(qū)動。


作者: xianfajushi    時間: 2020-6-5 13:25
本帖最后由 xianfajushi 于 2020-6-5 16:26 編輯

由于程序的選擇分支,可復(fù)用P1口,同時使用獨(dú)立鍵盤的高電平部分。硬件與程序配合,由于鍵盤不常使用,可以作為鎖存器的使能控制,從而節(jié)約IO口的占用。



作者: cnbr    時間: 2020-6-5 13:42
wulin 發(fā)表于 2020-6-4 21:46
定義uchar disnum,temp,key,num;  賦值 disnum=256; uchar型數(shù)據(jù)最大255,256就是0。
http://www.51hei.co ...

好的,謝謝
作者: 烈火    時間: 2020-6-5 15:50
使用uint的變量,定義uchar disnum,temp,key,num;就可以了




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1