標(biāo)題:
單片機(jī)簡(jiǎn)單撥號(hào)鍵盤(pán)的仿真設(shè)計(jì)
[打印本頁(yè)]
作者:
芒果芒果
時(shí)間:
2017-12-5 20:46
標(biāo)題:
單片機(jī)簡(jiǎn)單撥號(hào)鍵盤(pán)的仿真設(shè)計(jì)
簡(jiǎn)單撥號(hào)鍵盤(pán)仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(14.46 KB, 下載次數(shù): 62)
下載附件
2017-12-5 23:05 上傳
0.png
(16.02 KB, 下載次數(shù): 52)
下載附件
2017-12-5 23:05 上傳
單片機(jī)源程序如下:
#include<Reg52.h>
int SELECT[8]={0X7F,0XBF,0XDF,0XEF,0XF7,0XFB,0XFD,0XFE}; //位選數(shù)組
int LED[17]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71,0X40};
//LED數(shù)碼管字形碼集合數(shù)組
int SELECT1[2][4]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};//篩選異或結(jié)果集合數(shù)組
int DISPLAY[8]={0X40,0X40,0X40,0X40,0X40,0X40,0X40,0X40};//初始化顯示數(shù)組
int flag;
void delay(int ms)
{
int i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
//延時(shí)函數(shù) (1ms)
void display(int wei,int L[])//wei為位選數(shù)目
{
int k;
for(k=0;k<wei;k++){
P0=SELECT[wei-1-k];
P2=L[k];
delay(1);
P2=0X00;//消隱
}
}//顯示函數(shù)——P0位選,P2段選
int button(int pp,int new)//p1為0X0F(篩選行)或0XF0(篩選列)
{ int a,p,q,m;//new為當(dāng)前P1端口按鍵狀態(tài),a為異或結(jié)果,p、q為循環(huán)計(jì)數(shù)變量,m為所在行、列
if(new==pp)
{flag=0;return flag;} //未有按鍵按下標(biāo)志
else{
delay(1);
if(new!=pp)
{
a=new^pp;
for(p=0;p<2;p++)
for(q=0;q<4;q++)
if(SELECT1[p][q]==a) m=q+1; //遍歷異或結(jié)果集合數(shù)組后找到所在行、列
}
return m;
}//篩選出行或列
}//判斷按鍵所在行列位置,P1為按鍵接口端
void main()
{ int x,y,sum,n,temp;//x為行,y為列,sum為鍵值
while(1){
P1=0X0F;temp=P1;
x=button(0X0F,temp);
P1=0XF0;temp=P1;//用于判斷是否是新的按鍵值
y=button(0XF0,temp);
if(y==0)
display(8,DISPLAY);
else{
flag++;
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
任務(wù)十:簡(jiǎn)單撥號(hào)鍵盤(pán)設(shè)計(jì).rar
(52.29 KB, 下載次數(shù): 46)
2017-12-5 20:45 上傳
點(diǎn)擊文件名下載附件
C51單片機(jī)
下載積分: 黑幣 -5
作者:
kanadexiw
時(shí)間:
2021-1-3 22:10
大佬能解釋一下如何實(shí)現(xiàn)強(qiáng)推挽輸出嗎
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1