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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5612|回復: 6
打印 上一主題 下一主題
收起左側

按下矩陣鍵盤中的16個按鍵,依次在數碼管上顯示1~16的平方, 如按下第一個按鍵顯示1...

[復制鏈接]
跳轉到指定樓層
#

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

#include<reg52.h>
#define uint unsigned int//宏定義
#define uchar unsigned char//宏定義
sbit wela=P2^7;//數碼管位選鎖存端
sbit dula=P2^6;//數碼管段選鎖存端
uchar disnum,temp,key,num;
uchar keyscan();  //鍵盤掃描函數聲明
display(uchar);
delay (uchar);  //延時函數聲明
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讀取矩陣鍵盤掃描函數的返回值
   display(num);  //數碼管顯示
   
}
}
uchar keyscan()  //矩陣鍵盤掃描函數
{
  P3=0xf0;//讓P3.0,P3.1,P3.2,P3.3等于0,P3.4,P3.5,P3.6,P3.7等于1
  temp=P3;//用temp讀取P3口當前的值
  temp=temp&0xf0;//把temp的值和0xf0作與運算,即保持高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)//讓每一個鍵值和數碼管顯示的數對應起來
    {
     case 0xee:disnum=1;//當key的值為0xee時,disnum的值為1
      break;
     case 0xde:disnum=4;//當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)  //數碼管顯示函數
{
wela=1;
P0=0xfe;  //第1個數碼管位選
wela=0;
dula=1;
P0=table_du[disnum/100];  //百位上的數
dula=0;
P0=0xff;
delay(10);
wela=1;
P0=0xfd;  //第2個數碼管位選
wela=0;
dula=1;
P0=table_du[disnum%100/10];  //十位上的數
dula=0;
P0=0xff;
delay(10);
wela=1;
P0=0xfb;  //第3個數碼管位選
wela=0;
dula=1;
P0=table_du[disnum%100%10];  //個位上的數
dula=0;
P0=0xff;
delay(10);
}
delay(uchar x)
{
uchar a,b;
  for(a=x;a>0;a--)
      for(b=200;b>0;b--);
}

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

使用道具 舉報

6#
ID:744327 發表于 2020-6-5 15:50 | 只看該作者
使用uint的變量,定義uchar disnum,temp,key,num;就可以了
回復

使用道具 舉報

5#
ID:729260 發表于 2020-6-5 13:42 | 只看該作者
wulin 發表于 2020-6-4 21:46
定義uchar disnum,temp,key,num;  賦值 disnum=256; uchar型數據最大255,256就是0。
http://www.51hei.co ...

好的,謝謝
回復

使用道具 舉報

地板
ID:332444 發表于 2020-6-5 13:25 | 只看該作者
本帖最后由 xianfajushi 于 2020-6-5 16:26 編輯

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


回復

使用道具 舉報

板凳
ID:332444 發表于 2020-6-5 11:18 | 只看該作者
4*4=32按鍵鍵盤掃描,實現鍵值平方,使用一片鎖存器實現8位數碼管驅動。

回復

使用道具 舉報

沙發
ID:332444 發表于 2020-6-5 11:06 | 只看該作者
回復

使用道具 舉報

樓主
ID:213173 發表于 2020-6-4 21:46 | 只看該作者
定義uchar disnum,temp,key,num;  賦值 disnum=256; uchar型數據最大255,256就是0。
http://www.zg4o1577.cn/bbs/dpj-189135-1.html
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区av| 天天干天天草 | 欧美日韩一区二区三区不卡视频 | 国产精品福利在线观看 | 超碰在线人人干 | 亚洲欧美精品国产一级在线 | 亚洲 欧美 日韩 在线 | 久久久观看| 亚洲精品电影网在线观看 | 91亚洲国产成人精品一区二三 | 久久久人 | 黄色网页在线观看 | 精品国产乱码久久久久久蜜退臀 | 色橹橹欧美在线观看视频高清 | 一级欧美黄色片 | 成人小视频在线观看 | 亚洲精品乱码久久久久久按摩观 | 久久久久网站 | 国产美女黄色 | 久久不射网 | 精国产品一区二区三区四季综 | 亚洲成人福利视频 | 亚洲激情第一页 | 日韩中文一区二区三区 | 亚洲 欧美 日韩 精品 | 九九热在线免费视频 | 国产精品久久久久久久岛一牛影视 | 国产一区h| 日韩在线91 | 日韩av在线一区二区 | 亚洲第一av网站 | 二区在线观看 | www.日本精品 | 热久久免费视频 | 欧美综合久久久 | 九九热在线精品视频 | 久久成人精品一区二区三区 | 国产精品久久久久久久午夜片 | 国产精品久久久久久久久久 | 国产精品久久久久久久7电影 | 欧美中文字幕 |