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

標(biāo)題: 關(guān)于keil模塊化編寫程序的問題 [打印本頁]

作者: Q_p    時(shí)間: 2017-3-10 10:30
標(biāo)題: 關(guān)于keil模塊化編寫程序的問題
keil 模塊化編寫程序時(shí),可以在模塊中添加main函數(shù)嗎?如果不能那2個(gè)程序能用模塊整合成一個(gè)嗎?

作者: Q_p    時(shí)間: 2017-3-10 11:04
本帖最后由 Q_p 于 2017-3-10 20:22 編輯

#include<reg52.h>


sbit T_STR = P2^6;       //鎖存引腳,屏上標(biāo)識(shí)位STR
sbit R1    = P0^4;       //數(shù)據(jù)引腳,屏上標(biāo)識(shí)R1
sbit G1    = P2^4;       //數(shù)據(jù)引腳,屏上標(biāo)識(shí)G1
sbit T_CLK = P2^5;       //時(shí)鐘引腳,屏上標(biāo)識(shí)位CLK
sbit OE    = P2^7;       //使能引腳,屏上標(biāo)識(shí)EN/OE

unsigned char MoveBitNum,MoveBitNumtemp,IncNum;//移動(dòng)位數(shù),臨時(shí)移動(dòng)位數(shù),大于一個(gè)字節(jié)增加字節(jié)數(shù)
unsigned int HzNum;//漢字個(gè)數(shù)
unsigned char buff[10];

/*-----------------------------------------------
             16x16漢字取模數(shù)據(jù)
------------------------------------------------*/
unsigned char code hztest[][32]=    //取模選擇字節(jié)倒序 ,正序得出的字是反的,可以在軟件中設(shè)置自動(dòng)倒敘
{


0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //前面一屏大小的空字符,不顯示,這里根據(jù)屏的大小修改,這個(gè)是1個(gè)漢字屏
                                                                                 //所以寫入1個(gè)漢字

0x80,0x00,0x84,0x00,0x88,0x3F,0x48,0x00,0xA1,0x1F,0x82,0x10,0x92,0x12,0x90,0x14,
0xE8,0x7F,0x88,0x10,0x47,0x12,0x44,0x14,0xC4,0x3F,0x04,0x10,0x04,0x0A,0x00,0x04,


0x80,0x00,0x80,0x00,0xFF,0x7F,0x80,0x00,0x80,0x00,0xFE,0x3F,0x12,0x24,0x22,0x22,
0xF2,0x27,0x82,0x20,0x82,0x20,0xFA,0x2F,0x82,0x20,0x82,0x20,0x82,0x28,0x02,0x10,


0x10,0x00,0xD0,0x7F,0x12,0x04,0x12,0x04,0x12,0x04,0x92,0x3F,0x92,0x24,0x92,0x24,
0x92,0x24,0x92,0x24,0x92,0x24,0x90,0x2C,0x88,0x14,0x08,0x04,0x04,0x04,0x02,0x04,


0x20,0x02,0x20,0x02,0xFF,0x7F,0x20,0x02,0x08,0x00,0x90,0x1F,0x92,0x10,0x84,0x10,
0xA4,0x10,0xA0,0x14,0x90,0x08,0x8E,0x40,0x88,0x40,0x88,0x40,0x08,0x7F,0x00,0x00,

0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xFF,0x7F,0x80,0x00,0x80,0x00,
0x40,0x01,0x40,0x01,0x20,0x02,0x20,0x02,0x10,0x04,0x08,0x08,0x04,0x10,0x03,0x60,

0x44,0x10,0x88,0x10,0x88,0x08,0x00,0x04,0xFE,0x7F,0x02,0x40,0x01,0x20,0xF8,0x07,
0x00,0x02,0x80,0x01,0xFF,0x7F,0x80,0x00,0x80,0x00,0x80,0x00,0xA0,0x00,0x40,0x00,



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //尾部的一屏的空字符,用于清屏,參數(shù)和屏大小有關(guān)。
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


};
/*-----------------------------------------------
             向595寫入一個(gè)字節(jié) 單紅色
------------------------------------------------*/
void InputByte( unsigned  char DataR1) //寫一個(gè)字節(jié)
{
unsigned  char i;
for(i=8; i>0; i--)
{
R1 = !(DataR1&0x01);                  
T_CLK = 0;
T_CLK = 1;
DataR1 = DataR1 >> 1;
}
}
/*-----------------------------------------------
             向595寫入兩個(gè)字節(jié) 雙色
------------------------------------------------*/
void Input2Byte( unsigned  char DataR1,unsigned  char DataG1) //寫一個(gè)字節(jié)
{
unsigned  char i;
for(i=8; i>0; i--)
{
R1 = !(DataR1&0x01);   
G1 = !(DataG1&0x01);               
T_CLK = 0;
T_CLK = 1;
DataR1 = DataR1 >> 1;
DataG1 = DataG1 >> 1;
}
}


