仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include<reg51.h>
- #include "BMP1.h"
- #include "BMP2.h"
- #include "BMP3.h"
- #include "BMP4.h"
- #include "BMP5.h"
- #include "BMP6.h"
- #include "BMP7.h"
- #include "BMP8.h"
- #include "BMP9.h"
- #include "BMP10.h"
- #define LCD P0
- #define uint unsigned int
- #define uchar unsigned char
- unsigned char a,i,j,k;
- int b;
- sbit EN=P2^0;
- sbit RW=P2^1;
- sbit RS=P2^2;
- sbit CS1=P2^3;
- sbit CS2=P2^4;
- sbit BUSY=P0^0;
- void DelayMS(uint ms)//延时
- {
- uchar i;
- while(ms--)
- {
- for(i=0;i<120;i++);
- }
- }
- checkbusy()
- {
- EN=1;
- RW=1;
- RS=0;
- LCD=0XFF;
- if(BUSY);
- }
- writecode(unsigned char dat) //写命令
- {
- checkbusy();
- EN=1;
- RW=0;
- RS=0;
- LCD=dat;
- EN=1;
- EN=0;
- }
- writedata(unsigned char dat) //写数据
- {
- checkbusy();
- EN=1;
- RW=0;
- RS=1;
- LCD=dat;
- EN=1;
- EN=0;
- }
- //满屏函数
- void LCDDisplay(unsigned char page,unsigned char lineaddress, unsigned char table[8][128])
- {
- for(i=0;i<8;i++)
- {
- if(lineaddress<0X80)
- {
- CS1=0;
- CS2=0;
- }
- writecode(page+i);
- writecode(lineaddress);
- for(j=0;j<64;j++)
- {
- writedata(table[i][j]);
- lineaddress+=1;
- }
- if(lineaddress>=0X80)
- {
- CS1=0;
- CS2=1;
- lineaddress=lineaddress-0X40;
- }
- writecode(page+i);
- writecode(lineaddress);
- for(j=64;j<128;j++)
- {
- writedata(table[i][j]);
- lineaddress+=1;
- }
- if(lineaddress>=0X80)
- {
- lineaddress=lineaddress-0X40;
- }
- }
- }
- void lcdinti()
- {
- writecode(0X3F);
- writecode(0XC0);
- writecode(0XB8);
- writecode(0X40);
- }
- main()
- {
- lcdinti();
- while(1)
- {
- LCDDisplay(0Xb8,0X40,&a1);
- DelayMS(10);
- LCDDisplay(0Xb8,0X40,&a2);
- DelayMS(10);
- LCDDisplay(0Xb8,0X40,&a3);
- DelayMS(10);
- }
- }
复制代码
所有资料51hei附件下载:
动态图片显示.7z
(151.78 KB, 下载次数: 17)
|