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

📄 jiankong.lst

📁 通过单片机控制SAA7111A来显示监控图像
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   JIANKONG                                                              05/07/2005 20:29:54 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE JIANKONG
OBJECT MODULE PLACED IN JianKong.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE JianKong.c ROM(COMPACT) REGFILE(.\ShiLong.ORC) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /////////////////////////////////////////////////////////////////////////////////////////////////////////
   2          //FileName: JianKong.c
   3          //Function: System control, I2c bus, display control
   4          //Version:  1.0
   5          //ModifyTime: 2005.3.10
   6          //CopyRight: jtshi
   7          /////////////////////////////////////////////////////////////////////////////////////////////////////////
   8          
   9          #include "reg51.h"
  10          #include <intrins.h>
  11          #include "shilongdianzi.h"
  12          
  13          //constant define
  14          #ifndef uchar
  15          #define uchar unsigned char
  16          #endif
  17          
  18          #ifndef uint
  19          #define uint unsigned int
  20          #endif
  21          
  22          #define  _Nop()  _nop_()  //NULL 
  23          /////////////////////////////////////////////////////////////////////////////////////////////////////////
  24          // X5045 related contant
  25          /*#define WREN  0x06
  26          #define WRDI  0x04
  27          #define RSDR  0x05
  28          #define WRSR  0x01
  29          #define READ  0x03
  30          #define WRITE  0x02
  31          #define STATUS_REG 0x00
  32          #define MAX_POLL   0x99*/
  33          
  34          //Pin Define
  35          //////////////////////////////////////////////////////////////////////////////////////////////////////////
  36          //Control line
  37          sbit KEY_LINE_1 = P1^0; //Control line 1(1)
  38          sbit KEY_LINE_2 = P1^1; //Control line 2(2)
  39          sbit KEY_LINE_3 = P1^2; //Control line 3(3)
  40          sbit KEY_LINE_4 = P1^3; //Control line 4(4)
  41          sbit KEY_LINE_5 = P2^0; //Control line 5(21)
  42          sbit KEY_LINE_6 = P2^1; //Control line 6(22)
  43          
  44          //Display pin
  45          sbit DISPLAY_CS = P2^4; //LCD Control Write Ctrl(25)
  46          sbit DISPLAY_WR = P3^6; //LCD Control Write Ctrl(16)
  47          sbit DISPLAY_RD = P3^7; //LCD Control Read  Ctrl(17)
  48          
  49          sbit DISPLAY_A0 = P2^7; //LCD Address 0(28)
  50          sbit DISPLAY_A1 = P2^6; //LCD Address 1(27)
  51          sbit DISPLAY_A2 = P2^5; //LCD Address 2(26)
  52          
  53          sbit DISPLAY_D0 = P0^0; //LCD Data 0(39)
  54          sbit DISPLAY_D1 = P0^1; //LCD Data 1(38)
  55          sbit DISPLAY_D2 = P0^2; //LCD Data 2(37)
