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

標題: 51單片機4X4按鍵(0~15)數碼管顯示、并通過串口通信發送相應數字(Proteus仿真) [打印本頁]

作者: 幾許清輝    時間: 2018-11-21 11:34
標題: 51單片機4X4按鍵(0~15)數碼管顯示、并通過串口通信發送相應數字(Proteus仿真)
1、Proteus原理圖:



2、C程序:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define GPIO_KEY P1
  5. #define weixuan P2

  6. //0~F的共陽數碼管段碼,最后一個是黑屏
  7. const uchar SEG_CODE[] ={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};
  8. sbit wei1=P2^0;
  9. sbit wei2=P2^1;
  10. uchar ge,shi,KeyValue,j,b;
  11. uchar temp,temp1;
  12. uchar flag=0;

  13. /*****延時函數*****/
  14. void delay1ms(uint z)
  15. {
  16.    uint x,y;
  17.    for(x=z;x>0;x--)
  18.    for(y=112;y>0;y--);  //12M晶振下,延時1MS
  19. }

  20. /*****初始化函數*****/
  21. void InitUART(void)
  22. {
  23.    TMOD=0x20;
  24.    SCON=0x50;
  25.    TH1=0xFD;
  26.    TL1=TH1;
  27.    PCON=0x00;  
  28.    EA=1;  
  29.    ES=1;   
  30.    TR1=1;   
  31. }  

  32. /*****串口通信中斷*****/
  33. void send(uchar x)
  34. {
  35.        SBUF=x;  
  36.        while(TI==0);   
  37.        TI=0;      
  38. }

  39. /*****顯示函數*****/
  40. void xianshi(uchar k)   
  41. {
  42.    ge=k%10;  
  43.    shi=k/10;
  44.    if(k>9)  
  45.    {
  46.       weixuan=0x02;   
  47.       P0=SEG_CODE[ge];
  48.       send(shi+48);   
  49.       delay1ms(10);   
  50.       weixuan=0x01;
  51.       P0=SEG_CODE[shi];//十位段碼,顯示
  52.       send(ge+48);   
  53.       delay1ms(10);            
  54.     }
  55.     else           
  56.     {
  57.        weixuan=0x02;
  58.        P0=SEG_CODE[ge];//個位段選
  59.        send(ge+48);
  60.        delay1ms(10);                                                  
  61.      }
  62. }
  63. /***鍵盤掃描函數***/
  64. uchar keyscan()   
  65. {
  66.    char a=0;      
  67.    GPIO_KEY=0x0f;   //P1口值準備  
  68.     if(GPIO_KEY!=0x0f)   
  69.     {
  70.        delay1ms(10);   //延時消抖  
  71.        if(GPIO_KEY!=0x0f)//再次判斷
  72.        {
  73.           GPIO_KEY=0x0f;  //再次裝值準備
  74.           switch(GPIO_KEY)  //測試行   
  75.            {
  76.               case(0x07):KeyValue=0;break;
  77.               case(0x0b):KeyValue=1;break;
  78.               case(0x0d):KeyValue=2;break;
  79.               case(0x0e):KeyValue=3;break;                                             
  80.             }
  81.            GPIO_KEY=0xf0;   //高四位賦1,判斷準備  HIGH FOUR BIT GET VERTICAL
  82.            switch(GPIO_KEY) //測試行   
  83.             {
  84.                  case(0x70):KeyValue=KeyValue;break;     
  85.                  case(0xb0):KeyValue=KeyValue+4;break;  
  86.                  case(0xd0):KeyValue=KeyValue+8;break;  
  87.                  case(0xe0):KeyValue=KeyValue+12;break;           
  88.             }
  89.             while((GPIO_KEY!=0x0f)&&(a<10)) //判斷是否松手,假若沒有松手
  90.                                                                //一段延時后依舊判斷松手完成
  91.             {
  92.                delay1ms(1);
  93.                a++;
  94.             }
  95.                a=0;
  96.          }
  97.      }
  98.      return KeyValue;
  99. }

  100. /*****主函數*******/
  101. void main()
  102. {
  103.    InitUART();
  104.    while(1)
  105.    {
  106.       b=keyscan();
  107.       xianshi(b);
  108.     }        
  109. }
復制代碼

3、Proteus仿真圖示例:



4、串口精靈仿真接收數據示例:
單片機參數設置:


串口參數設置:


串口精靈仿真運行:



5、順便附上案例文件(能正常運行)
4X4按鍵串口通信.rar (55.64 KB, 下載次數: 88)







歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 成人三级视频 | 国产精品亚洲一区二区三区在线 | 奇米影视首页 | 福利片在线观看 | 久久国产精品无码网站 | 欧洲精品在线观看 | 国际精品鲁一鲁一区二区小说 | 亚洲精品一 | 男人的天堂avav | 久久网国产 | 亚洲精品视频在线播放 | 精品视频在线观看 | 亚洲一区国产 | 精品久久国产视频 | 欧美精品一区二区三区四区五区 | 成人免费在线播放 | 狠狠久久| 亚洲在线一区 | 亚洲一区视频在线 | 亚洲免费观看视频网站 | 一区二区三区精品在线视频 | 国产激情在线播放 | 国产成人免费在线 | 亚洲午夜视频 | 成人午夜影院 | 国产欧美精品一区二区三区 | 精品国产欧美 | 免费电影av | 亚洲国产自产 | 午夜视频一区二区 | 久久网亚洲 | 亚洲成人在线免费 | 中文字幕欧美一区 | 国产视频一区二区 | 欧美精品一区在线 | 中文字幕日韩欧美 | 天天拍天天色 | 国产在线精品免费 | 91小视频在线 | 91精品国产综合久久久亚洲 | 日本久久网站 |