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

📄 12864-3.lst

📁 3线控制12864液晶的源程序代码
💻 LST
字号:
C51 COMPILER V8.02   12864_3                                                               09/03/2008 13:03:44 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 12864_3
OBJECT MODULE PLACED IN 12864-3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 12864-3.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1                                          #include<reg51.h>
   2          //#include<intrinsics.h>
   3          #define uint unsigned int
   4          #define uchar unsigned char
   5          /*#define s 8000000   //__delay_cycles(1*us)
   6          #define ms 8000     //__delay_cycles(1*ms)
   7          #define us 8        //__delay_cycles(1*us)               */
   8          
   9          
  10          /*12864 引脚定义-串行接口 */   
  11          /*#define CS=1    PORTC_Bit3=1    // asm("sbi 0x18,3")  //CS设为高电平 
  12          #define CS=0    PORTC_Bit3=0    //asm("cbi 0x18,3")  //CS设为低电平 
  13          #define SID=1   PORTC_Bit4=1    //asm("sbi 0x18,2")  //SID设为高电平 
  14          #define SID=0   PORTC_Bit4=0    //asm("cbi 0x18,2")  //SID设为低电平 
  15          #define SCLK=1  PORTC_Bit5=1    //asm("sbi 0x18,1")  //SCLK设为高电平 
  16          #define SCLK=0  PORTC_Bit5=0    //asm("cbi 0x18,1")  //SCLK设为低电平  
  17          
  18          
  19          
  20          /***********tlc5615*********************************/
  21          
  22          /*#define DIN    PORTD_Bit2
  23          #define SCLK   PORTD_Bit1
  24          #define EN     PORTD_Bit0  */
  25          
  26          
  27          sbit CS=P3^0;//4
  28          sbit SID=P3^1;   //5
  29          sbit SCLK=P3^3;         //6管脚
  30           
  31           
  32           void delay(uint z)
  33          {
  34   1               uint x,y;
  35   1               for(x=0;x<z;x++)
  36   1               for(y=0;y<121;y++);
  37   1      }
  38          
  39          
  40          
  41          //===================================================================
  42           uchar mynew1[401]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//0-15对应显示屏上16列,16.17保存13.14数据          
  43          //uchar mynew2[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  44          uchar mynew3[5]={0,0,0,0,0};
  45          //uchar mynew4[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; 
  46          uchar number[11]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2e }  ; 
  47          uint ge_shu=0;
  48           //计算实际电压  
  49           /*
  50          uint value=0, voltage=0; //电压单位为(mV)
  51          
  52          uchar key_scan_biao_zhi=0, key=0;
  53          
  54          uchar mo_shi_xian_shi=0,mode=0;
  55          
C51 COMPILER V8.02   12864_3                                                               09/03/2008 13:03:44 PAGE 2   

  56          
  57          uint dac=102;   */
  58          
  59          
  60          /*---------------------12864开始-----------------------------------------------*/
  61          /********************************************************************
  62          函数作用:负责串行输出8个bit位
  63          ********************************************************************/
  64          void Write_8bits(uint W_bits)
  65          {
  66   1         uint i,Temp_data;
  67   1         for(i=0; i<8; i++)
  68   1       {
  69   2         Temp_data = W_bits;
  70   2         Temp_data <<= i;
  71   2         if((Temp_data&0x80)==0) //bit7 is zero
  72   2        {
  73   3          SID=0;
  74   3        delay(1);
  75   3          SCLK=1;
  76   3       delay(1);
  77   3         delay(1);
  78   3          SCLK=0;
  79   3       delay(1);
  80   3          SID=0;
  81   3        }
  82   2          else         //bit7 is one
  83   2        {
  84   3          SID=1;
  85   3        delay(1);
  86   3         SCLK=1;
  87   3      delay(1);
  88   3      delay(1);
  89   3         SCLK=0;
  90   3      delay(1);
  91   3         SID=0;
  92   3        } 
  93   2       }
  94   1      }
  95          /*******************************************************************
  96          函数作用:写一个字节的数据到12864液晶,包括指令和数据                    
  97          说    明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;         
  98             (一般RW都设为0,即只向液晶写数据,不读数据)          
  99                    RS="1",写入的是数据;RS=0,写入的是指令;           
 100              一般模式:RW=0,RS=1;写数据        
 101                 RW="0",RS=0;写指令      
 102          ********************************************************************/
 103          void W_1byte(uchar RW, uchar RS, uchar W_data)
 104          {
 105   1         uint H_data,L_data,S_ID = 0xf8; //11111RWRS0    
 106   1      if(RW == 0)
 107   1      {
 108   2         S_ID &=~ 0x04;
 109   2      }
 110   1      else     //if(RW==1)
 111   1      {
 112   2         S_ID |= 0X04;
 113   2      }
 114   1      if(RS == 0)
 115   1      {
 116   2         S_ID &=~ 0x02;
 117   2      }
C51 COMPILER V8.02   12864_3                                                               09/03/2008 13:03:44 PAGE 3   

 118   1      else     //if(RS==1)
 119   1      {
 120   2         S_ID |= 0X02;
 121   2      }
 122   1      H_data = W_data;
 123   1      H_data &= 0xf0;   //屏蔽低4位的数据     
 124   1      L_data = W_data;     //xxxx0000格式      
 125   1      L_data &= 0x0f;   //屏蔽高4位的数据      
 126   1      L_data <<= 4;   //xxxx0000格式     
 127   1      CS=1;
 128   1      Write_8bits(S_ID);   //发送S_ID       
 129   1      Write_8bits(H_data); //发送H_data     
 130   1      Write_8bits(L_data); //发送L_data     
 131   1      CS=0; 
 132   1      }
 133          
 134          /******************************************************************/
 135          void LCD_Init(void)
 136          {
 137   1      uchar cmd;
 138   1      cmd=0x30;   //功能设置 8位数据,基本指令           
 139   1      W_1byte(0,0,cmd);
 140   1      delay(2);
 141   1      cmd=0x30;   //功能设置 8位数据,基本指令         
 142   1      W_1byte(0,0,cmd);
 143   1      delay(2);
 144   1      cmd=0x0C;   //显示状态 ON,游标OFF,反白OFF                
 145   1      W_1byte(0,0,cmd); //写指令      
 146   1      delay(2);
 147   1      cmd=0x01;   //清除显示      
 148   1      W_1byte(0,0,cmd); //写指令    
 149   1      delay(2);
 150   1      /*cmd=0x02;   //地址归位
 151   1      W_1byte(0,0,cmd); //写指令   
 152   1      delay(2);
 153   1      /*cmd=0x80;   //设置DDRAM地址       
 154   1      W_1byte(0,0,cmd); //写指令      
 155   1      delay(2);  //延时   */   
 156   1      }
 157          /*----------------------------------12864结束--------------------------------------*/
 158          
 159          /*void da5615(uint Data)
 160          {
 161          unsigned char i;
 162          
 163          EN=1 ; 
 164          EN=0;  
 165          //SCLK=0 ;
 166          for (i=0;i<12;i++)
 167          {SCLK=0;
 168            if(Data&0x8000)
 169              DIN=1;
 170            else
 171              DIN=0;
 172          Data<<=1;
 173          delay(1);
 174          SCLK=1;
 175          
 176          }
 177          EN=0;
 178          EN=1;
 179          }  */
