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

📄 dd.lst

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


C51 COMPILER V8.02, COMPILATION OF MODULE DD
OBJECT MODULE PLACED IN dd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE dd.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           //计算实际电压  
  43           /*
  44          uint value=0, voltage=0; //电压单位为(mV)
  45          
  46          uchar key_scan_biao_zhi=0, key=0;
  47          
  48          uchar mo_shi_xian_shi=0,mode=0;
  49          
  50          
  51          uint dac=102;   */
  52          
  53          
  54          /*---------------------12864开始-----------------------------------------------*/
  55          /********************************************************************
C51 COMPILER V8.02   DD                                                                    09/03/2008 22:02:49 PAGE 2   

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

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

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

 242                case 0x0a: {                          break; }
 243                case 0x0b: {                        break; }
 244                case 0x0c: {                        break; }
 245                case 0x0d: {                        break; }
 246                case 0x0e: {                         break; }
 247                case 0x0f: {                          break; }
 248                case 0x10: {                       break; }  
 249            }
 250          
 251            key_scan_biao_zhi=0;
 252            key=0;
 253           
 254          }
 255          
 256          void key_working(void)
 257          {
 258             adc_calc();  
 259          if(voltage<4500) key_value();
 260          if(voltage>4500&&key_scan_biao_zhi==1) key_scan();
 261          
 262          }                */
 263          /*----------------------------------键盘结素----------------------------------------*/
 264          
 265          
 266          
 267          
 268          
 269          
 270          
 271          
 272          /*---------倒计时显示---------*/
 273          
 274          
 275                   
 276          /*------主函数---------*/                                                                                                  
 277          void main()
 278          {
 279   1      CS=0;
 280   1       SCLK=0;
 281   1       SID=0;
 282   1        LCD_Init(); 
 283   1       
 284   1        while(1){
 285   2                 W_1byte(0,0,0x80);
 286   2              delay(5);
 287   2      
 288   2        W_1byte(0,1,0x31);
 289   2        delay(5);
 290   2        
 291   2              //        lcdmode0();
 292   2        }      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    283    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       6
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.

C51 COMPILER V8.02   DD                                                                    09/03/2008 22:02:49 PAGE 6   


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

⌨️ 快捷键说明

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