⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 can

📁 can通信源码
💻
字号:
C51 COMPILER V8.02   串口接收1602                                                          04/07/2011 22:20:23 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 串口接收1602
OBJECT MODULE PLACED IN 串口接收1602.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 串口接收1602.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************
   2          * 文件名  : 串口接收试验.c
   3          * 描述    :  该程序从串口接收数据,通过LCD显示数据。在LCD的第一行显示出来,
   4                                   当数据过多时(超过16个字符),LCD第一行将会被覆盖。
   5                                   该试验使用的晶振是11.0592,如果使用12M晶振,会出现串口接收
   6                                   不正常的情况。原因是用12M晶振,波特率9600时的误差率达 8%。                      
   7          * 创建人  : 东流,2009年4月8日
   8          * 版本号  : 2.0
   9          * 技术支持论坛:www.zidh.com/bbs(请进入“赞助商板块”中的“东流电子工作室”)
  10          * 感谢“中国自动化资讯网”对本工作室的大力支持。
  11          ***********************************************************************/
  12          #include<reg52.h>
  13          #include<intrins.h>
  14          
  15          #define uchar unsigned char
  16          #define uint  unsigned int 
  17          
  18          /*LED_Buffer[16]用来存储串口发送的数据,com_dat用来记录串口发送的个数*/
  19          uchar LED_Buffer[16], *q, com_dat;      //从串口接收的数据
  20          
  21          //这三个引脚参考资料
  22          sbit E=P2^7;            //1602使能引脚
  23          sbit RW=P2^6;           //1602读写引脚  
  24          sbit RS=P2^5;           //1602数据/命令选择引脚
  25          
  26          /********************************************************************
  27          * 名称 : Delay(uint del)
  28          * 功能 : 延时10ms * del
  29          * 输入 : 无
  30          * 输出 : 无
  31          ***********************************************************************/
  32          void Delay(uint del)
  33          {
  34   1              uint i,j;
  35   1              for(i=0; i<del; i++)
  36   1              for(j=0; j<1827; j++)    
  37   1              ;
  38   1      }
  39          
  40          /********************************************************************
  41          * 名称 : delay()
  42          * 功能 : 延时,延时时间大概为140US。
  43          * 输入 : 无
  44          * 输出 : 无
  45          ***********************************************************************/
  46          
  47          void delay()
  48          {
  49   1              int i,j;
  50   1              for(i=0; i<=10; i++)
  51   1              for(j=0; j<=2; j++)
  52   1      ;
  53   1      }
  54          
  55          /********************************************************************
C51 COMPILER V8.02   串口接收1602                                                          04/07/2011 22:20:23 PAGE 2   

  56          * 名称 : enable(uchar del)
  57          * 功能 : 1602命令函数
  58          * 输入 : 输入的命令值
  59          * 输出 : 无
  60          ***********************************************************************/
  61          
  62          void enable(uchar del)
  63          {
  64   1              P0 = del;
  65   1              RS = 0;
  66   1              RW = 0;
  67   1              E = 0;
  68   1              delay();
  69   1              E = 1;
  70   1              delay();
  71   1      }
  72          
  73          /********************************************************************
  74          * 名称 : write(uchar del)
  75          * 功能 : 1602写数据函数
  76          * 输入 : 需要写入1602的数据
  77          * 输出 : 无
  78          ***********************************************************************/
  79          
  80          void write(uchar del)
  81          {
  82   1              P0 = del;
  83   1              RS = 1;
  84   1              RW = 0;
  85   1              E = 0;
  86   1              delay();
  87   1              E = 1;
  88   1              delay();
  89   1      }
  90          
  91          /********************************************************************
  92          * 名称 : L1602_init()
  93          * 功能 : 1602初始化,请参考1602的资料
  94          * 输入 : 无
  95          * 输出 : 无
  96          ***********************************************************************/
  97          void L1602_init(void)
  98          {
  99   1              enable(0x01);
 100   1              enable(0x38);
 101   1              enable(0x0c);
 102   1              enable(0x06);
 103   1              enable(0xd0);
 104   1      }
 105          
 106          /********************************************************************
 107          * 名称 : L1602_char(uchar hang,uchar lie,char sign)
 108          * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下
 109                           L1602_char(1,5,'b')
 110          * 输入 : 行,列,需要输入1602的数据
 111          * 输出 : 无
 112          ***********************************************************************/
 113          void L1602_char(uchar hang,uchar lie,char sign)
 114          {
 115   1              uchar a;
 116   1              if(hang == 1) a = 0x80;
 117   1              if(hang == 2) a = 0xc0;
C51 COMPILER V8.02   串口接收1602                                                          04/07/2011 22:20:23 PAGE 3   

 118   1              a = a + lie - 1;
 119   1              enable(a);
 120   1              write(sign);
 121   1      }
 122          
 123          /********************************************************************
 124          * 名称 : L1602_string(uchar hang,uchar lie,uchar *p)
 125          * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下
 126                           L1602_string(1,5,"ab cd ef;")
 127          * 输入 : 行,列,需要输入1602的数据
 128          * 输出 : 无
 129          ***********************************************************************/
 130          void L1602_string(uchar hang,uchar lie,uchar *p)
 131          {
 132   1              uchar a;
 133   1              if(hang == 1) a = 0x80;
 134   1              if(hang == 2) a = 0xc0;
 135   1              a = a + lie - 1;
 136   1              enable(a);
 137   1              while(1)
 138   1              {
 139   2                      if(*p == '\0') break;
 140   2                      write(*p);
 141   2                      p++;
 142   2              }
 143   1      }
 144          
 145          /********************************************************************
 146          * 名称 : Com_Int()
 147          * 功能 : 串口中断子函数
 148          * 输入 : 无
 149          * 输出 : 无
 150          ***********************************************************************/
 151          void Com_Int(void) interrupt 4
 152          {
 153   1              EA = 0;
 154   1              if(RI == 1)   //当硬件接收到一个数据时,RI会置位
 155   1              {
 156   2                      LED_Buffer[com_dat] = SBUF;             //把从串口读出的数存到数组
 157   2                      RI = 0; 
 158   2                      com_dat++;
 159   2                      if(com_dat == 16) com_dat = 0;          //当com_dat = 16时,清0,防止数组溢出
 160   2              } 
 161   1              EA = 1;
 162   1      }
 163          
 164          /********************************************************************
 165          * 名称 : Com_Init()
 166          * 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
 167          * 输入 : 无
 168          * 输出 : 无
 169          ***********************************************************************/
 170          void Com_Init(void)
 171          {
 172   1           TMOD = 0x20;   //定时器工作在定时器1的方式2
 173   1           PCON = 0x00;   //不倍频
 174   1           SCON = 0x50;       //串口工作在方式1,并且启动串行接收     
 175   1           TH1 = 0xFd;    //设置波特率 9600
 176   1           TL1 = 0xFd;
 177   1           TR1 = 1;           //启动定时器1
 178   1               ES = 1;                //开串口中断
 179   1               EA = 1;                //开总中断              
C51 COMPILER V8.02   串口接收1602                                                          04/07/2011 22:20:23 PAGE 4   

 180   1      }
 181          
 182          /********************************************************************
 183          * 名称 : Main()
 184          * 功能 : 主函数
 185          * 输入 : 无
 186          * 输出 : 无
 187          ***********************************************************************/
 188          void Main()
 189          {
 190   1              uchar i = 0, com_dat = 0;       
 191   1              L1602_init();
 192   1              Delay(100);
 193   1              Com_Init();
 194   1              P2 = 0x00; 
 195   1              while(1)
 196   1              {
 197   2                      q = LED_Buffer; 
 198   2                      L1602_string(1,1,q);
 199   2                      com_dat = 0;    
 200   2                      Delay(100);
 201   2              }
 202   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    300    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     20       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -