找回密码
 立即注册

QQ登录

只需一步,快速开始

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

LPC2148的ADC多通道数据采集程序

[复制链接]
跳转到指定楼层
楼主
ID:219534 发表于 2017-7-14 00:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个是课设:
多通道.doc (41 KB, 下载次数: 108)

  1. #include "config.h"
  2. #include "stdio.h"
  3. #define   GPIOSET(PIN)  IO0SET = PIN    // 方便修改置位端口
  4. #define   GPIOCLR(PIN)        IO0CLR = PIN    // 方便修改清位端口
  5. #define   LCD_CON           0x00000250           // 液晶显示控制字
  6. #define  E_CLK  (1<<4)                    //clock input   同步时钟输入端         P0.4
  7. const uint32  RW_SID=  (1<<6);         //data input/output 串行数据输入、输出端        P0.6      
  8. const uint32  CS =     (1<<9);                  //P0.9
  9. unsigned char IC_DAT1[] = "多通道数据采集系统";

  10. /*************************************************************
  11. *  名称:delay()
  12. *  功能:延时程序
  13. **************************************************************/
  14. void delay(uint32 dly)
  15. {
  16.         uint32 i;
  17.        
  18.         for ( ; dly>0; dly--)
  19.                 for (i=0; i<10; i++);
  20. }
  21.   
  22. /******************************************************************
  23. *  名称:SeddByte()
  24. *  功能:发送1字节数据
  25. *******************************************************************/
  26. void     SendByte(uint8    data)   
  27.     {   
  28.       uint8   i;
  29.       IO0SET=CS;  
  30.       for(i=0;i<8;i++)   
  31.        {  
  32.                         IO0CLR=E_CLK ;delay(5);
  33.                         if(data&0x80)
  34.                         {
  35.                                 IO0SET=RW_SID;delay(5);
  36.                         }
  37.                         else IO0CLR=RW_SID;   
  38.                         {
  39.                                 IO0SET=E_CLK;delay(5);
  40.                         }
  41.                         data=data<<1;   
  42.        }
  43.        IO0CLR=CS;  
  44.     }
  45.   
  46. /******************************************************************
  47. *  名称:ReceieveByte()
  48. *  功能:接收1字节数据
  49. *******************************************************************/   
  50. unsigned char ReceieveByte(void)   
  51.   {   
  52.           uint8     i,d1,d2;   
  53.     for(i=0;i<8;i++)   
  54.         {   
  55.                 IO0CLR=E_CLK;delay(5);  
  56.                 IO0SET=E_CLK;delay(5);
  57.                 if(RW_SID)d1++;   
  58.                 d1=d1<<1;   
  59.         }   
  60.     for(i=0;i<8;i++)   
  61.         {   
  62.                 IO0CLR=E_CLK;delay(5);  
  63.                 IO0SET=E_CLK;delay(5);  
  64.                 if(RW_SID)d2++;   
  65.                 d2=d2<<1;   
  66.         }   
  67.      return     (d1&0xF0+d2&0x0F);   
  68.     }
  69.   
  70. /***************************************************************
  71. *  名称:SendCMD()
  72. *  功能:向LCD12864发送命令
  73. ****************************************************************/  
  74. void     SendCMD(uint8     data)   
  75.     {
  76.         SendByte(0xF8);                                         
  77.         SendByte(data&0xF0);                                        
  78.                 SendByte((data&0x0F)<<4);                    
  79.         }
  80.   
  81. /*************************************************************
  82. * 名称:SendData()
  83. * 功能:向LCD12864发送数据
  84. **************************************************************/  
  85. void     SendData(uint8     data)   
  86.     {
  87.         SendByte(0xFA);                                         
  88.         SendByte(data&0xF0);                                       
  89.                  SendByte((data&0x0F)<<4);                    
  90.         }
  91.        
  92. /****************************************************************
  93. * 名称:lcd_mesg()
  94. * 功能:在LCD12864上显示汉字
  95. *****************************************************************/
  96.    
  97. void     lcd_mesg(uint8     x_add, unsigned char * word)   
  98.     {   
  99.          SendCMD(x_add);                               
  100.               while(*word)
  101.               {
  102.                  SendData(*(word++));             
  103.               }
  104.     }
  105. /*************************************************************
  106. *  名称:initinal()
  107. *  功能:LCD12864字库初始化
  108. **************************************************************/
  109.    
  110. void     initlcm(void)   
  111.     {   
  112.          delay(200);     
  113.          SendCMD(0x30);                //功能设置,一次送8位数据,基本指令集   
  114.          SendCMD(0x0C);                //0000,1100     整体显示,游标off,游标位置off   
  115.          SendCMD(0x01);                //0000,0001     清DDRAM   
  116.          SendCMD(0x02);                //0000,0010     DDRAM地址归位   
  117.          SendCMD(0x80);                //1000,0000     设定DDRAM 7位地址000,0000到地址计数器AC   
  118. }

  119. int main (void)
  120. {
  121.         PINSEL0=0x00000000;
  122. PINSEL1=0X00000000;
  123. PINSEL2&=~(0x00000006);    //设置所有I/O口为GPIO口
  124. IO0DIR =LCD_CON;
  125. initlcm();                             //12864初始化程序            
  126.         lcd_mesg(0x80,IC_DAT1);
  127.         delay(100);
  128.         uint32 ADC_Data;
  129.         char str[20];
  130.         PINSEL0 = 0x00000005;        // 管脚连接串口
  131.         PINSEL1 = 1 << 28;                // P0.30连接到AD0.3       
  132.         /* 进行ADC模块设置 */
  133.         AD0CR = (1 << 3)                                                |        // SEL=8,选择通道3
  134.                         ((Fpclk / 1000000 - 1) << 8)        |        // CLKDIV=Fpclk/1000000-1,转换时钟为1MHz
  135.                         (0 << 16)                                                |        // BURST=0,软件控制转换操作
  136.                         (0 << 17)                                                |        // CLKS=0, 使用11clock转换
  137.                         (1 << 21)                                                |          // PDN=1,正常工作模式
  138.                         (0 << 22)                                                |          // TEST1:0=00,正常工作模式
  139.                         (1 << 24)                                                |        // START=1,直接启动ADC转换
  140.                         (0 << 27);                                                         // 直接启动ADC转换时,此位无效
  141.         delay(1000);
  142.         ADC_Data = AD0DR;                // 读取ADC结果,并清除DONE标志位
  143.        
  144.         while (1)
  145.         {
  146.                 AD0CR |= 1 << 24;                                        // 进行第一次转换
  147.                 while ((ADDR & 0x80000000) == 0);        // 等待转换结束
  148.                 AD0CR |= 1 << 24;                                        // 再次启动转换
  149.                 while ((AD0DR & 0x80000000) == 0);        // 等待转换结束
  150.                 ADC_Data = AD0DR;                                        // 读取ADC结果
  151.                 ADC_Data = (ADC_Data >> 6) & 0x3ff;
  152.                 ADC_Data = ADC_Data * 2480;                        // 参考电压经过3/4分压
  153.                 ADC_Data = ADC_Data / 1024;
  154.                 sprintf(str, "%4d mV VIN3", ADC_Data);
  155.                 unsigned char IC_DAT2[] ;
  156.                 char IC_DAT2[]=str[20];
  157.         initlcm();                             //12864初始化程序            
  158.                 lcd_mesg(0x80,IC_DAT1);
  159.         }
  160.         return 0;               
  161. }
  162. /*********************************************************************************************************
  163. **                            End Of File
  164. ********************************************************************************************************/

复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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