久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3940|回復: 1
收起左側

大佬,是32*64點陣程序問題啊

[復制鏈接]
ID:291645 發表于 2018-3-23 11:24 | 顯示全部樓層 |閱讀模式
最近做了個32*64 單色點陣仿真。在程序上遇到問題了。望各位路過的大佬幫幫我這單片機菜鳥。#include<reg52.h>
#include"MacroAndConst.h"
#include"delay.h"
#include"display.h"
#include"ziku.h"


extern bit fLeftFlag;  //聲明外部變量
extern bit fRightFlag;        //聲明外部變量
uchar scan;
uchar speed=5;        //設定移動速度
uint words;                //字模計數器
uchar move;                //列指針
uchar line;                //行指針
uchar temp;
uchar BUFF[10];        //緩存數組
sbit ST=P3^5;        //595 STR
sbit SH=P3^6;  //595 CLK
sbit DATA=P3^7;        //595 DATAS


/**********************************************************
函數名稱:LeftflowDisplay
函數功能:左移顯示函數
入口參數:無  
出口參數:無
備  注:
**********************************************************/
void LeftflowDisplay()                //逐行 陰碼 逆向
{
        uchar sp,y=0;
        move=0;
        words=0;
                while(words<20*32)                //
                {       
                         if(fLeftFlag==1)
                        {
                                while(move<16)        //數據移位
                                {       
                                        if(fLeftFlag==1)
                                        {       
                                       
                                                for(sp=0;sp<speed;sp++)        //移動速度
                                                {       
                                                        if(fLeftFlag==1)
                                                        {
                                                                for(line=0;line<16;line++)        //行掃描
                                                                {
                                                                        loadline1();        //裝載一線點陣數據
                                                                        sendline1();        //發送一線移動數據
                                                                        scan=line;        //顯示第line行
                                                                        P2=scan;
                                                                        ST=1;                //鎖存為高,595鎖存信號
                                                                        ST=0;
                                                                        delay_10us(50);        //延時500us,等待一段時間,產生視覺暫留
                                                                }
                                                        }
                                                        else
                                                        break;
                                                }
                                                move=move+1;                //移動一步(一位)
                                        }
                                        else
                                        break;
                                }
                                move=0;
                                words=words+32;        //下一個字
                        }
                        else
                        break;
                }
                words=0;
        }
/**********************************************************
函數名稱:loadline1
函數功能:裝載點陣數據        緩存
入口參數:無  
出口參數:無
備  注:
**********************************************************/


