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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于keil模塊化編寫程序的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:169574 發表于 2017-3-10 10:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
keil 模塊化編寫程序時,可以在模塊中添加main函數嗎?如果不能那2個程序能用模塊整合成一個嗎?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:169574 發表于 2017-3-10 11:04 | 只看該作者
本帖最后由 Q_p 于 2017-3-10 20:22 編輯

#include<reg52.h>


sbit T_STR = P2^6;       //鎖存引腳,屏上標識位STR
sbit R1    = P0^4;       //數據引腳,屏上標識R1
sbit G1    = P2^4;       //數據引腳,屏上標識G1
sbit T_CLK = P2^5;       //時鐘引腳,屏上標識位CLK
sbit OE    = P2^7;       //使能引腳,屏上標識EN/OE

unsigned char MoveBitNum,MoveBitNumtemp,IncNum;//移動位數,臨時移動位數,大于一個字節增加字節數
unsigned int HzNum;//漢字個數
unsigned char buff[10];

/*-----------------------------------------------
             16x16漢字取模數據
------------------------------------------------*/
unsigned char code hztest[][32]=    //取模選擇字節倒序 ,正序得出的字是反的,可以在軟件中設置自動倒敘
{


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, //前面一屏大小的空字符,不顯示,這里根據屏的大小修改,這個是1個漢字屏
                                                                                 //所以寫入1個漢字

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, //尾部的一屏的空字符,用于清屏,參數和屏大小有關。
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


};
/*-----------------------------------------------
             向595寫入一個字節 單紅色
------------------------------------------------*/
void InputByte( unsigned  char DataR1) //寫一個字節
{
unsigned  char i;
for(i=8; i>0; i--)
{
R1 = !(DataR1&0x01);                  
T_CLK = 0;
T_CLK = 1;
DataR1 = DataR1 >> 1;
}
}
/*-----------------------------------------------
             向595寫入兩個字節 雙色
------------------------------------------------*/
void Input2Byte( unsigned  char DataR1,unsigned  char DataG1) //寫一個字節
{
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;
}
}


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


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

