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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3718|回復(fù): 2
收起左側(cè)

用單片機(jī)pcf8574+4x4矩陣按鍵實(shí)現(xiàn)1602光標(biāo)控制程序

[復(fù)制鏈接]
ID:584513 發(fā)表于 2020-5-14 09:41 | 顯示全部樓層 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

仿真

仿真


單片機(jī)源程序如下:
  1. #include<at89x52.h>
  2. #include <intrins.h>
  3. #include "key_8574.h"
  4. #include"1602.h"
  5. uchar key; //定于全局變量key,用于按鍵掃描后的碼值存放
  6. //#define LED P2        //用于事例
  7. uchar i;
  8. int temp=0;         //1602的列
  9. int temp1=0; //1602的行
  10. /*4*4鍵盤對(duì)應(yīng)的值*/
  11. uchar zi[]={' ',
  12.                         '1','2','3','A',                 
  13.                         '4','5','6','B',
  14.                         '7','8','9','C',
  15.                         '*','0','#','D', };
  16. /*********************************************
  17.     函數(shù)名稱:delay_ms
  18.         函數(shù)功能:延時(shí)函數(shù) 單位為1ms
  19.         入口參數(shù):uint a
  20.         出口參數(shù):無(wú)
  21.         備 注:
  22. *********************************************/
  23. void delay_ms(uint a)
  24. {
  25.         uchar b;
  26.         for(;a>0;a--)
  27.                 for(b=110;b>0;b--);
  28. }
  29. /*********************************************
  30.     函數(shù)名稱:shuru
  31.         函數(shù)功能:實(shí)現(xiàn)4*4矩陣按鍵在1602上的輸出
  32.         入口參數(shù):無(wú)
  33.         出口參數(shù):無(wú)
  34.         備 注:實(shí)現(xiàn)輸出0~9,光標(biāo)的移位
  35. *********************************************/
  36. void shuru()
  37. {
  38.         if(key!=0)                                          
  39.         {
  40.                 delay_ms(10); //按鍵消抖
  41.                 if(key!=0)
  42.                 {
  43.                         i=key;
  44.                         switch(i)
  45.                         {
  46.                                 case 4:
  47.                                         write_com_1602(0x14);        //光標(biāo)右移一位         (0x14)~(0x17)光標(biāo)右移一位
  48.                                         temp++;        //列加1                                    //(0x18)~(0x1b)屏幕左移
  49.                                 break;                                                                //(0x1c)~(0x1f)屏幕右移
  50.                                 case 8:
  51.                                         write_com_1602(0x10);        //光標(biāo)左移一位         (0x10)~(0x13)光標(biāo)左移一位
  52.                                         temp--; //列減1
  53.                                 break;
  54.                                 case 16:
  55.                                         switch(temp1)                        //查詢當(dāng)前光標(biāo)在哪一行
  56.                                         {        
  57.                                                 case 1:
  58.                                                         temp1=0;                //改變光標(biāo)的行
  59.                                                         write_com_1602(0x80+temp);//改變光標(biāo)的行,列不變
  60.                                                 break;
  61.                                                 case 0:
  62.                                                         temp1=1;                //改變光標(biāo)的行
  63.                                                         write_com_1602(0xc0+temp);//改變光標(biāo)的行,列不變
  64.                                                 break;
  65.                                         }                                         
  66.                                 break;                                                         
  67.                                 case 12:
  68.                                         write_com_1602(0x01);        //顯示清屏
  69.                                         temp=0;                                        //回到第一列
  70.                                         temp1=0;                                //回到第一行
  71.                                 break;
  72.                                 case 15:
  73.                                         temp++;                                        //向后移動(dòng)一位
  74.                                         if(temp1==0)                                //如果在第一行
  75.                                         {
  76.                                                 write_com_1602(0x80+temp);//光標(biāo)顯示在第一行        
  77.                                         }
  78.                                         else                                                  //否則
  79.                                         {
  80.                                                 write_com_1602(0xc0+temp);//光標(biāo)顯示在第二行
  81.                                         }
  82.                                         break;
  83.                                 default:
  84.                                         write_char_1602(temp1,temp,zi[ i]); //在當(dāng)前位置輸出數(shù)字[ i]
  85.                                         if(temp1==0)                                                 //如果在第一行
  86.                                         {
  87.                                                 write_com_1602(0x80+temp);         //光標(biāo)顯示在第一行
  88.                                         }
  89.                                         else                                                         //否則
  90.                                         {
  91.                                                 write_com_1602(0xc0+temp);         //光標(biāo)顯示在第二行
  92.                                         }                                                           
  93.                                 break;
  94.                                 
  95.                         }
  96.                         if(temp==16)//如果到了最后一列                                                           
  97.                         {
  98.                                 temp=0;        //回到第一列
  99.                                 temp1++;//到下一行
  100.                         }
  101.                         if(temp1==2)//如果到了最后一行
  102.                         {
  103.                                 temp1=0;//回到第一行
  104.                         }
  105.                         if(temp<0)        //如果向左移,移過(guò)了第一列
  106.                         {
  107.                                 temp=16;//到最后一列
  108.                                 temp1--;//回到上一行
  109.                         }
  110.                         if(temp1<0)        //如果向上移,移過(guò)了第一行
  111.                         {
  112.                                 temp1=1;//到第二行
  113.                                 temp=15;//到最后一列
  114.                         }
  115.                 }
  116.                         while(key!=0);          //等待按鍵釋放        
  117.         }        
  118. }
  119. /*-----------主函數(shù)------------*/
  120. void main()
  121. {
  122.         init_8574();//初始化函數(shù)
  123.         init_1602();
  124.         /*外部中斷0被pcf8574占用*/
  125.         IT0 = 1;        //令I(lǐng)NT0下降沿觸發(fā)
  126.         EX0 = 1;        //開(kāi)INT0中斷
  127.         EA = 1;                //開(kāi)啟總中斷
  128.         write_com_1602(0x01);//顯示清屏
  129.         while(1)
  130.         {
  131.                 shuru();
  132.         }
  133. }


  134. /*---------------------------------------------
  135. **函數(shù)名稱:int0()
  136. **函數(shù)功能:中斷系統(tǒng)
  137. **入口參數(shù):無(wú)
  138. **輸出參數(shù):無(wú)
  139. **說(shuō)明:當(dāng)pcf8574P口變化時(shí)會(huì)產(chǎn)生中斷變化,單片機(jī)
  140.                 根據(jù)中斷進(jìn)行按鍵掃描
  141. ---------------------------------------------*/
  142. void int0() interrupt 0
  143. {
  144.         EX0 = 0;//為了防止多次進(jìn)入中斷造成干擾,先關(guān)閉中斷
  145.         key = key_scan();//讀取按鍵值
  146.         EX0 = 1;//開(kāi)啟中斷
  147. }

