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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3973|回復: 1
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
最近做了個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,然后再給第一排輸出時鐘,給第二排輸出時鐘,讓兩排的數據同時輸出。請問怎么改程序

111.png (50.73 KB, 下載次數: 45)

仿真原理圖

仿真原理圖
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:96682 發表于 2018-3-23 13:10 | 只看該作者
把驅動電路理清就不是事了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线日韩欧美 | 久久精品日产第一区二区三区 | 欧美片网站免费 | 日本精品一区二区三区在线观看视频 | 欧美精品三区 | 亚欧精品| 69堂永久69tangcom | 亚洲一区日韩 | 日日夜夜天天干 | 91视频进入 | 国产亚洲成av人片在线观看桃 | 久久久国产一区 | 99国产精品一区二区三区 | 国产97人人超碰caoprom | 男女视频网站 | 99视频免费播放 | 欧美日韩亚 | 国产日韩欧美在线一区 | 国产精品久久久久久久久久 | 久久一区二区免费视频 | 亚洲啪啪 | 成人三级在线播放 | 日韩国产在线 | 国产视频久久久 | 日韩中文在线观看 | 伦理二区| 精品一区二区三区视频在线观看 | 欧美一区二区三区视频 | 亚洲精品免费视频 | 特黄毛片| 特级黄一级播放 | 国产亚洲精品久久19p | 成人免费看片又大又黄 | julia中文字幕久久一区二区 | 亚洲 欧美 精品 | 亚洲精品电影网在线观看 | 国产一级片精品 | 欧美成人免费电影 | 久久最新| 在线国产99 | 欧美日韩视频在线第一区 |