|
PG160128A仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源程序如下:
- #include "config.h"
- /****************************************************************************
- * 名稱(chēng):DelayNS()
- * 功能:長(zhǎng)軟件延時(shí)
- * 入口參數(shù):dly 延時(shí)參數(shù),值越大,延時(shí)越久
- * 出口參數(shù):無(wú)
- ****************************************************************************/
- /*void delay(uint32 dly)
- { uint32 i;
- for(; dly>0; dly--)
- for(i=0; i<500; i++);
- }*/
- __inline void enable_irq()
- {
- uint8 tmp;
- __asm
- {
- MRS tmp,CPSR
- BIC tmp,tmp,#0x80
- MSR CPSR_c,tmp
- }
- }
- __inline void disable_irq()
- {
- uint8 tmp;
- __asm
- {
- MRS tmp,CPSR
- ORR tmp,tmp,#0x80
- MSR CPSR_c,tmp
- }
- }
- __inline void enable_frq()
- {
- uint8 tmp;
- __asm
- {
- MRS tmp,CPSR
- BIC tmp,tmp,#0x40
- MSR CPSR_c,tmp
- }
- }
- __inline void disable_frq()
- {
- uint8 tmp;
- __asm
- {
- MRS tmp,CPSR
- ORR tmp,tmp,#0x40
- MSR CPSR_c,tmp
- }
- }
- //**************lcd programme start*****************************
- #define wr (1<<8)
- #define rd (1<<9)
- #define cd (1<<10)
- void delay(int c)
- {
- int j;
- while(c--)
- for(j=500;j>0;j--)
- ;
- }
- uint8 rd_state() //讀狀態(tài)
- {
- uint8 temp;
- IODIR=0x700;
- IOSET=cd;
- IOCLR=rd;
- temp=IOPIN;
- IOSET=rd;
- return(temp);
- }
- void rd_enable() //等待可讀寫(xiě)
- {
- uint8 temp;
- temp=rd_state();
- while((temp&0x03)!=0x03)
- temp=rd_state();
- }
- void rd_auto() //等待自動(dòng)讀寫(xiě)
- {
- uint8 temp;
- temp=rd_state();
- while((temp&0x04)!=0x04)
- temp=rd_state();
- }
- void wr_auto() //等待自動(dòng)寫(xiě)
- {
- uint8 temp;
- temp=rd_state();
- while((temp&0x08)!=0x08)
- temp=rd_state();
- }
- /*寫(xiě)命令、寫(xiě)數(shù)據(jù)命令*********************
- 數(shù)據(jù)1、數(shù)據(jù)2、命令、參數(shù)個(gè)數(shù)*************
- *****************************************/
- void wr_data(char data1,char data2,char cmd,char num)
- {
- char temp;
- temp=num;
- if(temp==2)
- {
- rd_enable();
- IODIR=0x7ff;
- IOCLR=cd;
- IOCLR=0xff;
- IOSET=data1;
- IOCLR=wr;
- IOSET=wr;
- }
- if(temp==2||temp==1)
- {
- rd_enable();
- IODIR=0x7ff;
- IOCLR=cd;
- IOCLR=0xff;
- IOSET=data2;
- IOCLR=wr;
- IOSET=wr;
- }
- rd_enable();
- IODIR=0x7ff;
- IOSET=cd;
- IOCLR=0xff;
- IOSET=cmd;
- IOCLR=wr;
- IOSET=wr;
- }
- char rd_data() //讀數(shù)據(jù)
- {
- char temp;
- rd_enable();
- IODIR=0x700;
- IOCLR=cd;
- IOCLR=rd;
- temp=IOPIN;
- IOSET=rd;
- return(temp);
- }
- void lcd_init()
- {
- IODIR=cd|rd|wr;
- IOSET=cd|rd|wr;
- wr_data(0x00,0x00,0x40,0x02); //設(shè)置文本顯示首地址
- wr_data(0x14,0x00,0x41,0x02); //設(shè)置文本顯示寬度
- wr_data(0x40,0x01,0x42,0x02); //設(shè)置圖形顯示首地址
- wr_data(0x14,0x00,0x43,0x02); //設(shè)置圖形顯示寬度
- wr_data(0x00,0x00,0xa1,0x00); //光標(biāo)形狀設(shè)置
- wr_data(0x00,0x00,0x80,0x00); //顯示方式設(shè)置,“或”
- wr_data(0x00,0x00,0x9c,0x00); //顯示開(kāi)關(guān)設(shè)置
- }
- //******************lcd programme end*******************************
- /****************************************************************************
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
2104控制的點(diǎn)陣lcd.rar
(64.71 KB, 下載次數(shù): 90)
2017-12-4 12:58 上傳
點(diǎn)擊文件名下載附件
|
|