void loadline1()
{
        uchar s;
        for(s=0;s<5;s++)        //s為要顯示的字數+1(顯示4字+1=5)
        {
                BUFF[2*s]=zuoyi[words+ 32*s + 2*line];
                BUFF[2*s+1]=zuoyi[words+1+ 32*s + 2*line];
               
               
        }
}
/**********************************************************
函數名稱:sendline1
函數功能:發送點陣數據        緩存
入口參數:無  
出口參數:無
備  注:
**********************************************************/
void sendline1()
{
        uchar s;
        uchar inc,temp,tempcol;
        uchar  k;
        DATA=1;
        if(move<8) inc=0;
        else inc=1;
        for(s=0+inc;s<=7+inc;s++)
        {
                if(move<8)
                        tempcol=move;
                else
                        tempcol=move-8;
                temp=(BUFF>>tempcol)|(BUFF[s+1]<<(8-tempcol));        //字模左邊字節右移tempcol位,右邊字節左移8-tempcol位,2者相或
                for(k=0;k<8;k++)
              {
                      SH=0;
                        DATA=(bit)(temp&0x80);
                       temp=temp<<1;
                      SH=1;
           }
        }
}
/**********************************************************
函數名稱:RightflowDisplay
函數功能:右移顯示函數
入口參數:無  
出口參數:無
備  注:
**********************************************************/
void RightflowDisplay()        //流動右移         逐行 陰碼 順向
{
        uchar i;
        move=0;
        words=0;
        while(words<=20*32)          //數組元素。46組,每組32個
        {       
                if(fRightFlag==1)
            {
                        while(move<16)// 循環16次,點亮并移動一個漢字
                        {         
                                if(fRightFlag==1)
                                {
                                        for(i=0;i<speed;i++)//漢字在屏幕上的停留時間(即移動速度快慢)
                                        {
                                                if(fRightFlag==1)
                                                {
                                                        for(line=0;line<16;line++)//掃描16行                         
                                                        {
                                                                loadoneline();//裝載一線點陣數據
                                                                sendoneline();//發送一線點陣數據
                                                                P2=line;                 
                                                            ST= 0;
                                                                ST= 1;
                                                            delay_10us(50); //延時500us,等待一段時間,產生視覺暫留                                                              
                                                        }
                                                 }
                                                 else
                                                 break;
                                        }
                                        move++;        //列指針遞增
                                }
                                else
                                break;                       
                        }
                        move=0;
                        words=words+32;// 一個漢字移動后,指向下一個漢字          
                }
                else
                break;


        }
        words=0;
}
/**********************************************************
函數名稱:loadoneline
函數功能:裝載點陣數據        緩存
入口參數:無  
出口參數:無
備  注:
**********************************************************/
void loadoneline()
{
        uchar s;       
    for(s=0;s<5;s++)              //s為要顯示的數字+1
                {
                        BUFF[2*s+1]=youyi[words+32*s+2*line];
                        BUFF[2*s]=youyi[words+1+32*s+2*line];//~
                }
}
/**********************************************************
函數名稱:sendoneline
函數功能:發送點陣數據        緩存
入口參數:無  
出口參數:無
備  注:
**********************************************************/
void sendoneline()
{
        char s;
        uchar inc,k,tempcol;
        if(move<8)
                inc=0;
        else
                inc=1;      
        for(s=7+inc;s>=0+inc;s--)
                {
                        if(move<8)
                                tempcol=move;
                        else
                                tempcol=move-8;
                                temp=(BUFF>>tempcol)|(BUFF[s+1]<<(8-tempcol));
                        for(k=0;k<8;k++)
                             {       
                              SH=0;
                                DATA=(bit)(temp&0x01);
                               temp=temp>>1;
                              SH=1;
                          }
                }
}
顯示程序是這樣的。顯示出來的是兩行一樣的字。
那么問題來了。。。
1、如果如原理圖所示,595的DS只接一個數據引腳da0,怎么改程序讓兩行都顯示數據,且數據不同呢?
2、如果把第二排595的DS接另一個數據引腳,先把第一排的數據全部移入595,再把第二排的數據移入595,然后再給第一排輸出時鐘,給第二排輸出時鐘,讓兩排的數據同時輸出。請問怎么改程序

仿真原理圖

仿真原理圖
回復

使用道具 舉報

ID:96682 發表于 2018-3-23 13:10 | 顯示全部樓層
把驅動電路理清就不是事了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩在线成人 | 97精品国产97久久久久久免费 | 成人av网站在线观看 | 羞羞的视频在线观看 | 亚洲第一福利视频 | 韩日av在线 | 国产精品观看 | 午夜精品久久久久久久星辰影院 | 91精品国产91综合久久蜜臀 | 日韩国产一区二区 | 欧美激情综合五月色丁香小说 | 视频一区二区在线观看 | 日韩精品一区二区三区在线 | 美日韩免费视频 | 国产激情福利 | 嫩草视频入口 | 欧美成年网站 | 天天操天天干天天爽 | 综合久久亚洲 | 中文字幕一区在线观看视频 | 激情影院久久 | 国产日韩欧美精品 | 九九久久国产 | 91免费观看视频 | 九九免费视频 | 国产日韩久久 | 免费亚洲成人 | 麻豆久久久久 | 99在线资源 | 久久精品久久久久久 | 亚洲精品视频免费看 | 欧美一级欧美三级在线观看 | 毛片一区二区三区 | 亚洲精品久久国产高清情趣图文 | 亚洲精品视频在线 | 久久福利网站 | 日本一区二区不卡 | 欧美区在线 | 国产精品精品久久久 | 精品久久久久久亚洲精品 | 韩国av网站在线观看 |