#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit BEEP = P3^7; //蜂鳴器驅動線
uchar dis_buf; //顯示緩存
uchar temp;
uchar key; //鍵順序嗎
void beep(); //蜂鳴器
void delay0(uchar x); //x*0.14MS
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
uchar code cdis1[ ] = {" KEY NUMBER "};
uchar code cdis2[ ] = {" KEY-CODE: H "};
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
/*************************************************************/
/* */
/* 延時子程序 */
/* */
/*************************************************************/
void delay(uchar x)
{ uchar j;
while((x--)!=0)
{ for(j=0;j<125;j++)
{;}
}
}
/*************************************************************/
/* */
/*檢查LCD忙狀態 */
/*lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數據 */
/* */
/*************************************************************/
bit lcd_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
result = (bit)(P0&0x80);
LCD_EN = 0;
return(result);
}
/*******************************************************************/
/* */
/*寫指令數據到LCD */
/*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 */
/* */
/*******************************************************************/
void lcd_wcmd(uchar cmd)
{
while(lcd_busy());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
P0 = cmd;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
/*******************************************************************/
/* */
/*寫顯示數據到LCD */
/*RS=H,RW=L,E=高脈沖,D0-D7=數據。 */
/* */
/*******************************************************************/
void lcd_wdat(uchar dat)
{
while(lcd_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = dat;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
/*************************************************************/
/* */
/* LCD初始化設定 */
/* */
/*************************************************************/
void lcd_init()
{
delay(15);
lcd_wcmd(0x38); //16*2顯示,5*7點陣,8位數據
delay(5);
lcd_wcmd(0x38);
delay(5);
lcd_wcmd(0x38);
delay(5);
lcd_wcmd(0x0c); //顯示開,關光標
delay(5);
lcd_wcmd(0x06); //移動光標
delay(5);
lcd_wcmd(0x01); //清除LCD的顯示內容
delay(5);
}
/*************************************************************/
/* */
/* 設定顯示位置 */
/* */
/*************************************************************/
void lcd_pos(uchar pos)
{
lcd_wcmd(pos | 0x80); //數據指針=80+地址變量
}
/*************************************************************/
/* */
/* 鍵掃描子程序 */
/* */
/*************************************************************/
void keysCAN(void)
{
P1=0x0F; //低四位輸入
delay(1);
temp=P1; //讀P1口
temp=temp&0x0F;
temp=~(temp|0xF0);
if(temp==1)
key=0;
else if(temp==2)
key=1;
else if(temp==4)
key=2;
else if(temp==8)
key=3;
else
key=16;
P1=0xF0; //高四位輸入
delay(1);
temp=P1; //讀P1口
temp=temp&0xF0;
temp=~((temp>>4)|0xF0);
if(temp==1)
key=key+0;
else if(temp==2)
key=key+4;
else if(temp==4)
key=key+8;
else if(temp==8)
key=key+12;
else
key=16;
dis_buf = key; //鍵值入顯示緩存
dis_buf = dis_buf & 0x0f;
if(dis_buf>9) //轉換為ASCII碼
dis_buf = dis_buf+0x37;
else
dis_buf = dis_buf+0x30;
}
/*************************************************************/
/* */
/*判斷鍵是否按下 */
/* */
/*************************************************************/
void keydown(void)
{
P1=0xF0;
if(P1!=0xF0)
{
keyscan();
beep();
}
}
/*************************************************************/
/* */
/* 蜂鳴器響一聲 */
/* */
/*************************************************************/
void beep()
{
unsigned char i;
for (i=0;i<100;i++)
{
delay0(4);
BEEP=!BEEP; //BEEP取反
}
BEEP=1; //關閉蜂鳴器
delay(250); //延時
}
/*************************************************************/
/* */
/* 延時 x*0.14ms */
/* */
/*************************************************************/
void delay0(uchar x)
{
unsigned char i;
while(x--)
{
for (i = 0; i<13; i++) {}
}
}
/*************************************************************/
/* */
/* 主程序 */
/* */
/*************************************************************/
main()
{
uchar m;
P0=0xFF; //置P0口
P2=0xFF; //置P2口
delay(10); //延時
lcd_init(); //初始化LCD
lcd_pos(0); //設置顯示位置為第一行的第1個字符
m = 0;
while(cdis1[m] != ’\0’)
{ //顯示字符
lcd_wdat(cdis1[m]);
m++;
}
lcd_pos(0x40); //設置顯示位置為第二行第1個字符
m = 0;
while(cdis2[m] != ’\0’)
{
lcd_wdat(cdis2[m]); //顯示字符
m++;
}
dis_buf = 0x2d; //顯示字符"-"
while(1)
{
keydown();
lcd_pos(0x4c);
lcd_wdat(dis_buf); //第一位數顯示
}
}
/************************************************************/
1602液晶顯示按鍵鍵值程序
上一篇:51單片機1602LCD顯示數字頻率計
下一篇:遙控6聲道AV機PT6311的匯編程序
推薦閱讀
史海拾趣
隨著技術的不斷進步和市場的不斷擴大,Fairchild Semiconductor開始將目光投向全球市場。公司積極開拓海外市場,與全球各地的企業建立合作關系,共同推動半導體技術的發展。通過不斷努力,Fairchild逐漸在全球半導體市場中占據了重要地位。
在快速發展的過程中,Bipolarics Inc始終重視人才培養和團隊建設。公司注重從高校和研究機構引進優秀人才,同時加強內部員工的培訓和晉升機制。通過打造一支高效、專業的團隊,Bipolarics Inc在技術研發、市場營銷等方面取得了顯著成績。此外,公司還積極營造良好的企業文化氛圍,激發員工的創新精神和團隊凝聚力。
隨著全球市場的不斷擴張,Accuride公司也積極實施全球化戰略。其在北美地區擁有多個生產基地和銷售網絡,同時在加拿大和墨西哥也設有子公司。這些子公司在各自的區域內開展業務,為Accuride公司的全球化戰略提供了有力支撐。通過全球化布局,Accuride公司能夠更好地滿足全球客戶的需求,提升品牌影響力和市場競爭力。
雖然這些故事并非直接涉及電子行業,但它們展示了Accuride公司在商用車零部件行業的發展歷程、經營策略和市場表現。作為一家具有實力和影響力的企業,Accuride公司通過不斷創新、拓展市場、優化資源配置等方式,實現了穩健的發展。
Blue Sky Research自成立之初,便以技術創新為核心競爭力。公司不斷投入研發,成功開發出一系列高性能的激光二極管模塊和光纖耦合激光組件。這些產品憑借其卓越的性能和穩定性,迅速在電子行業中占據了一席之地。隨著技術的不斷迭代和升級,Blue Sky Research逐漸在激光技術領域樹立了行業標桿,成為眾多企業爭相合作的對象。
Eclipse的成功離不開其強大的社區支持。Eclipse社區擁有眾多的開發者、測試者和用戶,他們共同為Eclipse的發展貢獻力量。通過舉辦開發者大會、在線論壇和郵件列表等方式,Eclipse社區為開發者們提供了一個交流學習的平臺。在這個平臺上,開發者們可以分享經驗、解決問題,共同推動Eclipse的發展。
隨著全球化進程的加速,American Electric公司開始實施國際化戰略。公司積極拓展海外市場,與多個國家的電力企業建立合作關系,共同開展電力項目。同時,公司還在海外設立了多個分支機構,以便更好地服務當地客戶。這些舉措不僅提高了公司的國際影響力,還為公司的長期發展奠定了堅實的基礎。
Warning: Can\'t find signal in vector source file for input pin |whole|clk10m原因:因為你的波形仿真文件( vector source file )中并沒有把所有的輸入信號(input pin)加進去,對于每一個輸入都需要有激勵源的… 查看全部問答∨ |
|
WinCE5.0內存映射文件操作的疑惑, 有這么一段程序: // 設定內存映射大小、偏移量等參數 __int64 qwFileSize = 0xD59F80;//文件的最大字節數13.3MB(0xD59F80)/64MB(0x4000000)/128MB(0x8000000) __int64 qwFileOffset = 0; & ...… 查看全部問答∨ |
|
我在他的AD上外部接了干電池, 我把電壓調整到2.8V,采樣250次后 我看數據, 發現數據 從3470----3420 的數據都有,真的叫人郁悶 請問香主 他的誤差有那么大么.我把電路貼出來, 不知道那位采的數據精確點啊… 查看全部問答∨ |
|
這里基本上包括了網上所有有用的SVPWM資料,只要一鍵就可以得到所有的資料。看咱們論壇這方面的資料比較就上傳上來供大家學習! 具體內容如下: 代碼如下: [ 本帖最后由 fxw451 于 2011-4-12 15:05 編輯 ]… 查看全部問答∨ |
|
我使用ST提供stm32f105-07_f2xx_usbhost_lib.zip的USB庫在我的板子中進行測試時,板子作為從設備。用它提供的例程從設備作為HID設備時,我不管如何插、拔USB時,電腦都能識別設備。當從使用VCP例程時,使用JLink進行仿真,點擊RUN時,插入USB設備, ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 英特爾被曝向臺積電下達 2nm 晶圓代工訂單,成為該制程首批客戶
- Akamai 研究發現:在亞太地區及日本,AI 驅動的應用程序遭受了 510 億次 Web 攻擊,年同比增長達 73%
- 汽車顯示屏——第1部分:TFT LCD、OLED和micro-LED顯示屏基本原理
- 英特爾首秀上海車展:以“芯”賦能,攜手合作伙伴推動全車智能化
- 中國首個高速L3商用解決方案!華為新一代ADS 4正式發布
- 增強自主移動機器人的安全性
- Cadence 推出業界首款 12800MT/s DDR5 MRDIMM Gen2 內存 IP 系統解決方案
- 消息稱英特爾本周內公布 20%+ 大裁員計劃
- 盤點慕尼黑電子展上那些火熱的機器人技術和產品
- AI算力狂飆下的能源困局,ST如何突圍?