/*-----------------------------------------------
                    延時(shí)程序
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}


/*-----------------------------------------------
                      主程序
------------------------------------------------*/
main()
{
unsigned char count;//16行掃描數(shù)據(jù),范圍0-15
unsigned int i,  j;
unsigned char temp;

while(1)
{


i++;
if(i==100)//更改流動(dòng)速度,1T單片機(jī)和12T單片機(jī)速度大約5-8倍,注意更改參數(shù)
   {
   i=0;
   MoveBitNum++;
if(MoveBitNum==16)//每次移動(dòng)完一個(gè)漢字大小后循環(huán)
    {
      MoveBitNum=0;
          HzNum+=1;    //調(diào)用下一個(gè)漢字
          if(HzNum>=50)//需要顯示的漢字個(gè)數(shù),包括前面的一屏空字符的個(gè)數(shù),后面清屏的空字符不包含在內(nèi),這里是(漢字個(gè)數(shù)+1)
             HzNum=0;   //完全顯示完后循環(huán)調(diào)用
    }
  }


Delay(1);//控制掃描頻率
for(j=0;j<2;j++) //取每個(gè)漢字的前2個(gè)字節(jié),
        {             //漢字個(gè)數(shù)+1
         buff[j+j]=hztest[HzNum+j][count+count];  //每次移動(dòng)完一個(gè)漢字后,選擇下一個(gè)漢字
         buff[j+j+1]=hztest[HzNum+j][count+count+1];
        }

  if(MoveBitNum<8)                   //  判讀移動(dòng)距離是大于一個(gè)字節(jié)還是小于一個(gè)字節(jié),因?yàn)橐粋(gè)字節(jié)左移右移最大只能8位
          { IncNum=0; MoveBitNumtemp=MoveBitNum; }
  else
          { IncNum=1; MoveBitNumtemp=MoveBitNum-8;}//大于8就減去8得到的數(shù)值還是小于8

T_STR=0;       //鎖存無效
  for(j=0;j<2;j++)          //按bit的方式移動(dòng)緩沖區(qū)的內(nèi)容,然后輸出到595,即取出的數(shù)值每個(gè)字節(jié)左移一定的位數(shù),
          {                                     //后面左移出的數(shù)據(jù)整合到前面的字節(jié)中,保持?jǐn)?shù)據(jù)的連續(xù)性            
           temp=(buff[j+IncNum]>>MoveBitNumtemp)|(buff[j+1+IncNum]<<(8-MoveBitNumtemp));//這句比較重要,需要自行拿出2個(gè)字節(jié)的數(shù)據(jù)模擬分析
       InputByte(temp);//輸出到595
          }//8個(gè)字節(jié)傳輸完鎖存輸出
  OE  = 1;
  P0=15-count;//用P0口的前4位控制16行,屏內(nèi)部通過4-16譯碼器工作,循環(huán)掃描16行
  T_STR=1;      //鎖存有效,此時(shí)一行的數(shù)據(jù)顯示到屏上
  OE = 0;


count++;
if(count==16)
    count=0;
}
}


#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit shcp=P2^0;         // 移位寄存時(shí)鐘 1有效
sbit ds=P2^1;        // 輸入
sbit stcp=P2^2;          //  輸出時(shí)鐘 1有效
sbit k1=P3^2;
sbit k2=P3^3;
uchar n=100;

//彩燈循環(huán)
uchar data_s[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //        逆時(shí)針流水燈
                                 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,                                         //        閃爍
                                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01, // 順時(shí)針流水燈
                                0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00};
uchar data_s1[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,
                0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,
                                0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                                0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00};

void delay(int x)
{
         unsigned a,b;
         for(a=x;a>0;a--)
         for(b=250;b>0;b--)        ;
}

