找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 29|回复: 1
打印 上一主题 下一主题
收起左侧

使用NST1001数字脉冲输出型温度传感器实验

[复制链接]
跳转到指定楼层
楼主
在一定周期内对传感器输出的脉冲计数,计算成温度值。通过0.91寸的12832 OLED显示并用串口发送。非常好用

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1136941 发表于 2026-3-30 13:47 | 只看该作者
  1. #include "STC8H.H"

  2. #define uint8_t unsigned char
  3. #define uint16_t unsigned int        

  4. unsigned int count=0;
  5. unsiged int dat=0;
  6. unsigned char sendBuf[5];

  7. uint8_t code zk[]=
  8. {
  9. /*  "0"  Gulim12 8x16   -0-*/
  10. 0x00,0xF0,0x08,0x04,0x04,0x04,0x08,0xF0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,
  11. /*  "1"  Gulim12 8x16   -15-*/
  12. 0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,
  13. /*  "2"  Gulim12 8x16   -31-*/
  14. 0x00,0x30,0x08,0x04,0x04,0x04,0x88,0x70,0x00,0x30,0x28,0x24,0x22,0x21,0x20,0x20,
  15. /*  "3"  Gulim12 8x16   -47-*/
  16. 0x00,0x10,0x08,0x84,0x84,0x84,0x48,0x30,0x00,0x08,0x10,0x20,0x20,0x20,0x11,0x0E,
  17. /*  "4"  Gulim12 8x16   -63-*/
  18. 0x00,0x80,0x60,0x18,0x04,0xFC,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x3F,0x04,0x04,
  19. /*  "5"  Gulim12 8x16   -79-*/
  20. 0x00,0xFC,0x84,0x44,0x44,0x44,0x84,0x04,0x00,0x09,0x10,0x20,0x20,0x20,0x10,0x0F,
  21. /*  "6"  Gulim12 8x16   -95-*/
  22. 0x00,0xF0,0x88,0x44,0x44,0x44,0x88,0x10,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,
  23. /*  "7"  Gulim12 8x16   -111-*/
  24. 0x00,0x04,0x04,0x04,0x84,0x64,0x14,0x0C,0x00,0x00,0x00,0x3C,0x03,0x00,0x00,0x00,
  25. /*  "8"  Gulim12 8x16   -127-*/
  26. 0x00,0x30,0x48,0x84,0x84,0x84,0x48,0x30,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x0E,
  27. /*  "9"  Gulim12 8x16   -143-*/
  28. 0x00,0xF0,0x08,0x04,0x04,0x04,0x08,0xF0,0x00,0x08,0x11,0x22,0x22,0x22,0x11,0x0F,
  29. /*  "."  Gulim12 8x16   -159-*/
  30. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,
  31. /*  ":"  Gulim12 8x16   -175-*/
  32. 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,
  33. /*  "%"  Gulim12 8x16   -191-*/
  34. 0x00,0x18,0x24,0x24,0x98,0x40,0x20,0x00,0x00,0x04,0x02,0x19,0x24,0x24,0x18,0x00,

  35. /*  "A"  Gulim12 8x16   -207-*/
  36. 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
  37. /*  "B"  Gulim12 8x16   -223-*/
  38. 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
  39. /*  "C"  Gulim12 8x16   -239-*/
  40. 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
  41. /*  "D"  Gulim12 8x16   -255-*/
  42. 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
  43. /*  "E"  Gulim12 8x16   -271-*/
  44. 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
  45. /*  "F"  Gulim12 8x16   -287-*/
  46. 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
  47. /*  "G"  Gulim12 8x16   -303-*/
  48. 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
  49. /*  "H"  Gulim12 8x16   -319-*/
  50. 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
  51. /*  "I"  Gulim12 8x16   -335-*/
  52. 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
  53. /*  "J"  Gulim12 8x16   -351-*/
  54. 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
  55. /*  "K"  Gulim12 8x16   -367-*/
  56. 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
  57. /*  "L"  Gulim12 8x16   -383-*/
  58. 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
  59. /*  "M"  Gulim12 8x16   -399-*/
  60. 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
  61. /*  "N"  Gulim12 8x16   -415-*/
  62. 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
  63. /*  "O"  Gulim12 8x16   -431-*/
  64. 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
  65. /*  "P"  Gulim12 8x16   -447-*/
  66. 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
  67. /*  "Q"  Gulim12 8x16   -463-*/
  68. 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
  69. /*  "R"  Gulim12 8x16   -479-*/
  70. 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
  71. /*  "S"  Gulim12 8x16   -495-*/
  72. 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
  73. /*  "T"  Gulim12 8x16   -511-*/
  74. 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
  75. /*  "U"  Gulim12 8x16   -527-*/
  76. 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
  77. /*  "V"  Gulim12 8x16   -543-*/
  78. 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
  79. /*  "W"  Gulim12 8x16   -559-*/
  80. 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
  81. /*  "X"  Gulim12 8x16   -575-*/
  82. 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
  83. /*  "Y"  Gulim12 8x16   -591-*/
  84. 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
  85. /*  "Z"  Gulim12 8x16   -607-*/
  86. 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58

  87. /*  "sui"  song12 16x16   623--*/
  88. 0x00,0xFE,0x22,0x5A,0x86,0x08,0x10,0x44,0x24,0xF4,0x2C,0x27,0x24,0xE4,0x04,0x00,
  89. 0x00,0xFF,0x04,0x08,0x87,0x41,0x3F,0x40,0x80,0xBF,0x85,0x95,0xA5,0x9F,0x80,0x00,
  90. /*  "yuan"  song12 16x16   -655-*/
  91. 0x20,0x30,0xAC,0x63,0x30,0x00,0x20,0x2C,0xAB,0x6A,0xAA,0x2A,0x3A,0x26,0xA0,0x00,
  92. 0x22,0x67,0x22,0x12,0x12,0x00,0x49,0x49,0x24,0x52,0x89,0x7F,0x02,0x0D,0x10,0x00,
  93. /*  "zhai"  song12 16x16   -687-*/
  94. 0x80,0x84,0x84,0x44,0x4C,0x54,0x25,0x26,0x24,0x54,0x4C,0x44,0x84,0x84,0x80,0x00,
  95. 0x00,0x00,0xF8,0x09,0x09,0x7D,0x0B,0x09,0x79,0x09,0x49,0x89,0x78,0x00,0x00,0x00,
  96. /*  "ju"  song12 16x16   -719-*/
  97. 0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xF2,0x92,0x92,0x92,0x9E,0x80,0x80,0x00,
  98. 0x40,0x30,0x0F,0x00,0xFC,0x44,0x44,0x44,0x47,0x44,0x44,0x44,0xFC,0x00,0x00,0x00,
  99. /*  "shi"  song12 16x16   -751-*/
  100. 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
  101. 0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
  102. /*  "℃"  16X16   -783-*/
  103. 0x00,0x0C,0x12,0x12,0x0C,0xC0,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x00,0x00,
  104. 0x00,0x00,0x00,0x00,0x00,0x0F,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x08,0x00,0x00,
  105. /*  "%"  16X16   -815-*/
  106. 0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x00,
  107. 0x00,0x00,0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x1C,0x22,0x22,0x22,0x1C,0x00,0x00,
  108. /*  " "  8x16   -847-*/
  109. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  110. };   

  111. sbit DQ=P3^2;
  112. sbit SDA=P1^0;
  113. sbit SCL=P1^1;

  114. //**********函数声明********//
  115. void chushihua();
  116. void Delay1000ms(void);        
  117. void delay1us();
  118. void i2c_Start();
  119. void i2c_Stop();
  120. void Write_i2c_Byte(uint8_t i2c_Byte);
  121. void Write_i2c_Cmd(uint8_t i2c_Cmd);
  122. void Write_i2c_Data(uint8_t i2c_Data);
  123. void Init_ssd1306_32();
  124. void Clear_top();
  125. void Clear_buttom();
  126. void Write_8X16(uint8_t c0,uint8_t aa,uint16_t add);
  127. void Write_16X16(uint8_t c0,uint8_t aa,uint16_t add);
  128. //**************************//

  129. void chushihua()
  130. {               
  131.         AUXR &= 0x7F;                        //定时器时钟12T模式
  132.         TMOD &= 0xF0;                        //设置定时器模式
  133.         TL0 = 0x00;                                //设置定时初始值//35毫秒@11.0592MHz
  134.         TH0 = 0x82;                                //设置定时初始值
  135.         TF0 = 0;                                //清除TF0标志
  136.         TR0 = 0;                                //定时器0开始计时
  137.         ET0 = 1;                                //使能定时器0中断
  138.         
  139.         IT1=1;
  140.         EX0=1;
  141.         EA=1;
  142.         
  143.         SCON = 0x50;                //8位数据,可变波特率/9600@11.0592MHz
  144.         AUXR &= 0xBF;                //定时器时钟12T模式
  145.         AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
  146.         TMOD &= 0x0F;                //设置定时器模式
  147.         TL1 = 0xE8;                        //设置定时初始值
  148.         TH1 = 0xFF;                        //设置定时初始值
  149.         ET1 = 0;                        //禁止定时器中断
  150.         TR1 = 1;                        //定时器1开始计时
  151.         
  152.         P0M0 = 0x00;
  153.         P0M1 = 0x00;
  154.   P1M0 = 0x00;
  155.         P1M1 = 0x00;
  156.         P2M0 = 0x00;
  157.         P2M1 = 0x00;
  158.         P3M0 = 0x00;
  159.         P3M1 = 0x00;
  160. }

  161. void Timer0_Isr(void) interrupt 1 //35ms采集周期
  162. {
  163.         EX0=0;    //关闭外中断0
  164.         TR0=0;    //关闭定时器0
  165.         dat=count;//转存计数值
  166.         count=0;
  167.         EX0=1;    //开外中断0
  168. }

  169. void int0_isr()interrupt 0
  170. {
  171.         if(DQ==0)
  172.         {
  173.           count++;
  174.           TR0=1;
  175.         }
  176. }

  177. void Delay1000ms(void)        //@11.0592MHz
  178. {
  179.         unsigned char data i, j, k;

  180.         i = 57;
  181.         j = 27;
  182.         k = 112;
  183.         do
  184.         {
  185.                 do
  186.                 {
  187.                         while (--k);
  188.                 } while (--j);
  189.         } while (--i);
  190. }


  191. void delay1us()//1us@11.0592MHz
  192. {
  193.         unsigned char i;
  194.         _nop_();
  195.         _nop_();
  196.         i = 1;
  197.         while (--i);
  198. }

  199. void i2c_Start()
  200. {
  201.    SCL=1;
  202.    delay1us();
  203.    SDA=1;
  204.    delay1us();
  205.    SDA=0;
  206.    delay1us();
  207.    SCL=0;
  208. }

  209. void i2c_Stop()
  210. {
  211.    SCL=0;
  212.    delay1us();
  213.    SDA=0;
  214.    delay1us();
  215.    SCL=1;
  216.    delay1us();
  217.    SDA=1;
  218. }

  219. void Write_i2c_Byte(uint8_t i2c_Byte)
  220. {
  221.     uint8_t i;
  222.     for(i=0;i<8;i++)
  223.     {
  224.       if(i2c_Byte & 0x80)
  225.       SDA=1;
  226.       else
  227.       SDA=0;
  228.       delay1us();
  229.       SCL=1;
  230.       delay1us();
  231.       SCL=0;
  232.       delay1us();
  233.       i2c_Byte<<=1;
  234.     }
  235.       SDA=1;
  236.       delay1us();
  237.       SCL=1;
  238.       delay1us();
  239.       SCL=0;
  240. }

  241. void Write_i2c_Cmd(uint8_t i2c_Cmd)
  242. {
  243.    i2c_Start();
  244.    Write_i2c_Byte(0x78);
  245.    Write_i2c_Byte(0x00);
  246.    Write_i2c_Byte(i2c_Cmd);
  247.    i2c_Stop();
  248. }

  249. void Write_i2c_Data(uint8_t i2c_Data)
  250. {
  251.    i2c_Start();
  252.    Write_i2c_Byte(0x78);
  253.    Write_i2c_Byte(0x40);
  254.    Write_i2c_Byte(i2c_Data);
  255.    i2c_Stop();
  256. }

  257. void Init_ssd1306_32()
  258. {
  259.     Write_i2c_Cmd(0xAE);
  260.     Write_i2c_Cmd(0x20);
  261.     Write_i2c_Cmd(0x00);
  262.     Write_i2c_Cmd(0xb0);
  263.     Write_i2c_Cmd(0xc8);
  264.     Write_i2c_Cmd(0x00);
  265.     Write_i2c_Cmd(0x10);
  266.     Write_i2c_Cmd(0x40);
  267.     Write_i2c_Cmd(0x81);
  268.     Write_i2c_Cmd(0xdf);
  269.     Write_i2c_Cmd(0xa1);
  270.     Write_i2c_Cmd(0xa6);
  271.     Write_i2c_Cmd(0xa8);
  272.     Write_i2c_Cmd(0x1F);
  273.     Write_i2c_Cmd(0xa4);
  274.     Write_i2c_Cmd(0xd3);
  275.     Write_i2c_Cmd(0x00);
  276.     Write_i2c_Cmd(0xd5);
  277.     Write_i2c_Cmd(0xf0);
  278.     Write_i2c_Cmd(0xd9);
  279.     Write_i2c_Cmd(0x22);
  280.     Write_i2c_Cmd(0xda);
  281.     Write_i2c_Cmd(0x12);
  282.     Write_i2c_Cmd(0xdb);
  283.     Write_i2c_Cmd(0x20);
  284.     Write_i2c_Cmd(0x8d);
  285.     Write_i2c_Cmd(0x14);
  286.     Write_i2c_Cmd(0xDA);
  287.     Write_i2c_Cmd(0x02);
  288.     Write_i2c_Cmd(0xaf);
  289. }

  290. void Clear_top()
  291. {
  292.      uint16_t i;
  293.      Write_i2c_Cmd(0x22);
  294.      Write_i2c_Cmd(0xb0);
  295.      Write_i2c_Cmd(0xb1);
  296.      Write_i2c_Cmd(0x21);
  297.      Write_i2c_Cmd(0);
  298.      Write_i2c_Cmd(127);
  299.      for(i=0;i<512;i++) Write_i2c_Data(0x00);
  300. }

  301. void Clear_buttom()
  302. {
  303.       uint16_t i;
  304.       Write_i2c_Cmd(0x22);
  305.       Write_i2c_Cmd(0xb2);
  306.       Write_i2c_Cmd(0xb3);
  307.       Write_i2c_Cmd(0x21);
  308.       Write_i2c_Cmd(0);
  309.       Write_i2c_Cmd(127);
  310.       for(i=0;i<512;i++) Write_i2c_Data(0x00);
  311. }

  312. void Write_8X16(uint8_t c0,uint8_t aa,uint16_t add)
  313. {
  314.       uint8_t m;
  315.       Write_i2c_Cmd(0x22);
  316.       Write_i2c_Cmd(c0);
  317.       Write_i2c_Cmd(c0+1);
  318.       Write_i2c_Cmd(0x21);
  319.       Write_i2c_Cmd(aa);
  320.       Write_i2c_Cmd(aa+7);
  321.       for(m=0;m<16;m++) Write_i2c_Data(zk[add++]);
  322. }

  323. void Write_16X16(uint8_t c0,uint8_t aa,uint16_t add)
  324. {
  325.       uint8_t m;
  326.       Write_i2c_Cmd(0x22);
  327.       Write_i2c_Cmd(c0);
  328.       Write_i2c_Cmd(c0+1);
  329.       Write_i2c_Cmd(0x21);
  330.       Write_i2c_Cmd(aa);
  331.       Write_i2c_Cmd(aa+15);
  332.       for(m=0;m<32;m++) Write_i2c_Data(zk[add++]);
  333. }
  334. //*******************************//

  335. void main()
  336. {
  337.         float wendu;
  338.         unsigned int temp;
  339.         unsigned char i;
  340.         
  341.         chushihua();
  342.         Init_ssd1306_32();
  343.   Clear_top();
  344.   Clear_buttom();
  345.         
  346.   Write_8X16(0xb0,8,511);//T温度
  347.   Write_8X16(0xb0,16,271);//E
  348.   Write_8X16(0xb0,24,399);//M
  349.   Write_8X16(0xb0,32,447);//P
  350.   Write_8X16(0xb0,40,175);//:
  351.         
  352.         while(1)
  353.         {
  354.                 if(dat>=801)//正温度/801对应0度
  355.                 {
  356.                         wendu=(dat-801)*0.0625;
  357.                 }
  358.                 else        //负温度/801对应0度
  359.                 {
  360.                         wendu=(801-dat)*0.0625;
  361.                 }
  362.                 temp=wendu*100;//扩大100倍
  363.                
  364.                 sendBuf[0]=temp/10000%10;
  365.                 sendBuf[1]=temp/1000%10;
  366.                 sendBuf[2]=temp/100%10;
  367.                 sendBuf[3]=temp/10%10;
  368.                 sendBuf[4]=temp%10;
  369.                
  370.                 Delay1000ms();
  371.     P35=~P35;               
  372.                
  373.                 for(i=0;i<5;i++)
  374.                 {
  375.                         SBUF=sendBuf[i];//串口发送
  376.                         while(TI==0);
  377.                         TI=0;
  378.                 }

  379.                 if(sendBuf[0]>0)
  380.                 {
  381.                  Write_8X16(0xb2,0*8,sendBuf[0]*16);
  382.                 }
  383.                 else
  384.                 {
  385.                  Write_8X16(0xb2,0*8,847);//显示" "消零
  386.                 }
  387.                  Write_8X16(0xb2,1*8,sendBuf[1]*16);
  388.                  Write_8X16(0xb2,2*8,sendBuf[2]*16);
  389.                  Write_8X16(0xb2,3*8,10*16);//"."
  390.                  Write_8X16(0xb2,4*8,sendBuf[3]*16);
  391.                  Write_8X16(0xb2,5*8,sendBuf[4]*16);
  392.                  Write_16X16(0xb2,6*8,783);//℃
  393.         }
  394. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表