找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1729|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

把字符數(shù)組存到AT24c02并在串口調(diào)試助手顯示的單片機程序怎么改?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:623732 發(fā)表于 2019-11-10 08:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<reg52.h>  //52系列單片機頭文件
  2. #include<stdio.h>
  3. #define uchar unsigned char        //定義無符號數(shù)據(jù)類型
  4. #define uint unsigned int
  5. sbit sda=P2^0;//串行數(shù)據(jù)輸入/輸出端
  6. sbit scl=P2^0;//串行時鐘輸入端
  7. uint i;
  8. char b[8],su[8]={'s','u','j','u','n','j','u','n'};

  9. void delay(){;;} //定義延時空操作
  10. void init1(){
  11. PCON|=0x80;
  12. SCON=0x50;//串口控制寄存器,等價于SM0=0,SM1=1,SM2=0,串口方式一通信
  13. TMOD=0X20;    //設(shè)置定時器1為模式2,做為波特率發(fā)生器,8位初值自動重裝的8位定時器,定時到TH1的值自動裝到TL1        
  14. TH1=0xff;//設(shè)置波特率為9600
  15. TL1=0xff;        
  16.         
  17. TI = 1;//向CPU發(fā)送串口中斷申請,直接使用printf必須加入此句才能實現(xiàn)發(fā)送        
  18. TR1=1;     //啟動波特率發(fā)生器
  19. }
  20. void delay1ms(uint z)//延時1ms函數(shù)
  21. {
  22. uint x,y;
  23. for(x=z;x>0;x--)
  24. for(y=110;y>0;y--);
  25. }
  26. void start()//啟動信號:SCL在高電平期間,SDA一個下降沿啟動信號
  27. {
  28. sda=1;
  29. delay();//空操作延時
  30. scl=1;
  31. delay();
  32. sda=0;
  33. delay();
  34. }
  35. void stop()//停止信號:SCL在高電平期間,SDA一個上升沿停止信號
  36. {
  37. sda=0;
  38. delay();
  39. scl=1;
  40. delay();
  41. sda=1;
  42. delay();
  43. }
  44. void respons()//應(yīng)答信號:SLC在高電平期間,SDA被從設(shè)備拉為低電平表示電平答應(yīng)
  45. {
  46. uchar i;
  47. scl=1;
  48. delay();
  49. while((sda==1)&&(i<250))//若沒有收到器件應(yīng)答,主器件將默認已收到數(shù)據(jù)
  50. i++;
  51. scl=0;
  52. delay();
  53. }
  54. void init()        //總線初始化,將總線都拉高以釋放總線
  55. {
  56. sda=1;
  57. delay();
  58. scl=1;
  59. delay();
  60. }
  61. void write_byte(uchar date)//寫一個字節(jié),串行發(fā)送1字節(jié)時,需要把其中的8位一位一位地發(fā)送出去
  62. {
  63. uchar i,temp;
  64. temp=date;
  65. for(i=0;i<8;i++);{
  66. temp=temp<<1;//將temp左移一位,最高位將移入PSW寄存器的CY位中
  67. scl=0;
  68. delay();
  69. sda=CY;//將CY賦給SDA進而在SCL的控制下發(fā)送出去
  70. delay();
  71. scl=1;
  72. delay();
  73. }
  74. scl=0;
  75. delay();
  76. sda=1;
  77. delay();
  78. }
  79. uchar read_byte()//讀一字節(jié)
  80. {
  81. uchar i,k;//定義臨時變量
  82. scl=0;
  83. delay();
  84. sda=1;
  85. delay();
  86. for(i=0;i<8;i++)//依次把8個獨立的位放入1字節(jié)中來完成接收
  87. {
  88. scl=1;
  89. delay();
  90. k=(k<<1)|sda;//將k左移一位與SDA進行“或”運算
  91. scl=0;
  92. delay();
  93. }
  94. return k;
  95. }
  96. void write_add(uchar address,uchar date)
  97. {
  98. start();
  99. write_byte(0xa0);
  100. respons();
  101. write_byte(address);
  102. respons();
  103. write_byte(date);
  104. respons();
  105. stop();
  106. }
  107. uchar read_add(uchar address)
  108. {
  109. uchar date;
  110. start();
  111. write_byte(0xa0);
  112. respons();
  113. write_byte(address);
  114. respons();
  115. start();
  116. write_byte(0xa1);
  117. respons();
  118. start();
  119. date=read_byte();
  120. stop();
  121. return date;
  122. }

  123. void main()         //主函數(shù)
  124. {
  125. init();
  126. init1();
  127. P1=0xFF;
  128. while(1){
  129. for(i=0;i<8;i++)
  130. {
  131. b[i]=su[i];
  132. write_add(23,b[i]);
  133. delay1ms(100);
  134. P1=read_add(23);
  135. b[i]=read_add(23);
  136. }        

  137. delay1ms(1000);
  138. for(i=1;i<8;i++);
  139. printf("%c\n",b[i]);
  140. }

  141.    }
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:584814 發(fā)表于 2019-11-13 10:36 | 只看該作者
AT24c02能保存數(shù)據(jù)(數(shù)字),對于字符必須行編碼后保存,讀出時還原成字符。
常用的編碼為ASCII或區(qū)位碼。
回復(fù)

使用道具 舉報

板凳
ID:623732 發(fā)表于 2019-11-15 19:49 | 只看該作者
man1234567 發(fā)表于 2019-11-13 10:36
AT24c02能保存數(shù)據(jù)(數(shù)字),對于字符必須行編碼后保存,讀出時還原成字符。
常用的編碼為ASCII或區(qū)位碼。

怎么把字符轉(zhuǎn)換成數(shù)字
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表