void send(uchar aa)        // 74hc595控制
{               
        uchar c;
        for(c=0;c<8;c++) // 掃描每一個(gè)字節(jié) 0x01為1個(gè) 在內(nèi)部左移
        {
                ds=aa>>7;
                aa<<=1;
                 shcp=0;         // 高電平有效  先賦0 再取1

                shcp=1;
                 }
        
         stcp=0;  //  高電平有效  先賦0 再取1

         stcp=1;
         
}         
void main()
{        uchar z;
        EA=1;
        EX0=1;EX1=1;
        IT0=1;IT1=1;
        while(1)
        {        for(z=0;z<48;z++){

                send(data_s[z]);
                send(data_s1[z]);

                delay(n);        

                        }}
        
}


void dis_1() interrupt 0
{        

        if(n<240&&k1==0)
        n=n+20;        
}

void dis_2() interrupt 2
{        

        if(n>0&&k2==0)
        n=n-10;        
}
作者: cy2005abc    時(shí)間: 2017-3-10 17:05
頂一個(gè)
作者: 滄浪    時(shí)間: 2017-3-10 20:09
不能啊,肯定只能有一個(gè)MAIN函數(shù),其余的函數(shù)你可以只要名字不一樣就好了,主函數(shù)重新寫下
作者: Q_p    時(shí)間: 2017-3-10 20:58
滄浪 發(fā)表于 2017-3-10 20:09
不能啊,肯定只能有一個(gè)MAIN函數(shù),其余的函數(shù)你可以只要名字不一樣就好了,主函數(shù)重新寫下

我不太理解是把其他函數(shù)編程模塊嗎?
作者: meilidianzhi    時(shí)間: 2017-3-10 21:39
不能的啊
作者: Q_p    時(shí)間: 2017-3-10 22:00
meilidianzhi 發(fā)表于 2017-3-10 21:39
不能的啊

那應(yīng)該怎么寫一個(gè)點(diǎn)陣和流水燈的程序,我不知道怎么才能實(shí)現(xiàn)他們一起工作的程序
作者: Q_p    時(shí)間: 2017-3-10 22:00
meilidianzhi 發(fā)表于 2017-3-10 21:39
不能的啊

那應(yīng)該怎么寫一個(gè)點(diǎn)陣和流水燈的程序,我不知道怎么才能實(shí)現(xiàn)他們一起工作的程序
作者: imxuheng    時(shí)間: 2017-3-10 22:06
吧點(diǎn)陣驅(qū)動(dòng)程序?qū)懗梢粋(gè)c文件,把流水燈的程序?qū)懗梢粋(gè)c文件,再寫個(gè)包涵main函數(shù)的c文件,把這三個(gè)c文件都添加到keil中,在包涵main函數(shù)的c文件里寫具體實(shí)現(xiàn)過程,比如調(diào)用其他兩個(gè)c文件里的函數(shù)
作者: Q_p    時(shí)間: 2017-3-10 22:21
imxuheng 發(fā)表于 2017-3-10 22:06
吧點(diǎn)陣驅(qū)動(dòng)程序?qū)懗梢粋(gè)c文件,把流水燈的程序?qū)懗梢粋(gè)c文件,再寫個(gè)包涵main函數(shù)的c文件,把這三個(gè)c文件都 ...

那那些定義之類的說明和驅(qū)動(dòng)程序是寫在各自的C文件中還是寫在main函數(shù)的文件中?我自己寫過一下,感覺有些問題……所以想問具體些
作者: imxuheng    時(shí)間: 2017-3-11 09:12
Q_p 發(fā)表于 2017-3-10 22:21
那那些定義之類的說明和驅(qū)動(dòng)程序是寫在各自的C文件中還是寫在main函數(shù)的文件中?我自己寫過一下,感覺有 ...

估計(jì)你應(yīng)該已經(jīng)明白了,就是與某個(gè)模塊(比如LCD1602、IIC驅(qū)動(dòng))相關(guān)的變量和函數(shù)放在同一個(gè)C文件下,然后在如果需要用某個(gè)模塊的函數(shù),就在包含main的C文件里調(diào)用
作者: Q_p    時(shí)間: 2017-3-11 09:42
imxuheng 發(fā)表于 2017-3-11 09:12
估計(jì)你應(yīng)該已經(jīng)明白了,就是與某個(gè)模塊(比如LCD1602、IIC驅(qū)動(dòng))相關(guān)的變量和函數(shù)放在同一個(gè)C文件下,然 ...

嗯 好像有些明白了。我在試一下 。謝謝
作者: Q_p    時(shí)間: 2017-3-11 10:02
imxuheng 發(fā)表于 2017-3-11 09:12
估計(jì)你應(yīng)該已經(jīng)明白了,就是與某個(gè)模塊(比如LCD1602、IIC驅(qū)動(dòng))相關(guān)的變量和函數(shù)放在同一個(gè)C文件下,然 ...

