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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1436|回復: 0
收起左側(cè)

單片機怎樣把10進制unsigned int數(shù)據(jù)存入2402芯片?如何拆分與整合?

[復制鏈接]
ID:320097 發(fā)表于 2019-5-14 16:09 | 顯示全部樓層 |閱讀模式
下面是一個試驗程序,4個位是直接分開的,沒有整合到一個unsigned int型里面,那樣就還要進行一次分離,打算把這4個位分別存入24C02的某個地址,下一次再讀回來接著顯示,但問題是讀回來的數(shù)字不能在數(shù)碼管上正確顯示,請教一個各位師傅你們是怎樣做的,int型不能直接存入24c02,必然是要拆開的,拆成兩個char型(一個高8位,一個低8位)?可是拆了以后,讀回來又不知道怎么整合到一起

單片機源程序如下:
  1. #include <STC89C5xRC.H>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit SDA=P2^7;
  6. sbit SCL=P2^6;
  7. sbit w1=P3^4;
  8. sbit w2=P3^5;
  9. sbit w3=P3^7;
  10. sbit w4=P3^6;
  11. uchar cc,ge,shi,bai,qian;
  12. uchar code table[ ]={0xc0,0xf9,0xa4,0xb0,0x99,
  13.                      0x92,0x82,0xf8,0x80,0x90 };  //共陽0~9段碼
  14. void delay(uint z)
  15.     {
  16.          uint x,y;
  17.          for(x=z;x>0;x--)
  18.              for(y=114;y>0;y--);
  19.         }
  20. void start( )
  21.         {
  22.           SDA=1;       //發(fā)送起始條件的數(shù)據(jù)信號
  23.           _nop_( );
  24.           SCL=1;
  25.           _nop_( );    //起始條件建立時間大于4.7us,延時
  26.           _nop_( );
  27.           _nop_( );
  28.           _nop_( );
  29.           _nop_( );   
  30.           SDA=0;       //發(fā)送起始信號
  31.           _nop_( );    //起始條件鎖定時間大于4μ
  32.           _nop_( );
  33.           _nop_( );
  34.           _nop_( );
  35.           _nop_( );      
  36.           SCL=0;    //鉗住I2C總線,準備發(fā)送或接收數(shù)據(jù)
  37.           _nop_( );
  38.           _nop_( );                        //SCL置低,準備接收或發(fā)送數(shù)據(jù)
  39.         }
  40. void stop( )
  41.         {
  42.           SDA=0;           //發(fā)送結(jié)束條件的數(shù)據(jù)信號
  43.           _nop_( );        //發(fā)送結(jié)束條件的時鐘信號
  44.           SCL=1;           //結(jié)束條件建立時間大于4μ
  45.           _nop_( );
  46.           _nop_( );
  47.           _nop_( );
  48.           _nop_( );
  49.           _nop_( );
  50.           SDA=1;            //發(fā)送I2C總線結(jié)束信號
  51.           _nop_( );
  52.           _nop_( );
  53.           _nop_( );
  54.           _nop_( );                //延時保持4.7US以上
  55.         }
  56. void write(uchar a)
  57.         {
  58.          uchar b,shu;
  59.          for(b=0;b<8;b++)           //要傳送的數(shù)據(jù)長度為8位
  60.             {
  61.               shu=a<<b;             //把即將發(fā)送的數(shù)據(jù)的為移到最高位
  62.               if((shu&0x80)!=0)                //判斷最高位是否為0
  63.                         SDA=1;                        //不等于0說明最明當前要發(fā)送的數(shù)據(jù)為1
  64.               else  SDA=0;          //否則數(shù)據(jù)為0     
  65.              SCL=1;                 //置時鐘線為高,通知被控器開始接收數(shù)據(jù)位
  66.               _nop_( );
  67.               _nop_( );             //保證時鐘高電平周期大于4μ
  68.               _nop_( );
  69.               _nop_( );
  70.               _nop_( );         
  71.               SCL=0;
  72.             }
  73.         _nop_( );
  74.             SDA=1;               //8位發(fā)送完后釋放數(shù)據(jù)線,準備接收應答位
  75.             _nop_( );   
  76.             SCL=1;
  77.             _nop_( );
  78.         }
  79. bit ack( )                                         //等待應答函數(shù)
  80.         {
  81.          bit h;
  82.          SDA=1;
  83.          _nop_( );
  84.          SCL=1;                                        //SDA和SCL全部置高
  85.          _nop_( );
  86.          _nop_( );
  87.          _nop_( );
  88.          _nop_( );
  89.          SCL=0;                                  //等待4.7US以上,把SCL置低
  90.          _nop_( );
  91.          _nop_( );
  92.          _nop_( );
  93.          _nop_( );
  94.          h=SDA;                                 //等待4.7SU以上讀取SDA應答信號
  95.          return        h;                         //應答成功則是0,沒有應答則是1
  96.         }
  97. uchar reade( )                          //接收數(shù)據(jù)
  98.         {
  99.          uchar d,g;
  100.          SDA=1;                                  //數(shù)據(jù)線置高電平
  101.          for(d=0;d<8;d++)
  102.                  {
  103.                   _nop_( );
  104.                   _nop_( );
  105.                   SCL=0;
  106.                   _nop_( );
  107.                   _nop_( );
  108.                   _nop_( );
  109.                   _nop_( );                 //SCL低電平,數(shù)據(jù)變化
  110.                   SCL=1;                 
  111.                   _nop_( );
  112.                   _nop_( );                 //SCL高電平,數(shù)據(jù)穩(wěn)定
  113.                   if(SDA==1)
  114.                     g=(g<<1)|0x01; //如果讀到的數(shù)據(jù)是1就是最低位置1
  115.                   else
  116.                     g=g<<1;                //否則讀到是0,直接左移1位(左移后右補0)
  117.                 }
  118.           return g;                 //經(jīng)過8次讀取移位,把g返回
  119.         }
  120. void fasong(uchar add , uchar tab)          //發(fā)送一個字節(jié)
  121.         {
  122.           start( );                  //啟動總線
  123.           write(0xa0);          //器件地址(發(fā)送)
  124.       ack( );              //等待應答
  125.           write(add);     //發(fā)送器件內(nèi)部地址
  126.       ack( );                  //等待應答
  127.           write(tab);          //發(fā)送數(shù)據(jù)
  128.           ack( );                  //等待應答
  129.           stop( );
  130.         }
  131. uchar jieshou(uchar add)        //接收一個字節(jié)
  132.         {
  133.           uchar shu;
  134.           start( );                //讀取(開始-器件地址(發(fā))- 器件內(nèi)部地址 - 開始 - 器件地址(收)- 接收數(shù)據(jù) -發(fā)應答或停止接收
  135.           write(0xa0);
  136.           ack( );
  137.           write(add);
  138.           ack( );
  139.           start( );
  140.           write(0xa1);
  141.           ack( );
  142.           shu=reade( );
  143.           stop( );
  144.           return shu;
  145.         }
  146. void display(uchar a , uchar b , uchar c , uchar d)
  147.         {
  148.          if(a!=0)
  149.                  {
  150.                  w1=0;
  151.                  P0=table[a];
  152.                  delay(5);
  153.                  P0=0XFF;
  154.                  w1=1;
  155.                 }
  156.          if(a!=0||b!=0)
  157.                  {
  158.                  w2=0;
  159.                  P0=table[b];
  160.                  delay(5);
  161.                  P0=0XFF;
  162.                  w2=1;
  163.                 }
  164.          if(a!=0||b!=0||c!=0)
  165.                  {
  166.                  w3=0;
  167.                  P0=table[c];
  168.                  delay(5);
  169.                  P0=0XFF;
  170.                  w3=1;
  171.                 }
  172.          w4=0;
  173.      P0=table[d];
  174.          delay(5);
  175.          P0=0XFF;
  176.          w4=1;
  177.         }
  178. void main( )
  179.         {
  180.           uchar a1,a2,a3,a4;
  181.           w1=w2=w3=w4=1;
  182.           EA=1;
  183.           ET0=1;
  184.           TMOD=0X01;
  185.           TH0=0X3C;
  186.           TL0=0XB0;
  187.           fasong(0x03,9);
  188.           fasong(0x04,8);
  189.           fasong(0x05,7);
  190.           fasong(0x06,6);
  191.           delay(100);
  192.           a1=jieshou(0x03);
  193.           ge=a1;           
  194.           a2=jieshou(0x04);
  195.           shi=a2;
  196.           a3=jieshou(0x05);
  197.           bai=a3;
  198.           a4=jieshou(0x06);
  199.           qian=a4;
  200.           TR0=1;
  201.           while(1)
  202.           {
  203.            display(qian,bai,shi,ge);
  204.           }
  205.         }
  206. void aa( ) interrupt 1
  207.         {
  208.          TH0=0X3c;
  209.          TL0=0Xb0;
  210.          cc++;
  211.          if(cc==1)
  212.                  {
  213.                  cc=0;
  214.                  ge++;
  215.                  if(ge==10)
  216.                          {
  217.                            ge=0;
  218.                           shi++;
  219.                           if(shi==10)
  220.                                   {
  221.                                  shi=0;
  222.                                  bai++;
  223.                                  if(bai==10)
  224.                                          {
  225.                                          bai=0;
  226.                                          qian++;
  227.                                          if(qian==10)
  228.                                                  {
  229.                                                  qian=0;
  230.                                                 }
  231.                                         }
  232.                                 }
  233.                         }
  234.                 }
  235.         }
復制代碼

回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av福利网站| 日本一二区视频 | 久久国产亚洲 | 欧美日韩一| 亚洲视频免费在线播放 | 91久久久久久久久 | 国产一级久久久久 | 亚洲一区二区三区四区五区午夜 | 在线成人精品视频 | 综合网伊人 | 黑人巨大精品 | 久久精品久久久久久 | 欧美日韩综合一区 | 欧美激情在线观看一区二区三区 | 日韩av在线不卡 | 国产精品美女www | 成人免费一级 | 日本特黄a级高清免费大片 国产精品久久性 | 国产精品91视频 | 亚洲国产福利视频 | 日韩精品视频在线播放 | 成人超碰在线 | 国产在线区| 国产日韩久久 | 国产免费一区二区 | 日韩免费网站 | 久久高清国产 | 成人福利电影 | 国内自拍偷拍 | 亚洲视频国产视频 | www国产成人免费观看视频 | 99免费在线视频 | 精产国产伦理一二三区 | 日韩精品一区二区三区 | 国产精品美女久久久久久久网站 | 日本淫视频 | 精品欧美一区二区久久久伦 | 麻豆av免费观看 | 亚洲福利电影网 | 日韩福利一区 | 国产一区三区在线 |