欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
求51單片機矩陣鍵盤輸入,四位共陰數碼管簡易計算機程序及仿真
[打印本頁]
作者:
ZnS丶
時間:
2017-4-21 10:58
標題:
求51單片機矩陣鍵盤輸入,四位共陰數碼管簡易計算機程序及仿真
要求能做兩位數的加減乘除
作者:
cjjcjj1
時間:
2017-4-21 22:34
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
Bigbing1213
時間:
2017-4-22 05:40
/*********************************************************************************
*實驗名 :矩陣鍵盤掃描 數碼管顯示
*實驗效果 :按S1-S16矩陣按鍵,數碼管8位依次顯示0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
*
*********************************************************************************/
#include<reg52.h>
#include"bstv51.h"
uchar code table[17]={0x3f , 0x06 , 0x5b ,0x4f , 0x66 , 0x6d ,0x7d ,
0x07 , 0x7f , 0x6f ,0x77 , 0x7c , 0x39 ,
0x5e , 0x79 , 0x71 , 0x00}; //0-9&A-F&“不顯示” 字型碼
void delay(uint xms) //延遲xms
{
uint i,j;
for(i=xms;i>0;i--)
for(j=112;j>0;j--);
}
void display(uchar num) //數碼管顯示函數
{
P0=table[num]; //段選
DU=1;
DU=0;
}
void keyscan4x4()
{
uchar temp,key;
///////////////第一行掃描///////////////////
P3=0xfe;//1111 1110 讓P3.0口輸出低
temp=P3;
temp=temp&0xf0;//1111 0000 位與操作 屏蔽后四位
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee: //1110 1110 S1被按下
key=0;
break;
case 0xde: //1101 1110 S2被按下
key=1;
break;
case 0xbe: //1011 1110 S3被按下
key=2;
break;
case 0x7e: //0111 1110 S4被按下
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
///////////////第二行掃描///////////////////
P3=0xfd;//1111 1101 讓P3.1口輸出低
temp=P3;
temp=temp&0xf0;//1111 0000 位與操作 屏蔽后四位
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed: //1110 1101 S5被按下
key=4;
break;
case 0xdd: //1101 1101 S6被按下
key=5;
break;
case 0xbd: //1011 1101 S7被按下
key=6;
break;
case 0x7d: //0111 1101 S8被按下
key=7;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
///////////////第三行掃描///////////////////
P3=0xfb;//1111 1011 讓P3.2口輸出低
temp=P3;
temp=temp&0xf0;//1111 0000 位與操作 屏蔽后四位
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb: //1110 1011 S9被按下
key=8;
break;
case 0xdb: //1101 1011 S10被按下
key=9;
break;
case 0xbb: //1011 1011 S11被按下
key=10;
break;
case 0x7b: //0111 1011 S12被按下
key=11;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
///////////////第四行掃描///////////////////
P3=0xf7;//1111 0111 讓P3.0口輸出低
temp=P3;
temp=temp&0xf0;//1111 0000 位與操作 屏蔽后四位
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7: //1110 0111 S13被按下
key=12;
break;
case 0xd7: //1101 0111 S14被按下
key=13;
break;
case 0xb7: //1011 0111 S15被按下
key=14;
break;
case 0x77: //0111 0111 S16被按下
key=15;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
}
void main()
{
bstv51_init(); //學習板初始化
P0=0; //位選 鎖存為8位同時顯示
WE=1;
WE=0;
while(1)
{
keyscan4x4();
}
}
/*********************************************************************
*
* bstv51.c
*
*********************************************************************
* 描 述: BST-V51開發板初始化
* 開發平臺: BST-V51開發板+KEIL C51
********************************************************************/
#include <reg52.h>/*包含51系統頭文件*/
#include "bstv51.h"/*包含BST-V51開發板頭文件*/
/*BST-V51主板初始化函數*/
void bstv51_init(void)
{
/* 引腳方向、輸出初值定義 */
FM=1;/*蜂鳴器*/
EN=0;/*讓LCD1602數據口處于輸入狀態,相當于LCD1602使不能,讓其釋放數據總線*/
CS=1;/*TF卡使不能*/
RST=0;/*ds1302使不能*/
}
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1