while(1)
{


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


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

  if(MoveBitNum<8)                   //  判讀移動距離是大于一個字節還是小于一個字節,因為一個字節左移右移最大只能8位
          { IncNum=0; MoveBitNumtemp=MoveBitNum; }
  else
          { IncNum=1; MoveBitNumtemp=MoveBitNum-8;}//大于8就減去8得到的數值還是小于8

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


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


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

//彩燈循環
uchar data_s[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //        逆時針流水燈
                                 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,                                         //        閃爍
                                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01, // 順時針流水燈
                                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++) // 掃描每一個字節 0x01為1個 在內部左移
        {
                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;        
}
回復

使用道具 舉報

板凳
ID:169688 發表于 2017-3-10 17:05 | 只看該作者
頂一個
回復

使用道具 舉報

地板
ID:111517 發表于 2017-3-10 20:09 | 只看該作者
不能啊,肯定只能有一個MAIN函數,其余的函數你可以只要名字不一樣就好了,主函數重新寫下

評分

參與人數 1黑幣 +30 收起 理由
admin + 30 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:169574 發表于 2017-3-10 20:58 | 只看該作者
滄浪 發表于 2017-3-10 20:09
不能啊,肯定只能有一個MAIN函數,其余的函數你可以只要名字不一樣就好了,主函數重新寫下

我不太理解是把其他函數編程模塊嗎?
回復

使用道具 舉報

6#
ID:48413 發表于 2017-3-10 21:39 | 只看該作者
不能的啊
回復

使用道具 舉報

7#
ID:169574 發表于 2017-3-10 22:00 | 只看該作者

那應該怎么寫一個點陣和流水燈的程序,我不知道怎么才能實現他們一起工作的程序
回復

使用道具 舉報

8#
ID:169574 發表于 2017-3-10 22:00 | 只看該作者

那應該怎么寫一個點陣和流水燈的程序,我不知道怎么才能實現他們一起工作的程序
回復

使用道具 舉報

9#
ID:151348 發表于 2017-3-10 22:06 | 只看該作者
吧點陣驅動程序寫成一個c文件,把流水燈的程序寫成一個c文件,再寫個包涵main函數的c文件,把這三個c文件都添加到keil中,在包涵main函數的c文件里寫具體實現過程,比如調用其他兩個c文件里的函數

評分

參與人數 1黑幣 +30 收起 理由
admin + 30 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

10#
ID:169574 發表于 2017-3-10 22:21 | 只看該作者
imxuheng 發表于 2017-3-10 22:06
吧點陣驅動程序寫成一個c文件,把流水燈的程序寫成一個c文件,再寫個包涵main函數的c文件,把這三個c文件都 ...

那那些定義之類的說明和驅動程序是寫在各自的C文件中還是寫在main函數的文件中?我自己寫過一下,感覺有些問題……所以想問具體些
回復

使用道具 舉報

11#
ID:151348 發表于 2017-3-11 09:12 | 只看該作者
Q_p 發表于 2017-3-10 22:21
那那些定義之類的說明和驅動程序是寫在各自的C文件中還是寫在main函數的文件中?我自己寫過一下,感覺有 ...

估計你應該已經明白了,就是與某個模塊(比如LCD1602、IIC驅動)相關的變量和函數放在同一個C文件下,然后在如果需要用某個模塊的函數,就在包含main的C文件里調用

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

12#
ID:169574 發表于 2017-3-11 09:42 | 只看該作者
imxuheng 發表于 2017-3-11 09:12
估計你應該已經明白了,就是與某個模塊(比如LCD1602、IIC驅動)相關的變量和函數放在同一個C文件下,然 ...

嗯 好像有些明白了。我在試一下 。謝謝
回復

使用道具 舉報

13#
ID:169574 發表于 2017-3-11 10:02 | 只看該作者
imxuheng 發表于 2017-3-11 09:12
估計你應該已經明白了,就是與某個模塊(比如LCD1602、IIC驅動)相關的變量和函數放在同一個C文件下,然 ...

寫好各個c文件之后需要用模塊化方式關聯一下各個文件嗎?還是直接在main里調用
回復

使用道具 舉報

14#
ID:169574 發表于 2017-3-11 10:58 | 只看該作者
imxuheng 發表于 2017-3-11 09:12
估計你應該已經明白了,就是與某個模塊(比如LCD1602、IIC驅動)相關的變量和函數放在同一個C文件下,然 ...

我自己改了一下程序,編譯通過了,也用開發板試過了,然后就發現問題了。。main函數中調用2個C文件,led在前點陣就不能用,點陣在前led就不能用,能不能讓他們一起工作?(不知道是不是陷在各自的循環里了才不能一起工作)
可能我main函數寫的有問題,或者一直都是在云里霧里的。。。
下面的是我的main函數,dianzhen和led是各自的程序。不知道我理解得對不對。
#include<reg51.h>
#include<intrins.h>
void main()
{
        dianzhen();       
        led();               
}

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 贊一個!

查看全部評分

回復

使用道具 舉報

15#
ID:123289 發表于 2017-3-11 10:59 | 只看該作者
單片機上電后從何處開始執行呢?
C規定:從MIAN開始。
如果有多個MIAN,樓主打算讓計算機從從何處理開始執行呢?
建議如下:
假設有MIAN1、MIAN2、MIAN3……,那么就做一個MIAN,在MIAN中依序執行MIAN1、MIAN2、MIAN3……。你看這個建議可行不?

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

16#
ID:169574 發表于 2017-3-13 12:00 | 只看該作者
yzwzfyz 發表于 2017-3-11 10:59
單片機上電后從何處開始執行呢?
C規定:從MIAN開始。
如果有多個MIAN,樓主打算讓計算機從從何處理開始 ...

我也不清楚,我寫程序不太行
回復

使用道具 舉報

17#
ID:168475 發表于 2017-3-13 20:43 | 只看該作者
有一個主函數  其他的模塊函數都單獨寫 并且配一個.h文件

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

18#
ID:169574 發表于 2017-3-15 09:39 | 只看該作者
人生kui 發表于 2017-3-13 20:43
有一個主函數  其他的模塊函數都單獨寫 并且配一個.h文件

.h函數是這樣寫嗎?比如寫個led的
#ifndef_LED_H_
#include_LED_H_
void led();(這里需要寫具體函數嗎,還是就這么簡單就ok了)
#endif
回復

使用道具 舉報

19#
ID:137261 發表于 2017-3-16 17:31 | 只看該作者
一個程序只能有一個Main。只要沒有復用那么整合成一個很容易的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品视频一二三区 | 成人免费视频网站在线观看 | aa级毛片毛片免费观看久 | 伊人中文字幕 | 欧美精产国品一二三区 | 国产精品永久免费视频 | 日韩精品一区二区三区中文在线 | 亚洲成人一区二区三区 | 国产精品综合一区二区 | 国产成人精品一区二区三区在线 | 日韩综合在线 | 欧美电影免费观看 | 亚洲成av人片在线观看 | 天天曰夜夜 | 五月婷婷中文 | 天天色官网 | 天天干免费视频 | 天天干天天玩天天操 | 做a网站 | 亚州无限乱码 | 亚洲第一av | 亚洲精品一级 | 天天综合网永久 | 毛片视频网址 | 日本成年免费网站 | 色综合一区二区三区 | 福利片在线看 | 亚洲精品一区在线 | 羞羞视频网站免费看 | 日本午夜网 | 成人免费视频一区 | 中文字幕一区二区三区不卡 | 午夜国产一级 | 欧美成人免费在线 | 日韩成人在线网站 | 91av视频在线免费观看 | 操操操操操 | 一级毛片在线看 | 亚州精品天堂中文字幕 | 午夜影院在线观看视频 | 亚洲一区二区三区在线观看免费 |