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

📄 the effect of implementation on wheels rolled from right to left .txt

📁 12864液晶趣味显示:实现汽车轮子从右滚到左的效果
💻 TXT
📖 第 1 页 / 共 3 页
字号:
12864液晶趣味显示:实现汽车轮子从右滚到左的效果  
 DDS中波形查找表的产生
#include "c8051f020.h"  
#include <intrins.h>              

#define LCD_DATA P7
#define LCD_RS   P10
#define LCD_RW   P11
#define LCD_E    P12
#define LCD_CS1  P13
#define LCD_CS2  P14
#define LCD_RST  P15
#define SELECTCS 0

void SYSCLK_Init (void);      //初始化时钟
void Timer0_Init (void);      //初始化定时器
void PORT_Init (void);        //初始化IO口
void TestLCD(void);


void main (void) 
{
 WDTCN = 0xde;
 WDTCN = 0xad;           //关看门狗
 SYSCLK_Init ();         //初始化时钟
 Timer0_Init();   //初始化定时器
  PORT_Init ();           //初始化IO口 
 EA=1;     //开中断
    TestLCD();
}

 
void SYSCLK_Init (void)
{
   int i;                              // delay counter
   OSCXCN = 0x65;                      // start external oscillator with
                                       // 18.432MHz crystal
   for (i=0; i < 256; i++) ;           // Wait for osc. to start up
   while (!(OSCXCN & 0x80)) ;        // Wait for crystal osc. to settle
   OSCICN = 0x88;                      // select external oscillator as SYSCLK
                                       // source and enable missing clock
                                       // detector
// OSCICN = 0x07;                     // interal 16MHZ
}

void PORT_Init (void)
{
   // XBR0    = 0x07;                  // Enable SMBus, SPI0, and UART0
   // XBR1    = 0x00;
    XBR2    = 0x44;                    // Enable crossbar and weak pull-ups
    P74OUT  = 0x00;
}

unsigned char Count1ms;
void Timer0_Init (void)
{
    CKCON =0x8;
    TMOD =0x1;     //16Bit
 Count1ms=10;
    TR0 = 0;                           // STOP Timer0
    TH0 = (-SYSCLK/1000) >> 8;        // set Timer0 to overflow in 1ms
    TL0 = -SYSCLK/1000;
    TR0 = 1;                           // START Timer0
    IE = 0x2; 
}

void Timer0_ISR (void) interrupt 1     //1ms
{
 TH0 = (-SYSCLK/1000) >> 8;  
    TL0 = -SYSCLK/1000;
 if (Count1ms) Count1ms--;
}

void Delay1us(unsigned char us)
{
 while (us)
 {
   _nop_(); 
   _nop_(); 
   _nop_(); 
   _nop_(); 
   _nop_();
   --us;
 }
} 

void Delay1ms(unsigned char T)
{
 Count1ms=T;
 while (Count1ms);
}

void Delay1s(unsigned char T)
{
 while (T)
 {
  Delay1ms(200);
  Delay1ms(200);
  Delay1ms(200);
  Delay1ms(200);
  Delay1ms(200);
  T--;
 }
}

 
void LCD_WaitReady1(void)            //判断LCD控制芯片KS0108是否忙
{
 LCD_DATA=0xff;
 _nop_();
 LCD_CS2=SELECTCS;
 LCD_RW=1;
 LCD_RS=0;
 LCD_E=1;
 while (LCD_DATA&0x80);
 LCD_CS2=!SELECTCS;
}

void LCD_WaitReady2(void)            //判断LCD控制芯片KS0108是否忙
{
 LCD_DATA=0xff;
 _nop_();
 LCD_CS1=SELECTCS;
 LCD_RW=1;
 LCD_RS=0;
 LCD_E=1;
 while (LCD_DATA&0x80);
 LCD_CS1=!SELECTCS;
}

void LCD_WriteCommand1(char ch)      //向LCD控制芯片KS0108发送控制命令
{
 LCD_WaitReady1();
 LCD_CS2=SELECTCS;
 LCD_RW=0;
 LCD_RS=0;
 LCD_DATA=ch;
 LCD_E=1;
 LCD_E=0;
 LCD_CS2=!SELECTCS;
}

void LCD_WriteCommand2(char ch)     //向LCD控制芯片KS0108发送控制命令
{
 LCD_WaitReady2();
 LCD_CS1=SELECTCS;
 LCD_RW=0;
 LCD_RS=0;
 LCD_DATA=ch;
 LCD_E=1;
 LCD_E=0;
 LCD_CS1=!SELECTCS;
}

void LCD_WriteData1(char ch)     //向LCD控制芯片KS0108发送数据命令
{
 LCD_WaitReady1();
 LCD_CS2=SELECTCS;
 LCD_RW=0;
 LCD_RS=1;
 LCD_DATA=ch;
 LCD_E=1;
 LCD_E=0;
 LCD_CS2=!SELECTCS;
}

