程序思路與缺陷參考:51單片機(AT89C52)矩陣鍵盤檢測程序
#include
typedef unsigned char uchar;
typedef unsigned int uint;
#define dula_h PORTD|=0x01
#define dula_l PORTD&=0xfe
#define wela_h PORTD|=0x02
#define wela_l PORTD&=0xfd
#define keyport PORTB
#define keypin (PINB)
#define keydre DDRB
#define keystate0 0 //按鍵確認狀態(tài)
#define keystate1 1 //按鍵無動作狀態(tài)
char keystate=1; //按鍵狀態(tài)初始化為按鍵無動作狀態(tài)
uchar keynum=0;
void delayms(uint z) //1ms
{
uint x,y;
for(x=z;x>0;x--)
for(y=157;y>0;y--);
}
uchar table[]={ //共陽數(shù)碼管
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
void smg(void)
{
dula_l;
wela_l;
PORTC=0x01;
wela_h;
wela_l;
PORTC=table[keynum];
dula_h;
dula_l;
delayms(1);
PORTC=0x02;
wela_h;
wela_l;
PORTC=table[keynum];
dula_h;
dula_l;
delayms(1);
PORTC=0x04;
wela_h;
wela_l;
PORTC=table[keynum];
dula_h;
dula_l;
delayms(1);
PORTC=0x08;
wela_h;
wela_l;
PORTC=table[keynum];
dula_h;
dula_l;
delayms(1);
PORTC=0x10;
wela_h;
wela_l;
PORTC=table[keynum];
dula_h;
dula_l;
delayms(1);
PORTC=0x20;
wela_h;
wela_l;
PORTC=table[keynum];
dula_h;
dula_l;
delayms(1);
PORTC=0x40;
wela_h;
wela_l;
PORTC=table[keynum];
dula_h;
dula_l;
delayms(1);
PORTC=0x80;
wela_h;
wela_l;
PORTC=table[keynum];
dula_h;
dula_l;
delayms(1);
}
void keyscan(void)
{
uchar temp1,temp2,column,row;
switch(keystate)
{
case keystate0: //keystate0,按鍵按下確認狀態(tài),下一狀態(tài)為keystate1(按鍵無動作狀態(tài))
keydre=0xff;
keyport=0x0f;
keydre=0xf0;
temp1=keypin;
keydre=0xff;
keyport=0xf0;
keydre=0x0f;
temp2=keypin;
if((temp1|temp2)!=0xff)
{
temp1|=temp2;
if(!(temp1&0x80))
row=3;
else
if(!(temp1&0x40))
row=2;
else
if(!(temp1&0x20))
row=1;
else
if(!(temp1&0x10))
row=0;
if(!(temp1&0x08))
column=3;
else
if(!(temp1&0x04))
column=2;
else
if(!(temp1&0x02))
column=1;
else
if(!(temp1&0x01))
column=0;
keynum=column*4+row;
while(!(keyport==0x0f|keyport==0xf0));
keystate=keystate1;
break;
}
else
keystate=keystate1;
break;
case keystate1: //keystate1,按鍵無動作狀態(tài),下一狀態(tài)為keystate0(按鍵無動作狀態(tài))
keydre=0xff;
keyport=0x0f; //輸出0x0f
keydre=0xf0;
temp1=keypin;
keydre=0xff;
keyport=0xf0; //輸出0xf0
keydre=0x0f;
temp2=keypin;
if((temp1|temp2)!=0xff)
{
keystate=keystate0;
}
else
keystate=keystate1;
break;
}
}
void main(void)
{
DDRC=0xff;
DDRD|=0x03;
while(1)
{
keyscan();
smg();
}
}
上一篇:IAR FOR AVR中精確軟件延時方法
下一篇:AVR 看門狗使用
推薦閱讀
史海拾趣
隨著市場的不斷變化和競爭的加劇,艾華集團意識到,要想在行業(yè)中立足并取得長遠發(fā)展,必須走科技創(chuàng)新之路。于是,公司成立了多個研究院,專注于基礎材料、產(chǎn)品、工業(yè)裝備以及產(chǎn)品應用的研究。通過不斷的科技創(chuàng)新和產(chǎn)品升級,艾華集團成功研發(fā)出了耐超高紋波和耐超強沖擊電流的鋁電容器技術,這一技術在市場上獲得了廣泛認可,贏得了飛利浦、歐司朗、GE等世界知名照明客戶的青睞。
近年來,Herga公司緊跟智能制造的發(fā)展趨勢,大力推動生產(chǎn)線的自動化和智能化升級。公司引入了先進的機器人、自動化設備和智能管理系統(tǒng),實現(xiàn)了從原材料采購、生產(chǎn)加工到成品檢驗的全流程自動化控制。這一舉措不僅大大提高了生產(chǎn)效率和質(zhì)量穩(wěn)定性,還降低了人力成本和運營風險。Herga公司的智能制造實踐為電子行業(yè)樹立了典范,也為公司的持續(xù)發(fā)展注入了新的動力。
在人才方面,啟臣微一直把人才作為公司發(fā)展的核心驅(qū)動力。公司建立了一套完善的人才培養(yǎng)機制,為員工提供廣闊的職業(yè)發(fā)展空間和良好的工作環(huán)境。同時,公司還積極引進國內(nèi)外優(yōu)秀人才,為公司的創(chuàng)新發(fā)展注入了新的活力。這些優(yōu)秀人才的加入,不僅提升了公司的技術水平和管理能力,也為公司的發(fā)展注入了新的動力。
FIDELIX公司成立于1990年,是一家專注于存儲芯片研發(fā)與銷售的韓國企業(yè)。在公司成立初期,F(xiàn)IDELIX憑借對技術的深入研究和對市場的敏銳洞察,成功推出了多款性能優(yōu)越的NAND FLASH(閃存)和SDR/DDR(單/雙數(shù)率同步動態(tài)存儲器)等存儲芯片產(chǎn)品。這些產(chǎn)品不僅在韓國市場上獲得了良好的口碑,同時也開始逐步進入國際市場。
隨著技術的不斷進步和市場的不斷擴大,F(xiàn)IDELIX逐漸在韓國存儲芯片領域嶄露頭角。公司不斷投入研發(fā)資金,加強技術創(chuàng)新,努力提升產(chǎn)品的性能和品質(zhì)。同時,F(xiàn)IDELIX也積極拓展銷售渠道,與多家國內(nèi)外知名廠商建立了合作關系,為公司的持續(xù)發(fā)展奠定了堅實的基礎。
隨著科技的不斷進步和市場環(huán)境的變化,三環(huán)(CCTC)公司認識到科技創(chuàng)新是企業(yè)持續(xù)發(fā)展的關鍵。因此,公司加大了研發(fā)投入力度,引進和培養(yǎng)了一批高素質(zhì)的研發(fā)人才,建立了以博士、碩士為主組成的技術研發(fā)團隊。同時,公司積極承擔并完成多個國家、省級重點科研項目,不斷開展新材料、新產(chǎn)品、新技術的研究與創(chuàng)新。這些努力使公司在多個領域取得了突破性的成果,實現(xiàn)了轉(zhuǎn)型升級。
面對快速變化的市場需求,F(xiàn)requency Devices公司展現(xiàn)出了敏銳的市場洞察力。在21世紀初,隨著無線通信技術的快速發(fā)展,對高頻電子元件的需求急劇增加。公司及時調(diào)整產(chǎn)品策略,加大了對無線通信領域高頻產(chǎn)品的研發(fā)投入,并成功推出了一系列適用于手機、基站等通信設備的高頻濾波器、功率放大器等關鍵元件。這些產(chǎn)品不僅滿足了市場需求,還進一步鞏固了公司在行業(yè)內(nèi)的市場地位。
作為一個子版塊,只是想到的是越來越精!很多比較基礎的東西在dsp,fpga,pcb,嵌入式里面應該能夠找到答案!由于dsp設計的知識比較多,而且密集,所以,我想更多的的是致力于他們的交叉應用上!更多的是實際的例子,啟發(fā)大家的思路,論文可能居多 ...… 查看全部問答∨ |
高清網(wǎng)絡攝像機將成為高清監(jiān)控時代最主要的IP前端 根據(jù)美國電影電視工程師協(xié)會(SMPTE)、國際電聯(lián)(ITU)和我國國家廣電的相關定義,真正的高清視頻格式目前主要有三種:720P(1280*720分辨率,16:9寬屏顯示,逐行掃描/60Hz);1080i(1920*1080分辨率,16:9寬屏顯示,隔行掃描/60Hz);1080P(192 ...… 查看全部問答∨ |
郎咸平:從產(chǎn)業(yè)鏈分工看大學生就業(yè)困難 郎咸平:從產(chǎn)業(yè)鏈分工看大學生就業(yè)困難 http://view.news.qq.com/a/20080723/000001.htm… 查看全部問答∨ |
|
我在wince 4.2下,修改了public/common/oak/startui/下的驅(qū)動中的startui.rc文件,但是命令行編譯后,又進行重編譯,在進行操作時他的對話框還是默認的大小。不知道是什么原因,請高手指教。謝謝!… 查看全部問答∨ |
小弟現(xiàn)在正在學tinyOS,看過現(xiàn)在市面上最流行的幾份教材,第一個是市面上唯一的中文版的教材,學會了blink.還有發(fā)送和接受數(shù)據(jù)的兩個部分。還有一份是nesC 1.1 語言參考手冊, 講tinyos的結構的。還有一份英文版的tinyOS/nesC programming reference ...… 查看全部問答∨ |
由于再過2個月,就要去公司實習,公司相關部門的工程師通知我要先開始熟悉wince系統(tǒng)和窗口控件設計,并了解vs2005. 我以前完全沒有接觸過wince操作系統(tǒng),希望大家能夠推薦幾本適合初學者的經(jīng)典書籍,并指點一些學習步驟和計劃?!? 查看全部問答∨ |
我想在COMBOBOX獲得焦點的時候進行一些操作。我用的方法是if(GetFoucs()->GetDlgCtrlID==IDC_XXX)可是光標已經(jīng)明明在COMBOBOX上了但是感覺并沒有獲得焦點。同樣的代碼放到EDIT空間或者ListBox控件上都沒有問題。 求解答。謝謝各位了?!? 查看全部問答∨ |
我的bsp里面有stepldr和eboot, 我想讓eboot跑起來, 但把stepldr.nb1燒寫到flash中后,在dnw上顯示的卻是亂碼?。。?! 這個是串口的初始代碼: void Uart_Init(void) { int i; rUFCON1 = 0x0;   ...… 查看全部問答∨ |
module count4(out,reset,clk); output[3:0] out; input[3:0] reset,clk; reg[3:0] out; always @(posedge clk) begin if(reset) out<=0; else out<=out+1; end endmodul ...… 查看全部問答∨ |
設計資源 培訓 開發(fā)板 精華推薦
- 晶心科技:只需提供兩個設計文件,就能輕松擴展RISC-V指令集
- 艾邁斯歐司朗先進的高精度溫度傳感器助推動物健康管理
- Microchip與臺達電子簽署碳化硅解決方案合作協(xié)議,共創(chuàng)電源管理未來
- 馬斯克被曝將旗下腦機接口公司 Neuralink 登記為“小微企業(yè)”
- 寒武紀宣布將募資 39.85 億元加碼 AI 大模型芯片與軟件平臺
- 如何加快基于RISC-V的SoC項目上市時間?西門子EDA給出了解法
- 負責任的賦能技術實現(xiàn)邊緣AI全面適用
- 半導體創(chuàng)新推動能源格局演變的三種方式
- 大模型怎么幫助RISC-V設計和驗證?Nuclei Model讓芯來的IP更有競爭力
- 合見工軟如何幫助“香山”解決高性能多核RISC-V驗證難題?