復(fù)制代碼

51hei.png

全部資料51hei下載地址:
3-3光標(biāo)控制.zip (128.43 KB, 下載次數(shù): 54)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:589833 發(fā)表于 2020-5-16 10:22 | 顯示全部樓層
贊一個(gè)
回復(fù)

使用道具 舉報(bào)

ID:1080302 發(fā)表于 2023-5-28 00:45 來(lái)自手機(jī) | 顯示全部樓層
原來(lái)如此,豁然開(kāi)朗
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕乱码一区二区三区 | 国产一极毛片 | 成人午夜免费福利视频 | 一区二区三区精品视频 | 精品国产一区二区国模嫣然 | 噜噜噜噜狠狠狠7777视频 | 国产精品一区视频 | 精品综合 | 91久久精品一区 | 日本不卡免费新一二三区 | 欧美1区2区| av在线成人 | 中文字幕第90页 | 久久久www成人免费精品 | 波多野结衣一区二区三区 | 国产精品精品久久久久久 | 久久久久久久久久毛片 | 麻豆精品国产免费 | 国产精品日韩欧美一区二区 | 亚洲在线免费观看 | 亚洲成人日韩 | 成人亚洲性情网站www在线观看 | 中文字幕亚洲一区二区三区 | 国产精品视频一二三区 | 成人片免费看 | 国产视频精品在线观看 | 久久久久久久一区 | 欧美日韩综合 | 一级黄色片免费在线观看 | 色综合区| 久久九九99 | 国产免费福利小视频 | 欧美乱做爰xxxⅹ久久久 | 在线观看视频h | 一区二区三区在线播放 | 一区二区三区小视频 | 男女精品久久 | 91香蕉视频在线观看 | 国产精品色婷婷久久58 | 亚洲交性 | 成人免费在线播放 |