C51 COMPILER V7.06   JIANKONG                                                              05/07/2005 20:29:54 PAGE 2   

  56          sbit DISPLAY_D3 = P0^3; //LCD Data 3(36)
  57          sbit DISPLAY_D4 = P0^4; //LCD Data 4(35)
  58          sbit DISPLAY_D5 = P0^5; //LCD Data 5(34)
  59          sbit DISPLAY_D6 = P0^6; //LCD Data 6(33)
  60          sbit DISPLAY_D7 = P0^7; //LCD Data 7(32)
  61          
  62          //watch dog and EPROM
  63          sbit WD_CS              = P1^5; //Watch dog CS(6)
  64          sbit WD_SO              = P1^4; //Watch dog SO(5)       
  65          sbit WD_SCK             = P1^7; //Watch dog SCK(8)
  66          sbit WD_SI              = P1^6; //Watch dog SI(7)
  67          
  68          //I2C Bus
  69          sbit SDA=P2^2;          //I2C  data
  70          sbit SCL=P2^3;          //I2C  clk
  71          
  72          //Other
  73          //sbit C51_2P2 = P2^2;  //Other 1(23)
  74          //sbit C51_2P3 = P2^3;  //Other 2(24)
  75          sbit C51_3P2 = P3^2;    //Other 3(12)
  76          sbit C51_3P3 = P3^3;    //Other 4(13)
  77          sbit C51_3P4 = P3^4;    //Other 5(14)
  78          sbit C51_3P5 = P3^5;    //Other 6(15)
  79          
  80          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -/////
  81          //global variables
  82          uchar fontMask[] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};//0x08/0x88
  83          //                0x00  0x01  0x02  0x03  0x04  0x05  0x06  0x07  0x08  0x09  0x0A  0x0B  0x0C  0x0D  0x0E
             -  0x0F  0x10  0x11  0x12
  84          uchar SAAreg[] = {0x00, 0x00, 0xc0, 0x33, 0x00, 0x00, 0xeb, 0xe0, 0x08, 0x01, 0x80, 0x47, 0x40, 0x00, 0x01
             -, 0x00, 0x48, 0x0c, 0x00};
  85          
  86          bit ack;                        //acknologe
  87          //Function Declear
  88          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -//////
  89          //watch dog
  90          /*void x5045_initial();
  91          void x5045_rst_wdog();*/
  92          
  93          //Display Ctrl
  94          void InitLcd();
  95          void ControlLcd(uchar clr, uchar xinc, uchar single);
  96          void WriteAddrToLcd(uchar type, uchar dataA);                                   //type: Xlow-0; Xhigh-1; Ylow-2; Yhigh-3
  97          void WriteSingleDataToLcd(uchar type, uchar dataA, uchar iFb);  //type: data-6; FrontColor-4; IFb: Word-1;
             - Video and Word-0
  98          void WriteMultiDataToLcd(uchar type, uchar dataA);                              //type: data-6;
  99          void ClearScreen();                                                                                             //Clear Screen
 100          void SetPosXY(uint x, uint y);                                                                  //Set position
 101          void WriteMultiWord(uint x, uint y, uint xNum, uint yNum, uchar *pData);        //write word at Screen
 102          void Write3Digit(uint x, uint y, uchar num);    //write word at Screen
 103          //I2C bus
 104          void    Start_I2c();
 105          void    Stop_I2c();
 106          void    SendByte(uchar c);
 107          uchar   RcvByte();
 108          void    Ack_I2c(bit a);
 109          bit             ISendByte(uchar sla, uchar c);
 110          bit     IRcvByte(uchar sla, uchar *c);
 111          
 112          //SAA7111A
