在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)采用模擬時(shí)序控制點(diǎn)陣圖形液晶程序

            51單片機(jī)采用模擬時(shí)序控制點(diǎn)陣圖形液晶程序

            作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
            ;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            ;連線圖:
            ;//LCM---89C52////LCM---89C52////LCM-------89C52////LCM----------89C52// //
            ;//DB0---P0.0////DB4---P0.4////D/I-------P2.6////CS1----------P2.4////
            ;//DB1---P0.1////DB5---P0.5////R/W-------P2.7////CS2----------P2.5////
            ;//DB2---P0.2////DB6---P0.6////RST--------VCC////CS3----------P3.2////
            ;//DB3---P0.3////DB7---P0.7////E---------P2.3////
            ;注:89C52的晶振頻率為12MHz//
            ;///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //畫線部分請(qǐng)參照avr的c程序。
            ///#pragma src///生成ASM文件開關(guān),必要時(shí)打開///
            #include
            #include
            #include

            #define Uchar unsigned char

            ///////////////////////液晶顯示器接口引腳定義///////////////////////////////

            sbitElcm=P2^3;//
            sbitCS1LCM= P2^4;//
            sbitCS2LCM= P2^5;//
            sbitCS3LCM= P3^2;///這個(gè)連接只是做實(shí)驗(yàn)的臨時(shí)接法。///
            sbitDilcm=P2^6;//
            sbitRwlcm=P2^7;//
            sfr Datalcm=0x80;//數(shù)據(jù)口
            unsigned char testi[]={"浸渠叁繩漱塔烴威犧曉玄瑤"};

            ///////////////////////常用操作命令和參數(shù)定義///////////////////////////////
            #defineDISPON0x3f///顯示on///
            #defineDISPOFF0x3e///顯示off///
            #defineDISPFIRST0xc0///顯示起始行定義///
            #defineSETX0x40///X定位設(shè)定指令(頁(yè))///
            #defineSETY0xb8///Y定位設(shè)定指令(列)///
            #defineLcdbusy0x80///LCM忙判斷位///

            /////////////////////////////顯示分區(qū)邊界位置///////////////////////////////////
            #defineMODL0x00///左區(qū)///
            #defineMODM0x40///左區(qū)和中區(qū)分界///
            #defineMODR0x80///中區(qū)和右區(qū)分界///
            #define LCMLIMIT0xC0///顯示區(qū)的右邊界///

            /////////////////////////////////全局變量定義///////////////////////////////////////
            Uchar col,row,cbyte;///列x,行(頁(yè))y,輸出數(shù)據(jù) ///
            bit xy;///畫線方向標(biāo)志:1水平///

            ///////////////////////////////////函數(shù)列表/////////////////////////////////////////////
            void Lcminit(void);///液晶模塊初始化///
            void Delay(Uchar);///延時(shí),入口數(shù)為Ms ///
            void lcdbusyL(void);///busy判斷、等待(左區(qū)) ///
            void lcdbusyM(void);///busy判斷、等待(中區(qū)) ///
            void lcdbusyR(void);///busy判斷、等待(右區(qū)) ///
            void Putedot(Uchar);///半角字符輸出///
            void Putcdot(Uchar);///全角(漢字)輸出///
            void Wrdata(Uchar);///數(shù)據(jù)輸出給LCM///
            void Lcmcls( void );///LCM全屏幕清零(填充0) ///
            void wtcom(void);///公用busy等待///
            void Locatexy(void);///光標(biāo)定位///
            void WrcmdL(Uchar);///左區(qū)命令輸出///
            void WrcmdM(Uchar);///中區(qū)命令輸出///
            void WrcmdR(Uchar);///右區(qū)命令輸出///
            void Putstr(Uchar //puts,Uchar i);///中英文字符串輸出///
            void Rollscreen(Uchar x);///屏幕向上滾動(dòng)演示///
            void Rddata(void);///從液晶片上讀數(shù)據(jù)///
            void Linehv(Uchar length);///橫(豎)方向畫線///
            void point(void);///打點(diǎn)///
            void Linexy(Uchar endx,Uchar endy);

            /////////////////////////////////////數(shù)組列表///////////////////////////////////////////
            Uchar code Ezk[];///ASCII常規(guī)字符點(diǎn)陣碼表 ///
            Uchar code Hzk[];///自用漢字點(diǎn)陣碼表///
            Uchar code STR1[];///自定義字符串///
            Uchar code STR2[];//
            Uchar code STR3[];//
            Uchar code STR4[];//


            //////////////////////////////////////////////////////////////////
            /// 演示主程序///
            //////////////////////////////////////////////////////////////////
            void main(void)

            {
            Uchar x,y;
            col=0;
            row=0;
            Delay(40);///延時(shí)大約40Ms,等待外設(shè)準(zhǔn)備好///
            Lcminit();///液晶模塊初始化,包括全屏幕清屏///
            Putstr(STR2,24);///第一行字符輸出,24字節(jié)///
            col=0;
            row=2;
            Putstr(STR1,12);///第二行字符輸出,12字節(jié)///
            col=0;
            row=4;
            Putstr(STR3,24);///第三行字符輸出,24字節(jié)///
            col=0;
            row=6;
            Putstr(STR4,24);///第四行字符輸出,12字節(jié)///
            x=0;
            col=0;
            row=0;
            xy = 1;///方向標(biāo)志。定為水平方向///
            Linehv(192);///畫一條橫線(0,0)-(191,0)///
            col=0;
            row=15;
            xy = 1;
            Linehv(192);///畫一條橫線(0,15)-(191,15)///
            col=0;
            row=32;
            xy = 1;
            Linehv(192);///畫一條橫線(0,32)-(191,32)///
            col=0;
            row=1;
            xy = 0;///方向標(biāo)志。定為垂直方向///
            Linehv(31);///畫一條豎線(0,1)-(0,31) ///
            col=191;
            row=1;
            xy = 0;
            Linehv(31);///畫一條豎線(191,1)-(191,31) ///
            col=0;///設(shè)定斜線的起點(diǎn)坐標(biāo)///
            row=63;
            Linexy(44,31);///畫一段斜線(0,63)-(44,31)///
            col=44;
            row=31;
            Linexy(190,62);///繼續(xù)畫斜線(44,31)-(191,63) ///
            while(1){
            Rollscreen(y);///定位新的顯示起///
            y++;
            y %=8;
            x=testi[y];
            Delay(100); ///延時(shí),控制滾動(dòng)速度 ///
            };
            }


            //////////////////////////////////////////////////////////////////////////////////////////////////
            ///畫線。任意方向的斜線,不支持垂直的或水平線 ///
            //////////////////////////////////////////////////////////////////////////////////////////////////

            void Linexy(Uchar endx,Uchar endy)
            {
            register Uchar t;
            int xerr=0,yerr=0,delta_x,delta_y,distance;
            Uchar incx,incy;

            ///compute the distance in both directions ///
            delta_x=endx-col;
            delta_y=endy-row;

            /// computethe direction of the increment ,
            an increment of "0" means either a vertical or horizontal lines ///

            if(delta_x>0) incx=1;
            else if( delta_x==0 ) incx=0;
            else incx=-1;


            if(delta_y>0) incy=1;
            else if( delta_y==0 ) incy=0;
            else incy=-1;

            ///determine which distance is greater ///
            delta_x = cabs( delta_x );
            delta_y = cabs( delta_y );

            if( delta_x > delta_y ) distance=delta_x;
            else distance=delta_y;

            /// draw the line ///
            for( t=0;t = distance+1; t++ ) {
            point();
            xerr += delta_x ;
            yerr += delta_y ;
            if( xerr > distance ) {
            xerr-=distance;
            col+=incx;
            }
            if( yerr > distance ) {
            yerr-=distance;
            row+=incy;
            }

            }
            }

            //////////////////////////////////////////////////////////////////////////////////
            ///畫線。只提供X或Y方向的,不支持斜線///
            //////////////////////////////////////////////////////////////////////////////////
            void Linehv(Uchar length)
            {
            Uchar xs,ys;
            if (xy){ys = col;
            for (xs=0;xs
            col = ys + xs;
            point();}
            }
            else{xs = row;
            for (ys=0;ys
            row = xs + ys;
            point();}
            }
            }

            //////////////////////////////////////////////////////////////////////////////////
            ///畫點(diǎn)///
            //////////////////////////////////////////////////////////////////////////////////

            void point(void)
            {
            Ucharx1,y1,x,y;
            x1=col;
            y1=row;
            row=y1>>3;///取Y方向分頁(yè)地址///
            Rddata();
            y=y1&0x07;///字節(jié)內(nèi)位置計(jì)算///
            x=0x01;
            x=x<///移入所畫點(diǎn)///
            Wrdata(cbyte|x);///畫上屏幕///
            col=x1;///恢復(fù)xy坐標(biāo)///
            row=y1;
            }

            //////////////////////////////////////////////////////////////////////////////////
            ///屏幕滾動(dòng)定位///
            //////////////////////////////////////////////////////////////////////////////////
            void Rollscreen(Uchar x)
            {
            cbyte = DISPFIRST|x;///定義顯示起始行為x?///
            WrcmdL(cbyte);
            WrcmdM(cbyte);
            WrcmdR(cbyte);
            }

            //////////////////////////////////////////////////////////////////////////////////
            ///一個(gè)字串的輸出///
            //////////////////////////////////////////////////////////////////////////////////
            void Putstr(Uchar //puts,Uchar i)
            {
            Uchar j,X;
            for (j=0;j
            {
            X = puts[j];
            if (X&0x80)
            {
            Putcdot(X&0x7f);///只保留低7位///
            }
            else Putedot(X-0x20);///ascii碼表從0x20開始///
            }
            }

            //////////////////////////////////////////////////////////////////////////////////
            ///半角字符點(diǎn)陣碼數(shù)據(jù)輸出///
            //////////////////////////////////////////////////////////////////////////////////
            void Putedot(Uchar Order)
            {
            Uchar i,bakerx,bakery;///共定義4個(gè)局部變量///
            int x;///偏移量,字符量少的可以定義為UCHAR///
            bakerx = col;///暫存x,y坐標(biāo),已備下半個(gè)字符使用 ///
            bakery = row;
            x=Order // 0x10;///半角字符,每個(gè)字符16字節(jié) ///
            ///上半個(gè)字符輸出,8列///
            for(i=0;i<8;i++)
            {
            cbyte = Ezk[x];///取點(diǎn)陣碼,rom數(shù)組///
            Wrdata(cbyte);///寫輸出一字節(jié)///
            x++;
            col++;
            if (col==LCMLIMIT){col=0;row++;row++;}; ///下一列,如果列越界換行///
            if (row>7) row=0;///如果行越界,返回首行///
            }///上半個(gè)字符輸出結(jié)束 ///

            col = bakerx;///列對(duì)齊///
            row = bakery+1;///指向下半個(gè)字符行///
            ///下半個(gè)字符輸出,8列///
            for(i=0;i<8;i++)
            {
            cbyte = Ezk[x];///取點(diǎn)陣碼///
            Wrdata(cbyte);///寫輸出一字節(jié)///
            x++;
            col++;
            if (col==LCMLIMIT){col=0;row=row+2;};///下一列,如果列越界換行///
            if (row>7) row=1;///如果行越界,返回首行///
            }///下半個(gè)字符輸出結(jié)束 ///
            row=bakery;
            }///整個(gè)字符輸出結(jié)束///

            上一頁(yè) 1 2 3 下一頁(yè)

            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