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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4518|回復: 0
打印 上一主題 下一主題
收起左側

Proteus仿真51單片機串口通訊主機+從機代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:456033 發(fā)表于 2019-1-19 15:47 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
分主從機代碼
主機代碼實現(xiàn):
1.LCD1602的驅動并顯示字符串
2.串口通訊發(fā)送功能
3.按鍵識別功能
從機代碼實現(xiàn):
1.數(shù)碼管的顯示(根據(jù)按鍵次數(shù)遞增)
2.串口通訊接收功能

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下(主機代碼):
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. unsigned char key_s, key_v, tmp, n;
  6. unsigned char code name[]={"successful"};
  7. sbit lcden=P2^4;
  8. sbit lcdrs=P2^5;
  9. void Init(void);                                        //初始化
  10. bit        key_scan();                                                //按鍵掃描
  11. void key_event();                                        //按鍵事件
  12. void delayms(unsigned char ms);                //延遲
  13. void send_data(unsigned char txd);        //數(shù)據(jù)發(fā)送
  14. void write_com(uchar com);
  15. void set_pos(uchar x, uchar y);
  16. void write_data(uchar date);
  17. void LCD_init();
  18. void print();
  19. sbit        K1 = P1^4;
  20. //主程序
  21. main()
  22. {
  23.     Init();
  24.         TR1 = 1;                                    //啟動定時器1
  25.         n=0x00;
  26.         LCD_init();                                                //初始化
  27.         print();                                                //lcd顯示
  28.         while(1)
  29.         {
  30.                 if(key_scan())                    //掃描按鍵
  31.                 {
  32.                         delayms(10);                        //延時去抖動
  33.                         if(key_scan())                        //再次掃描
  34.                         {
  35.                                 key_v = key_s;                //保存鍵值
  36.                                 key_event();                //鍵處理
  37.                                 if(n==0x0a) n=0x00;        //歸零
  38.                         }
  39.                 }
  40.         }

  41. }





  42. //子程序
  43. void Init(void)
  44. {   
  45.         TMOD = 0x20;                        // 定時器1工作于8位自動重載模式, 用于產(chǎn)生波特率
  46.         TH1 = 0xF3;                                // 波特率2400
  47.         TL1 = 0xF3;
  48.         SCON = 0x50;                        // 設定串行口工作方式
  49.         PCON&= 0xef;                        // 波特率不倍增
  50.                

  51.         IE = 0x0;                                // 禁止任何中斷
  52. }
  53. bit key_scan()                                     
  54. {
  55.         key_s = 0x00;
  56.         key_s |= K1;
  57.         return(key_s ^ key_v);       
  58. }

  59. void key_event()
  60. {
  61.         if((key_v & 0x01) == 0)
  62.         {                       
  63.                 send_data(n++);                       
  64.         }
  65. }
  66. void send_data(unsigned char txd)
  67. {
  68.         SBUF = txd;
  69.         while(!TI);                               
  70.         TI = 0;                                       
  71. }
  72. void delayms(unsigned char ms)       
  73. {                                               
  74.         unsigned char i;
  75.         while(ms--)
  76.         {
  77.                 for(i = 0; i < 120; i++);
  78.         }
  79. }
  80. void write_com(uchar com)
  81. {
  82.         lcdrs=0;
  83.         P0=com;
  84.         delayms(5);
  85.         lcden=1;
  86.         delayms(5);
  87.         lcden=0;
  88. }
  89. void set_pos(uchar x, uchar y)
  90. {
  91.         uchar addr;       
  92.         if (y == 1)
  93.                 addr = 0x00 + x;
  94.         else
  95.                 addr = 0x40 + x;
  96.         write_com(addr | 0x80);
  97. }
  98. void write_data(uchar date)
  99. {
  100.         lcdrs=1;
  101.         P0=date;
  102.         delayms(5);
  103.         lcden=1;
  104.         delayms(5);
  105.         lcden=0;
  106. }
  107. void LCD_init()
  108. {
  109.         lcden=0;
  110.         write_com(0x38);
  111.         write_com(0x0c);
  112.         write_com(0x06);
  113.         write_com(0x01);
  114. }
  115. void print()
  116. {
  117.         int i;
  118.         for(i=0;i<10;i++)                                
  119.     {
  120.       uchar c=0;
  121.           c=name[i];
  122.           set_pos(i,1);                             
  123.       write_data(c);                           
  124.     }
  125. }
復制代碼

所有資料51hei提供下載:
串口通訊.rar (81.87 KB, 下載次數(shù): 83)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久高清国产视频 | 精产国产伦理一二三区 | 欧美中文字幕一区二区三区亚洲 | 国产精品久久一区二区三区 | 国产精品久久久久久二区 | 欧美亚洲视频 | 国产伦一区二区三区四区 | 无码国模国产在线观看 | 日韩伦理一区二区 | 久久狠狠| 国产 欧美 日韩 一区 | 欧美xxxx性 | 天堂资源 | 91中文字幕在线观看 | 亚洲美女在线视频 | 欧美激情视频一区二区三区在线播放 | 国产在线精品一区二区 | 欧美一区二区三区视频在线 | 国产午夜精品理论片a大结局 | 国产精品久久久久无码av | 成人网av | 成人国产精品 | 日韩精品一区二区三区在线观看 | 国产精品一区二区三区在线播放 | 国产亚洲精品精品国产亚洲综合 | 国产精品一区二区三级 | 欧美激情欧美激情在线五月 | 99精品99| 国产一级视频免费播放 | 亚洲高清电影 | 国产婷婷 | 孰女乱色一区二区三区 | 亚洲精品久久久一区二区三区 | 日韩在线播放一区 | 午夜国产在线 | 国产中文字幕在线 | 在线一区观看 | 欧美xxxx性 | 99精品免费 | 久久久久九九九九 | 麻豆av网|