C51 COMPILER V7.06   JIANKONG                                                              05/07/2005 20:29:54 PAGE 3   

 113          void    ConfigSAA7111A();
 114          
 115          //定时器0
 116          void InitTimer0() reentrant;
 117          void Timer0ISR();
 118          
 119          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -/
 120          void main (void)
 121          {
 122   1              
 123   1              uchar flag = 0, switchInput = 0, swVideoWord = 0;       //start position
 124   1              uint  t;                                                        //tmp
 125   1              EA  = 0;                                                        //disable all int
 126   1              
 127   1              //Initial Lcd
 128   1              InitLcd();                              
 129   1              //Word and Video, Xinc, multiWrite
 130   1              ControlLcd(0, 1, 1);
 131   1              //write frontcolor(black)
 132   1              WriteSingleDataToLcd(4, 0, 0);
 133   1              //clear screen
 134   1              ClearScreen();
 135   1              //write frontcolor(blue)
 136   1              WriteSingleDataToLcd(4, 0x03, 1);
 137   1              //coord(x = 20, y = 30) : WL
 138   1              WriteMultiWord(20, 30, 8, 48, shangbiaoWL);
 139   1              //write frontcolor(red)
 140   1              WriteSingleDataToLcd(4, 0xe0, 1);
 141   1              //coord(x = 20, y = 30):circle
 142   1              WriteMultiWord(20, 30, 8, 48, shangbiaohuan);
 143   1              //write frontcolor(blue)
 144   1              WriteSingleDataToLcd(4, 0x03, 1);
 145   1              //coord(x = 20, y = 80):世
 146   1              WriteMultiWord(20, 80, 2, 16, CodeShi);
 147   1      
 148   1              //coord(x = 20, y = 36):龙
 149   1              WriteMultiWord(36, 80, 2, 16, CodeLong);
 150   1      
 151   1              //coord(x = 20, y = 52):电
 152   1              WriteMultiWord(52, 80, 2, 16, CodeDian);
 153   1      
 154   1              //coord(x = 20, y = 68):子
 155   1              WriteMultiWord(68, 80, 2, 16, CodeZi);
 156   1      
 157   1              //coord(x = 500, y = 30):亮度
 158   1              WriteMultiWord(150, 200, 6, 16, CodeLiangDu);
 159   1              Write3Digit(200, 200, SAAreg[10]);
 160   1              
 161   1              //coord(x = 500, y = 50):对比度
 162   1              WriteMultiWord(134, 220, 8, 16, CodeDuiBiDu);
 163   1              Write3Digit(200, 220, SAAreg[11]);
 164   1              
 165   1              ////////////////////////////////////////////////////////////////////////////////
 166   1              while(1)                                //Loop forever
 167   1              {
 168   2                      //judge key press 
 169   2                      if(KEY_LINE_1 == 1)
 170   2                      {
 171   3                              for(t = 0; t < 1000; t ++) ;
 172   3                              if(KEY_LINE_1 == 1)             //Line1 Pressed
 173   3                                      flag = 1;
C51 COMPILER V7.06   JIANKONG                                                              05/07/2005 20:29:54 PAGE 4   

 174   3                      }               
 175   2                      else if(KEY_LINE_2 == 1)
 176   2                      {
 177   3                              for(t = 0; t < 1000; t ++) ;
 178   3                              if(KEY_LINE_2 == 1)             //Line2 Pressed
 179   3                                      flag = 2;
 180   3                      }
 181   2                      else if(KEY_LINE_3 == 1)
 182   2                      {
 183   3                              for(t = 0; t < 1000; t ++) ;
 184   3                              if(KEY_LINE_3 == 1)             //Line3 Pressed
 185   3                                      flag = 3;
 186   3                      }               
 187   2                      else if(KEY_LINE_4 == 1)
 188   2                      {
 189   3                              for(t = 0; t < 1000; t ++) ;
 190   3                              if(KEY_LINE_4 == 1)             //Line4 Pressed
 191   3                                      flag = 4;
 192   3                      }
 193   2                      else if(KEY_LINE_5 == 1)
 194   2                      {
 195   3                              for(t = 0; t < 1000; t ++) ;
 196   3                              if(KEY_LINE_5 == 1)             //Line5 Pressed
 197   3                                      flag = 5;
 198   3                      }
 199   2                      else if(KEY_LINE_6 == 1)
 200   2                      {
 201   3                              for(t = 0; t < 1000; t ++) ;
 202   3                              if(KEY_LINE_6 == 1)             //Line6 Pressed
 203   3                                      flag = 6;
 204   3                      }
 205   2                      
 206   2                      ////////////////////////////////////////////////
 207   2                      switch(flag)
 208   2                      {
 209   3                              case 1: //显示 切换 
 210   3                                      if(swVideoWord == 0)
 211   3                                      {
 212   4                                              swVideoWord = 1;
 213   4                                              ControlLcd(1, 1, 1);
 214   4                                      }
 215   3                                      else
 216   3                                      {
 217   4                                              swVideoWord = 0;
 218   4                                              ControlLcd(0, 1, 1);
 219   4                                      }
 220   3                              break;
 221   3                              case 2: //输入通道切换
 222   3                                      if(switchInput == 0)    
 223   3                                      {
 224   4                                              SAAreg[2] = 0xc0;
 225   4                                              ConfigSAA7111A();
 226   4                                              switchInput = 1;
 227   4                                      }
 228   3                                      else
 229   3                                      {
 230   4                                              SAAreg[2] = 0xc2;
 231   4                                              ConfigSAA7111A();
 232   4                                              switchInput = 0;
 233   4                                      }
 234   3                              break;
 235   3                              case 3: //亮度增加 
C51 COMPILER V7.06   JIANKONG                                                              05/07/2005 20:29:54 PAGE 5   

 236   3                                      //write frontcolor(black)
 237   3                                      WriteSingleDataToLcd(4, 0x00, 0);
 238   3                                      Write3Digit(200, 200, SAAreg[10]);
 239   3                                      if(SAAreg[10] < 198)
 240   3                                              SAAreg[10] += 1;        
 241   3                                      ConfigSAA7111A();
 242   3                                      //write frontcolor(blue)
 243   3                                      WriteSingleDataToLcd(4, 0x03, 1);
 244   3                                      Write3Digit(200, 200, SAAreg[10]);
 245   3                              break;
 246   3                              case 4: //亮度减小
 247   3                                      //write frontcolor(black)
 248   3                                      WriteSingleDataToLcd(4, 0x00, 0);
 249   3                                      Write3Digit(200, 200, SAAreg[10]);
 250   3                                      if(SAAreg[10] > 61)
 251   3                                              SAAreg[10] -= 1;        
 252   3                                      ConfigSAA7111A();
 253   3                                      //write frontcolor(blue)
 254   3                                      WriteSingleDataToLcd(4, 0x03, 1);
 255   3                                      Write3Digit(200, 200, SAAreg[10]);
 256   3                              break;
 257   3                              case 5://对比度增加
 258   3                                      //write frontcolor(black)
 259   3                                      WriteSingleDataToLcd(4, 0x00, 0);
 260   3                                      Write3Digit(200, 220, SAAreg[11]);
 261   3                                      if(SAAreg[11] < 120)

⌨️ 快捷键说明

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