寫好各個(gè)c文件之后需要用模塊化方式關(guān)聯(lián)一下各個(gè)文件嗎?還是直接在main里調(diào)用
作者: Q_p    時(shí)間: 2017-3-11 10:58
imxuheng 發(fā)表于 2017-3-11 09:12
估計(jì)你應(yīng)該已經(jīng)明白了,就是與某個(gè)模塊(比如LCD1602、IIC驅(qū)動(dòng))相關(guān)的變量和函數(shù)放在同一個(gè)C文件下,然 ...

我自己改了一下程序,編譯通過了,也用開發(fā)板試過了,然后就發(fā)現(xiàn)問題了。。main函數(shù)中調(diào)用2個(gè)C文件,led在前點(diǎn)陣就不能用,點(diǎn)陣在前l(fā)ed就不能用,能不能讓他們一起工作?(不知道是不是陷在各自的循環(huán)里了才不能一起工作)
可能我main函數(shù)寫的有問題,或者一直都是在云里霧里的。。。
下面的是我的main函數(shù),dianzhen和led是各自的程序。不知道我理解得對(duì)不對(duì)。
#include<reg51.h>
#include<intrins.h>
void main()
{
        dianzhen();       
        led();               
}
作者: yzwzfyz    時(shí)間: 2017-3-11 10:59
單片機(jī)上電后從何處開始執(zhí)行呢?
C規(guī)定:從MIAN開始。
如果有多個(gè)MIAN,樓主打算讓計(jì)算機(jī)從從何處理開始執(zhí)行呢?
建議如下:
假設(shè)有MIAN1、MIAN2、MIAN3……,那么就做一個(gè)MIAN,在MIAN中依序執(zhí)行MIAN1、MIAN2、MIAN3……。你看這個(gè)建議可行不?
作者: Q_p    時(shí)間: 2017-3-13 12:00
yzwzfyz 發(fā)表于 2017-3-11 10:59
單片機(jī)上電后從何處開始執(zhí)行呢?
C規(guī)定:從MIAN開始。
如果有多個(gè)MIAN,樓主打算讓計(jì)算機(jī)從從何處理開始 ...

我也不清楚,我寫程序不太行
作者: 人生kui    時(shí)間: 2017-3-13 20:43
有一個(gè)主函數(shù)  其他的模塊函數(shù)都單獨(dú)寫 并且配一個(gè).h文件
作者: Q_p    時(shí)間: 2017-3-15 09:39
人生kui 發(fā)表于 2017-3-13 20:43
有一個(gè)主函數(shù)  其他的模塊函數(shù)都單獨(dú)寫 并且配一個(gè).h文件

.h函數(shù)是這樣寫嗎?比如寫個(gè)led的
#ifndef_LED_H_
#include_LED_H_
void led();(這里需要寫具體函數(shù)嗎,還是就這么簡(jiǎn)單就ok了)
#endif
作者: 淡然若夢(mèng)    時(shí)間: 2017-3-16 17:31
一個(gè)程序只能有一個(gè)Main。只要沒有復(fù)用那么整合成一個(gè)很容易的




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 妹子干综合 | 九九热国产精品视频 | 精品亚洲永久免费精品 | 午夜激情免费 | 国产日韩欧美 | 精品伦精品一区二区三区视频 | www.日韩欧美 | 我爱操 | 日韩国产中文字幕 | 日韩视频精品 | 欧美一级久久 | 自拍在线 | 艹逼网 | 亚洲欧美在线免费观看 | 亚洲一区 中文字幕 | 一级黄色在线 | 国产三级精品三级在线观看四季网 | 麻豆一区二区三区精品视频 | 99久久精品视频免费 | 91亚洲精| 日本 欧美 国产 | 久草热线| 超碰人人人人 | 欧美精产国品一二三区 | 最近日韩中文字幕 | 中文字幕亚洲一区二区三区 | 青青草这里只有精品 | 国产日韩一区二区三区 | 国产成人精品午夜视频免费 | 国产成人精品一区二区三区四区 | 99re热精品视频 | 国产激情精品 | aa级毛片毛片免费观看久 | 日本激情视频中文字幕 | 羞羞视频网页 | 蜜桃av一区二区三区 | 欧美精品久久久 | 亚洲日本一区二区三区四区 | 欧美三级在线 | 国外激情av | 亚洲男人的天堂网站 |