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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3474|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

12864矩陣任意顯示兩位數(shù)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:90084 發(fā)表于 2015-9-15 00:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
昨天,12單片機12M換24M導(dǎo)致時序錯誤,今天12864鍵值顯示異常。看來短時間內(nèi)完成工程。必須經(jīng)驗豐富來著。
/********************************************************** 用矩陣按鍵輸入任意兩位數(shù)并顯示在12684上。如先輸入2,再輸入5

液晶上顯示25。用矩陣按鍵0-9共10個按鍵。LCD12864用串行方式操作, 如果用并行,請自行修改。

***********************************************************/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define NOP _nop_();



sbit LCD_CS=P1^0; //片選,高電平有效(RS)
sbit LCD_SID=P1^1; //串行數(shù)據(jù)輸入端(R/W)
sbit LCD_SCLK=P1^2; //串行同步時鐘,上升沿讀取SID數(shù)據(jù)(E) sbit LCD_PSB=P1^3; //并/串選擇 H并行 L串行
sbit LCD_RST=P1^4; //復(fù)位,低電平有效



uchar keynum;
uchar code dis1[]={"請輸入任意兩位數(shù)"};
uchar code dis2[16]={"0123456789ABCDEF"};
uchar dis_buf[]={0,0};



uchar getkey();
void display();
void delay(uint x)
        {
        uchar i;
        while(x--)
                {
                for(i=0;i<110;i++);
                }
        }
/*寫指令程序,指令由3個字節(jié)組成,第一個為寫指令*/
/*第二個為指令高4位,第三個為指令低4位*/
void send_cmd(uchar cmd_dat)
        {
        uchar i;
        uchar i_dat;
        i_dat=0xf8;
        LCD_CS=1;
        LCD_SCLK=0;
        for(i=0;i<8;i++)
                {
                LCD_SID=(bit)(i_dat&0x80);
                LCD_SCLK=0;
                LCD_SCLK=1;
                i_dat=i_dat<<1;
                }
        i_dat=cmd_dat;
        i_dat&=0xf0;
        for(i=0;i<8;i++)
                {
                LCD_SID=(bit)(i_dat&0x80);
                LCD_SCLK=0;
                LCD_SCLK=1;
                i_dat=i_dat<<1;
                }
        i_dat=cmd_dat;
        i_dat<<=4;
        for(i=0;i<8;i++)
                {
                LCD_SID=(bit)(i_dat&0x80);
                LCD_SCLK=0;
                LCD_SCLK=1;
                i_dat=i_dat<<1;
                }
        LCD_CS=0;
        delay(10);
        }

/*寫數(shù)據(jù)程序,指令由3個字節(jié)組成,第一個為寫數(shù)據(jù)*/ /*第二個為數(shù)據(jù)高4位,第三個為數(shù)據(jù)低4位*/

void send_dat(uchar cmd_dat)
        {
        uchar i;
        uchar i_dat;
        i_dat=0xfa;
        LCD_CS=1;
        for(i=0;i<8;i++)
                {
                LCD_SID=(bit)(i_dat&0x80);
                LCD_SCLK=0;
                LCD_SCLK=1;
                i_dat=i_dat<<1;
                }
        i_dat=cmd_dat;
        i_dat&=0xf0;
        for(i=0;i<8;i++)
                {
                LCD_SID=(bit)(i_dat&0x80);
                LCD_SCLK=0;
                LCD_SCLK=1;
                i_dat=i_dat<<1;
                }
        i_dat=cmd_dat;
        i_dat<<=4;
        for(i=0;i<8;i++)
                {
                LCD_SID=(bit)(i_dat&0x80);
                LCD_SCLK=0;
                LCD_SCLK=1;
                i_dat=i_dat<<1;
                }
        LCD_CS=0;
        delay(10);
        }
       
       
void LCD_INIT()
        {
        LCD_PSB=0; //串行方式操作
        send_cmd(0x30); //基本指令操作
        delay(5);
        send_cmd(0x0c); //顯示開,關(guān)游標,游標位置反白禁止 delay(5);
        send_cmd(0x06); //光標右移,整體顯示不移動 delay(5);
        send_cmd(0x01); //清除LCD顯示內(nèi)容
        delay(5);
        }

       
uchar getkey()
        {
        unsigned char row,col,k;
        for(row=0;row<4;row++) //行值依次為0xfe, 0xfd, 0xfb, 0xf7
                {
                P2=~(1<<row);
                k=0x10;
                for(col=0;col<4;col++) //列值掃描
                        {
                        if(!(P2&k)) //如果有鍵按下
                        return (row*4+col); //返回按鍵位置
                        k<<=1;
                        }
                }
        return 99; //無鍵按下返回99
        }

void key_dispos() //按鍵處理并顯示程序
        {
        display(); //顯示第一行和初始鍵值 keynum=getkey(); //獲取鍵值
        if(keynum<10) //
                {
                dis_buf[1]=dis_buf[0]; //第一個鍵值移位顯示 dis_buf[0]=keynum; //獲得第二個鍵值 display(); //顯示改變后的鍵值 while(keynum<10) //松手檢測
                        {
                        keynum=getkey();
                        }
                }
        }

void main()
        {
        P1=0xff;
        LCD_INIT();
        while(1)
                {
                key_dispos();
                }
        }
        void display()
                {
                uint i;
                send_cmd(0x80); //第一行顯示
                i=0;
                        while(dis1[i]!='\0')
                        {
                        send_dat(dis1[i]);
                        i++;
                        }
                send_cmd(0x90); //第二行顯示數(shù)據(jù) send_dat(dis2[dis_buf[1]]);
                send_dat(dis2[dis_buf[0]]);
        }



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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩精品一区二区 | 中文字幕国产精品 | 欧美a级成人淫片免费看 | 亚洲国产精品久久久久 | 亚洲福利一区二区 | 国产一区二区电影 | 国产一在线 | 亚洲国产精品久久人人爱 | av网站在线播放 | 午夜私人影院在线观看 | 欧美日韩高清免费 | 超碰97人人人人人蜜桃 | 成人三级视频在线观看 | 中文字幕国产 | 九色.com| 日韩毛片 | 久久99精品久久久久久狂牛 | a视频在线观看 | 九一在线 | 日本一区二区影视 | 成av在线| 国产天天操 | 超碰97在线免费 | 国产91久久久久 | 日本 欧美 三级 高清 视频 | 久久久国产一区二区三区四区小说 | 在线看国产 | 毛片一区二区三区 | 亚洲色图图片 | 欧美精三区欧美精三区 | 欧美国产日韩一区二区三区 | 亚洲一区二区欧美 | 国产精品久久久久久久久婷婷 | 国产成人免费视频网站视频社区 | 精品免费视频 | 天天干天天爱天天爽 | 国产精品久久久久久久久久 | 91久久国产精品 | av资源中文在线 | 亚洲黄色国产 | 亚洲 91 |