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

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

QQ登錄

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

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

單片機(jī)雙機(jī)串口通信數(shù)碼管顯示程序&仿真普中開(kāi)發(fā)板驗(yàn)證OK

[復(fù)制鏈接]
ID:163705 發(fā)表于 2018-2-28 11:05 | 顯示全部樓層 |閱讀模式
雙機(jī)串口通信數(shù)碼管顯示程序&仿真普中開(kāi)發(fā)板驗(yàn)證OK

通過(guò)矩陣鍵盤(pán)輸入要發(fā)送的數(shù)據(jù),數(shù)碼管顯示,點(diǎn)擊發(fā)送按鍵可發(fā)送至另一個(gè)板子上顯示
可雙向傳輸顯示
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
圖片1.png 圖片2.png 圖片3.png 圖片4.png


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. #define GPIO_KEY P1

  5. #define GPIO_DIG   P0                           //數(shù)據(jù)端

  6. sbit LSA=P2^2;
  7. sbit LSB=P2^3;
  8. sbit LSC=P2^4;

  9. unsigned char k;
  10. unsigned char state=0;

  11. unsigned char code DIG_CODE[17]={
  12. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  13. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  14. //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼
  15. unsigned char KeyValue;
  16. //用來(lái)存放讀取到的鍵值
  17. unsigned char KeyState;        //記錄按鍵的狀態(tài),0沒(méi)有,1有
  18. unsigned char DisplayData[8];
  19. //用來(lái)存放要顯示的8位數(shù)的值
  20. unsigned char receiveData[8];
  21. void Delay10ms();   //延時(shí)10ms
  22. void KeyDown();                 //檢測(cè)按鍵函數(shù)
  23. void DigDisplay(); //動(dòng)態(tài)顯示函數(shù)

  24. //向串口發(fā)送
  25. void Putc_to_SerialPort(uchar c)
  26. {
  27.         SBUF=c;
  28.         while(TI==0);
  29.         TI=0;
  30. }

  31. //主程序
  32. void main()
  33. {
  34.         uchar i=0,j=0;
  35.         SCON=0X50;                        //設(shè)置為工作方式1
  36.         TMOD=0X20;                        //設(shè)置計(jì)數(shù)器工作方式2
  37.         PCON=0X80;                        //波特率加倍
  38.         TH1=0XF4;                                //計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的
  39.         TL1=0XF4;
  40.         ES=1;                                                //打開(kāi)接收中斷
  41.         EA=1;                                                //打開(kāi)總中斷
  42.         TR1=1;                                        //打開(kāi)計(jì)數(shù)器

  43.         LSA=0; //給一個(gè)數(shù)碼管提供位選
  44.         LSB=0;
  45.         LSC=0;

  46.         while(1)
  47.         {
  48.                 while(state==0)
  49.                 {
  50.                 /*
  51.                 KeyDown();
  52.                 if((KeyState==1)&&(KeyValue<10))
  53.                 {
  54.                         KeyState=0;
  55.                         Putc_to_SerialPort(KeyValue);
  56.                 }
  57.                 */

  58.                 KeyDown();
  59.                  if(KeyState==1)
  60.                 {
  61.                         if((i<8)&&(KeyValue<10))
  62.                         {
  63.                         i++;
  64.                         DisplayData[7]=DisplayData[6];
  65.                         DisplayData[6]=DisplayData[5];
  66.                         DisplayData[5]=DisplayData[4];
  67.                         DisplayData[4]=DisplayData[3];
  68.                         DisplayData[3]=DisplayData[2];
  69.                         DisplayData[2]=DisplayData[1];
  70.                         DisplayData[1]=DisplayData[0];
  71.                         DisplayData[0]=DIG_CODE[KeyValue];
  72.                         }
  73.                         if(KeyValue==15)
  74.                         {
  75.                         i=0;
  76.                         for(j=0;j<8;j++)
  77.                         {
  78.                                 Putc_to_SerialPort(DisplayData[j]);
  79.                         }
  80.                         DisplayData[7]=0x00;
  81.                         DisplayData[6]=0x00;
  82.                         DisplayData[5]=0x00;
  83.                         DisplayData[4]=0x00;
  84.                         DisplayData[3]=0x00;
  85.                         DisplayData[2]=0x00;
  86.                         DisplayData[1]=0x00;
  87.                         DisplayData[0]=0x00;
  88.                         }
  89.                         KeyState=0;
  90.                 }
  91.                 DigDisplay();
  92.                 }







  93.                 while(state==1)
  94.                 {
  95.                 for(j=0;j<8;j++)
  96.                 {
  97.                         DisplayData[j]=receiveData[j];
  98.                 }
  99.                 DigDisplay();
  100.                 KeyDown();
  101.                  if(KeyState==1)
  102.                 {
  103.                         DisplayData[7]=0x00;
  104.                         DisplayData[6]=0x00;
  105.                         DisplayData[5]=0x00;
  106.                         DisplayData[4]=0x00;
  107.                         DisplayData[3]=0x00;
  108.                         DisplayData[2]=0x00;
  109.                         DisplayData[1]=0x00;
  110.                         DisplayData[0]=0x00;
  111.                         state=0;
  112.                 }
  113.                 }
  114.         }
  115. }

  116. /*******************************************************************************
  117. * 函 數(shù) 名         : DigDisplay
  118. * 函數(shù)功能                   : 使用數(shù)碼管顯示
  119. * 輸    入         : 無(wú)
  120. * 輸    出         : 無(wú)
  121. *******************************************************************************/
  122. void DigDisplay()
  123. {
  124.         unsigned char i;
  125.         unsigned int j;
  126.         for(i=0;i<8;i++)
  127.         {
  128.                 switch(i)         //位選,選擇點(diǎn)亮的數(shù)碼管,
  129.                 {
  130.                         case(0):
  131.                                 LSA=0;LSB=0;LSC=0; break;//顯示第0位
  132.                         case(1):
  133.                                 LSA=1;LSB=0;LSC=0; break;//顯示第1位
  134.                         case(2):
  135.                                 LSA=0;LSB=1;LSC=0; break;//顯示第2位
  136.                         case(3):
  137.                                 LSA=1;LSB=1;LSC=0; break;//顯示第3位
  138.                         case(4):
  139.                                 LSA=0;LSB=0;LSC=1; break;//顯示第4位
  140.                         case(5):
  141.                                 LSA=1;LSB=0;LSC=1; break;//顯示第5位
  142.                         case(6):
  143.                                 LSA=0;LSB=1;LSC=1; break;//顯示第6位
  144.                         case(7):
  145.                                 LSA=1;LSB=1;LSC=1; break;//顯示第7位       
  146.                 }
  147.                 GPIO_DIG=DisplayData[i];//發(fā)送段碼
  148.                 j=10;                                                 //掃描間隔時(shí)間設(shè)定
  149.                 while(j--);       
  150.                 GPIO_DIG=0x00;//消隱
  151.         }
  152. }

  153. void Delay10ms(void)   //誤差 0us
  154. {
  155.     unsigned char a,b,c;
  156.     for(c=1;c>0;c--)
  157.         for(b=38;b>0;b--)
  158.             for(a=130;a>0;a--);
  159. }
  160. void KeyDown(void)
  161. {
  162.         char a=0;
  163.         GPIO_KEY=0x0f;
  164.         if(GPIO_KEY!=0x0f)//讀取按鍵是否按下
  165.         {
  166.                 Delay10ms();//延時(shí)10ms進(jìn)行消抖
  167.                 if(GPIO_KEY!=0x0f)//再次檢測(cè)鍵盤(pán)是否按下
  168.                 {
  169.                        
  170.                         KeyState=1;
  171.                         //測(cè)試列
  172.                         GPIO_KEY=0X0F;
  173.                         switch(GPIO_KEY)
  174.                         {
  175.                                 case(0X07):        KeyValue=0;break;
  176.                                 case(0X0b):        KeyValue=1;break;
  177.                                 case(0X0d): KeyValue=2;break;
  178.                                 case(0X0e):        KeyValue=3;break;
  179.                         }
  180.                         //測(cè)試行
  181.                         GPIO_KEY=0XF0;
  182.                         switch(GPIO_KEY)
  183.                         {
  184.                                 case(0X70):        KeyValue=KeyValue;break;
  185.                                 case(0Xb0):        KeyValue=KeyValue+4;break;
  186.                                 case(0Xd0): KeyValue=KeyValue+8;break;
  187.                                 case(0Xe0):        KeyValue=KeyValue+12;break;
  188.                         }
  189.                         while((a<50)&&(GPIO_KEY!=0xf0))         //檢測(cè)按鍵松手檢測(cè)
  190.                         {
  191. ……………………

  192. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png

所有資料51hei提供下載:
雙機(jī)串口通信數(shù)碼管顯示程序&amp;仿真普中開(kāi)發(fā)板驗(yàn)證OK.zip (186.92 KB, 下載次數(shù): 192)

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:341926 發(fā)表于 2018-6-21 09:46 | 顯示全部樓層
附件下載了怎么打開(kāi)不了
回復(fù)

使用道具 舉報(bào)

ID:433677 發(fā)表于 2018-11-27 18:09 | 顯示全部樓層
以解壓縮的方式打開(kāi)即可
回復(fù)

使用道具 舉報(bào)

ID:474896 發(fā)表于 2019-2-17 20:04 | 顯示全部樓層
什么文件格式?下載了都打不開(kāi)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 少妇一级淫片aaaaaaaaa | 国产91久久久久久久免费 | 日本天天操| 欧美高清视频一区 | 国产国语精品 | 国产视频福利在线观看 | 日日摸日日碰夜夜爽2015电影 | www网站在线观看 | 欧美成人视屏 | 国产农村一级国产农村 | 日日日操 | 国产一区二区精 | 久久精品网| 在线播放国产一区二区三区 | 成人不卡| 成人av高清在线观看 | 欧美性一区二区三区 | 日韩成人免费视频 | 色综合网站 | 成人三级在线播放 | 日韩日韩日韩日韩日韩日韩日韩 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 久久青| 日批免费看 | 国产一区二区三区不卡av | 国产一区二区电影 | 国产在线观看一区二区三区 | 97视频在线观看免费 | 日韩精品一区二区三区久久 | 欧美三级在线 | 特黄av| 日韩精品久久久久久 | 色婷婷一区二区三区四区 | 天堂色区 | 国产高清在线精品 | 成人在线h| 国产精品一区二区三区久久 | 日韩电影中文字幕在线观看 | 精品久久久久久久久久久久 | 中文字幕在线精品 | h片在线看|