C51 COMPILER V8.02   12864_3                                                               09/03/2008 13:03:44 PAGE 4   

 180          
 181          
 182          /*--------------------------------------键盘开始--------------------------------------*/
 183          /*
 184           //adc转换初始化
 185          void adc_init(void)
 186          {
 187           ADCSRB |=0x00;//连续转换模式
 188           ADMUX  = 0x42; //参考电压为VACC ADC2通道输入 转换结果右对齐
 189           ADCSRA |= 0xe6;// 启动ADC 先转化一次    64分频
 190           
 191          }
 192          
 193          void adc_calc(void)
 194          {
 195          value=ADCL; //首先读低位
 196          value|=(uint)ADCH << 8; //然后读高位
 197          voltage=(value*5.0/1024)*1000;
 198               
 199           mynew3[0]= voltage/1000;
 200           mynew3[1]=( voltage/100)%10;
 201           mynew3[2]=( voltage/10)%10;
 202           mynew3[3]= voltage%10; 
 203          }
 204          
 205          
 206          void key_value(void)
 207          { 
 208            
 209             key_scan_biao_zhi=1;
 210             __delay_cycles(4*ms); 
 211             __delay_cycles(4*ms); 
 212             __delay_cycles(4*ms); 
 213             __delay_cycles(4*ms); 
 214              adc_calc();
 215            
 216             
 217          if(voltage>950&&voltage<1150) {  key=0x01;}//1
 218          if(voltage>1150&&voltage<1350){  key=0x02;}//2
 219          if(voltage>2350&&voltage<2550){  key=0x03;}//3
 220          if(voltage>750&&voltage<950)  {  key=0x04;}//4
 221          if(voltage>1350&&voltage<1550){  key=0x05;}//5
 222          if(voltage>2200&&voltage<2350){  key=0x06;}//6
 223          if(voltage>550&&voltage<750)  {  key=0x07;}//7
 224          if(voltage>1550&&voltage<1680){  key=0x08;}//8
 225          if(voltage>2050&&voltage<2200){  key=0x09;}//9
 226          if(voltage>350&&voltage<550)  {  key=0x0a;}//0
 227          if(voltage>1680&&voltage<1850){  key=0x0b;}//点
 228          if(voltage>1850&&voltage<2050){  key=0x0c;}//确定
 229          if(voltage>2550&&voltage<2750){  key=0x0d;}//存储
 230          if(voltage>2750&&voltage<2950){  key=0x0e;}//读出
 231          if(voltage>2950&&voltage<3120){  key=0x0f;}//-
 232          if(voltage>3120&&voltage<3300){  key=0x010;}//+
 233          }
 234          void key_scan(void)
 235          {
 236          
 237            switch(key)
 238            {   case 0x01: {       dac += 5;   dac<<=6;  da5615(dac);  dac >>=6;   break; }
 239                case 0x02: {       dac -= 5;   dac<<=6;  da5615(dac);  dac >>=6;   break; }
 240                case 0x03: {                                    break; }
 241                case 0x04: {                                    break; }
C51 COMPILER V8.02   12864_3                                                               09/03/2008 13:03:44 PAGE 5   

 242                case 0x05: {                                    break; }
 243                case 0x06: {                                    break; }
 244                case 0x07: {                          break; }
 245                case 0x08: {                          break; }
 246                case 0x09: {                          break; }
 247                case 0x0a: {                          break; }
 248                case 0x0b: {                        break; }
 249                case 0x0c: {                        break; }
 250                case 0x0d: {                        break; }
 251                case 0x0e: {                         break; }
 252                case 0x0f: {                          break; }
 253                case 0x10: {                       break; }  
 254            }
 255          
 256            key_scan_biao_zhi=0;
 257            key=0;
 258           
 259          }
 260          
 261          void key_working(void)
 262          {
 263             adc_calc();  
 264          if(voltage<4500) key_value();
 265          if(voltage>4500&&key_scan_biao_zhi==1) key_scan();
 266          
 267          }                */
 268          /*----------------------------------键盘结素----------------------------------------*/
 269          
 270          
 271          
 272          
 273          
 274          
 275          
 276          
 277          /*---------倒计时显示---------*/
 278          
 279          lcdmode0(void)
 280          {   uchar j=0;
 281   1                                      //显示设置界面    
 282   1          W_1byte(0,0,0x80);
 283   1      
 284   1           for(j=0;j<16;j++)
 285   1          {
 286   2           W_1byte(0,1,number[mynew1[j]]);
 287   2         }    
 288   1       
 289   1         
 290   1         W_1byte(0,0,0x88);
 291   1           for(j=0;j<4;j++)
 292   1          {
 293   2            W_1byte(0,1,number[mynew3[j]]);
 294   2          } 
 295   1         
 296   1       
 297   1      }       
 298                   
 299          /*------主函数---------*/                                                                                                  
 300          void main()
 301          {
 302   1      CS=0;
 303   1       SCLK=0;
C51 COMPILER V8.02   12864_3                                                               09/03/2008 13:03:44 PAGE 6   

 304   1       SID=0;
 305   1        LCD_Init(); 
 306   1       
 307   1        while(1){
 308   2                 W_1byte(0,0,0x80);
 309   2              delay(5);
 310   2      
 311   2        W_1byte(0,1,0x31);
 312   2        delay(5);
 313   2        
 314   2              //        lcdmode0();
 315   2        }      }
*** ERROR C249 IN LINE 315 OF 12864-3.C: 'DATA': SEGMENT TOO LARGE

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

⌨️ 快捷键说明

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