void LCD_WriteData2(char ch)     //向LCD控制芯片KS0108发送数据命令
{
 LCD_WaitReady2();
 LCD_CS1=SELECTCS;
 LCD_RW=0;
 LCD_RS=1;
 LCD_DATA=ch;
 LCD_E=1;
 LCD_E=0;
 LCD_CS1=!SELECTCS;
}

void InitLCD(void)                      //初始化LCD
{
 char i,j;
 LCD_RST=0;
    Delay1ms(5); 
 LCD_RST=1;
    Delay1ms(1);
 LCD_WriteCommand1(0xc0);           //显示起始行
 LCD_WriteCommand2(0xc0);              //显示起始行
 LCD_WriteCommand1(0x3f);              //开显示
 LCD_WriteCommand2(0x3f);              //开显示

 for (j=0;j<8;j++)             //清屏
 {
  LCD_WriteCommand1(0xB8+j);        //页(Y)地址,清左半屏
  LCD_WriteCommand1(0x40);          //(X)地址
  for (i=0;i<64;i++)
   LCD_WriteData1(0x00);

  LCD_WriteCommand2(0xB8+j);       //清右半屏
  LCD_WriteCommand2(0x40);
  for (i=0;i<64;i++)
   LCD_WriteData2(0x00);
 }
}

void ClearLCD(void)
{
 char i,j;
    for (j=0;j<8;j++)             //清屏
 {
  LCD_WriteCommand1(0xB8+j);        //页(Y)地址,清左半屏
  LCD_WriteCommand1(0x40);          //(X)地址
  for (i=0;i<64;i++)
   LCD_WriteData1(0x00);

  LCD_WriteCommand2(0xB8+j);       //清右半屏
  LCD_WriteCommand2(0x40);
  for (i=0;i<64;i++)
   LCD_WriteData2(0x00);
 }
}

void LCD_WriteHZ(char x,char y,char *Dot) //显示16*16点阵汉字
{
char i;
 for (i=0;i<32;i++)
 {
  if ((x+i%16)<64)
  {
   LCD_WriteCommand1(0xB8+y+i/16);
   LCD_WriteCommand1(0x40+x+i%16);
   LCD_WriteData1(Dot[i]);
  }
  else
  {
   LCD_WriteCommand2(0xB8+y+i/16);
   LCD_WriteCommand2(0x40+x-64+i%16);
   LCD_WriteData2(Dot[i]);
  } 
 }
}
   
void DispBmp1(char x,char *buf)      //显示一幅位图
{
int i,j;
 for (j=0;j<8;j++)   //显示位图
 {
   LCD_WriteCommand1(0xB8+j); 
   LCD_WriteCommand1(0x40+x);  
        for (i=0;i<64-x;i++)
        LCD_WriteData1(buf[(j*2)*64+i]);
        LCD_WriteCommand1(0xB8+j); 
        LCD_WriteCommand1(0x40);
  for (i=64-x;i<64;i++)
     LCD_WriteData1(buf[(j*2+1)*64+i]);
   LCD_WriteCommand2(0xB8+j); 
   LCD_WriteCommand2(0x40+x);
   for (i=0;i<64-x;i++)
    LCD_WriteData2(buf[(j*2+1)*64+i]);
   LCD_WriteCommand2(0xB8+j);
        LCD_WriteCommand2(0x40);  
        for (i=64-x;i<64;i++)     
   LCD_WriteData2(buf[(j*2)*64+i]);
 }
}

void DispBmp2(char x,char *buf)      //显示一幅位图
{
int i,j;
 for (j=0;j<8;j++)   //显示位图
 {
   LCD_WriteCommand1(0xB8+j); 
   LCD_WriteCommand1(0x40+63-x);  
        for (i=0;i<=x;i++)
        LCD_WriteData1(buf[(j*2+1)*64+i]);
        LCD_WriteCommand1(0xB8+j); 
        LCD_WriteCommand1(0x40);
  for (i=x+1;i<64;i++)
     LCD_WriteData1(buf[(j*2)*64+i]);
    LCD_WriteCommand2(0xB8+j); 
    LCD_WriteCommand2(0x40+63-x);
    for (i=0;i<=x;i++)
     LCD_WriteData2(buf[(j*2)*64+i]);
    LCD_WriteCommand2(0xB8+j);
        LCD_WriteCommand2(0x40);  
        for (i=x+1;i<64;i++)     
      LCD_WriteData2(buf[(j*2+1)*64+i]);
 }
}
 
//char code screen[]; 
char code screen1[];
char code screen2[];
char code screen3[];
char code screen4[];
char code screen5[];
char code screen6[];
char code screen7[];
char code screen8[];
char code Han[];
char code Zi[];

void TestLCD(void)
{
char i;
 
 InitLCD();
    
 for (;;)

⌨️ 快捷键说明

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