仿真原理圖如下(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)
2021-11-10 17:01 上傳
點擊文件名下載附件
|