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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5180|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

[求助]大家?guī)臀铱纯匆粋(gè)小程序什么毛病,急!!!

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:32490 發(fā)表于 2012-6-16 10:48 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

本人菜鳥 只有C語(yǔ)言基礎(chǔ)和單片機(jī)概念(開始就是只知道單片機(jī)包括那幾大類東東,具體的不懂,就這種水平,現(xiàn)在對(duì)單片機(jī)有了基本的印象和了解)剛買板子幾個(gè)月 邊看書邊做,花了好久好久這么個(gè)程序,目的是用8*8數(shù)碼管用00-00-00這樣的格式表示電子鐘,但是燒進(jìn)程序后,數(shù)碼管全部顯示8.(就是全部亮,數(shù)碼管每段都亮),打擊啊,左思右想就是不知道哪里的毛病,求大手點(diǎn)化啊,新手需要鼓勵(lì)啊

//數(shù)碼管時(shí)鐘
#include "REGX52.H"
#define LED_PORT P0
#define uint8 unsigned char
#define uint16 unsigned int
#define A 20
#define B 30



#define C 40
uint8 Time2Ms= 0 ; // 2msLED 動(dòng)態(tài)掃描時(shí)標(biāo)消息
uint8 Time1S= 0 ; //時(shí)鐘1S 時(shí)標(biāo)消息
static uint16 flag2MS= 0 ; //對(duì)2 ms 時(shí)標(biāo)進(jìn)行計(jì)數(shù)

uint8 LEDBuffer[8] = {0} ; //顯示緩沖區(qū)
uint8 DisplayCode[]={ 
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x40};//共陰數(shù)碼管使用
/*uint8 code  DisplayCode[]=
{
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,
0xbf, //'-'號(hào)代碼
} ;//共陽(yáng)數(shù)碼管使用
*/
//初始化定時(shí)器0
void Timer0Init(void)
{
 TMOD &= 0xf0 ;
 TMOD |= 0x01 ; //定時(shí)器0 工作方式1
 //TH0=(65536-50000)/256;  //12M賦值
    //TL0=(65536-50000)%256;
 TH0 = 0xf8 ; //定時(shí)器初始值,2MS
 TL0 = 0xcc ;
 TR0 = 1 ;
 ET0 = 1 ;
}
//在定時(shí)器0 中斷處理程序中,設(shè)置時(shí)標(biāo)消息,11.0592M晶振
void Time0(void) interrupt 1
{
 TH0 = 0xf8 ; //定時(shí)器重新賦初值
 TL0 = 0xcc ;
 //TH0=(65536-50000)/256;  //送初值12M晶振
 //TL0=(65536-50000)%256;
 //50ms_flag=1;
 Time2Ms= 1 ; //2MS 時(shí)標(biāo)標(biāo)志位置位
 if(++flag2MS== 500)
  {
  flag2MS= 0 ;
  Time1S= 1 ;
  }
}
void SetClock(uint8 nHour, uint8 nMinute, uint8 nSecond)
{
 LEDBuffer[0] = nHour / 10 ;
 LEDBuffer[1] = nHour % 10 ;
 LEDBuffer[2] = '-' ;
 LEDBuffer[3] = nMinute / 10 ;
 LEDBuffer[4] = nMinute % 10 ;
 LEDBuffer[5] = '-' ;
 LEDBuffer[6] = nSecond / 10 ;
 LEDBuffer[7] = nSecond % 10 ;
}
void RunClock(void)//數(shù)碼管電子鐘程序
{
if(Time1S )
 {
 Time1S = 0 ;
 if(++LEDBuffer[7] == 10)
  {
  LEDBuffer[7] = 0 ;
  if(++LEDBuffer[6] == 6)
   {
   LEDBuffer[6] = 0 ;
   if(++LEDBuffer[4] == 10)
    {
    LEDBuffer[4] = 0 ;
    if(++LEDBuffer[3] == 6)
     {
     LEDBuffer[3] = 0 ;
     if( LEDBuffer[0]<2)
      {
      if(++LEDBuffer[1]==10)
      {
      LEDBuffer[1] = 0 ;
      LEDBuffer[0]++;
      }
      }
     else
      {
      if(++LEDBuffer[1]==4)
       {
       LEDBuffer[1] = 0 ;
       LEDBuffer[0] = 0 ;
       }
      }
     }
    }
   }
  }
 }
}

//再分別編寫送數(shù)碼管段碼函數(shù),以及位選通函數(shù)。
void SendLedSegData(uint8 dat)
{
 LED_PORT = dat ;
 P2_6 = 1 ; //開段碼鎖存,送段碼數(shù)據(jù)
 P2_6 = 0 ;
}
void SendLedBitData(uint8 dat)
{
 uint8 temp ;
 temp = (0x01 << dat ) ; //根據(jù)要選通的位計(jì)算出位碼
 LED_PORT = temp ;
 P2_7 = 1 ; //開位碼鎖存,送位碼數(shù)據(jù)
 P2_7 = 0 ;
}
void LedDisplay(uint8 * pBuffer)
{
 static uint8 LED_BIT = 0 ;
 if(flag2MS)
  {
  flag2MS= 0 ;
  SendLedBitData(8) ; //消隱
  if(pBuffer[LED_BIT] == '-') //顯示'-'號(hào)
   {
   SendLedSegData(DisplayCode[16]) ;
   }
  else
   {
   SendLedSegData(DisplayCode[pBuffer[LED_BIT]]) ;
   }
  SendLedBitData(LED_BIT);
  if(++LED_BIT > 7)
   {
   LED_BIT = 0 ;
   }
  }
}
void main_init()
{
 P1_4 = 1 ; //關(guān)閉LED燈
    P3_4=0;//關(guān)閉液晶
 Timer0Init() ;
 SetClock(A,B,C) ; //設(shè)置初始時(shí)間
 EA = 1 ;
}

void main()
{
    main_init();
 while(1)
 {
 LedDisplay(LEDBuffer);
 RunClock();
 }
}
附:板子為本站的VER51HEI-5,keil 編譯通過,無錯(cuò)誤無警告,附圖如下:

 

 

[此貼子已經(jīng)被作者于2012-6-16 16:12:48編輯過]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:32490 發(fā)表于 2012-6-20 18:12 | 只看該作者
怎么沒人回答啊,給點(diǎn)建議哇
回復(fù)

使用道具 舉報(bào)

板凳
ID:1 發(fā)表于 2012-6-21 04:39 | 只看該作者

這個(gè)程序是網(wǎng)上找了修改的 還是完全自己寫的 問題比較多

回復(fù)

使用道具 舉報(bào)

地板
ID:35727 發(fā)表于 2012-6-25 18:35 | 只看該作者

你寫的好復(fù)雜啊

 

回復(fù)

使用道具 舉報(bào)

5#
ID:32490 發(fā)表于 2012-6-29 18:02 | 只看該作者
以下是引用wy704972600在2012-6-25 18:35:09的發(fā)言:

你寫的好復(fù)雜啊

 

我是新手啊 已經(jīng)盡力了 怎么能優(yōu)化啊 有沒有效率高代碼簡(jiǎn)單的啊 發(fā)我一份啊

回復(fù)

使用道具 舉報(bào)

6#
ID:32490 發(fā)表于 2012-6-29 18:04 | 只看該作者
以下是引用admin在2012-6-21 4:39:14的發(fā)言:

這個(gè)程序是網(wǎng)上找了修改的 還是完全自己寫的 問題比較多

管理員幫忙指出我的問題啊 我進(jìn)入自己的死胡同了轉(zhuǎn)不出來

回復(fù)

使用道具 舉報(bào)

7#
ID:42637 發(fā)表于 2012-7-9 20:36 | 只看該作者
寫復(fù)雜了
[此貼子已經(jīng)被作者于2012-7-9 20:44:30編輯過]
回復(fù)

使用道具 舉報(bào)

8#
ID:41987 發(fā)表于 2012-7-14 16:13 | 只看該作者
你好!

你應(yīng)該是寫得顯示函數(shù)有問題,段與位選之間可能有問題。我改寫顯示函數(shù)以后可以正常運(yùn)行。

void display(uint8 aa, uint8 bb,uint8 cc,uint8 dd, uint8 ee,uint8 ff,uint8 gg, uint8 hh)
{

P0=table[aa];   //送段選數(shù)據(jù)
dula=1;         //打開段選
dula=0;         //關(guān)閉斷選
P0=0xff;    //送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí)原來段選數(shù)據(jù)通過位鎖存端造成混亂

P0=0xfe;        //送位選數(shù)據(jù)
wela=1;         //打開位選
wela=0;         //關(guān)閉位選
delayms(1);     //延時(shí)


P0=table[bb];    //送段選數(shù)據(jù)
dula=1;         //打開段選
dula=0;         //關(guān)閉斷選
P0=0xff;//送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí)原來段選數(shù)據(jù)通過位鎖存端造成混亂

P0=0xfd;      //送位選數(shù)據(jù)
wela=1;        //打開位選
wela=0;       //關(guān)閉位選
delayms(1);   //延時(shí)


P0=table[cc]; //送段選數(shù)據(jù)
dula=1;       //打開段選
dula=0;       //關(guān)閉斷選
P0=0xff; //送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí)原來段選數(shù)據(jù)通過位鎖存端造成混亂

P0=0xfb;     //送位選數(shù)據(jù)
wela=1;      //打開位選
wela=0;      //關(guān)閉位選
delayms(1);  //延時(shí)


P0=table[dd];   //送段選數(shù)據(jù)
dula=1;         //打開段選
dula=0;         //關(guān)閉斷選
P0=0xff;    //送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí)原來段選數(shù)據(jù)通過位鎖存端造成混亂

P0=0xf7;        //送位選數(shù)據(jù)
wela=1;         //打開位選
wela=0;         //關(guān)閉位選
delayms(1);     //延時(shí)


P0=table[ee];    //送段選數(shù)據(jù)
dula=1;         //打開段選
dula=0;         //關(guān)閉斷選
P0=0xff;//送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí)原來段選數(shù)據(jù)通過位鎖存端造成混亂

P0=0xef;      //送位選數(shù)據(jù)
wela=1;        //打開位選
wela=0;       //關(guān)閉位選
delayms(1);   //延時(shí)


P0=table[ff]; //送段選數(shù)據(jù)
dula=1;       //打開段選
dula=0;       //關(guān)閉斷選
P0=0xff; //送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí)原來段選數(shù)據(jù)通過位鎖存端造成混亂

P0=0xdf;     //送位選數(shù)據(jù)
wela=1;      //打開位選
wela=0;      //關(guān)閉位選
delayms(1);  //延時(shí)

P0=table[gg];   //送段選數(shù)據(jù)
dula=1;         //打開段選
dula=0;         //關(guān)閉斷選
P0=0xff;    //送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí)原來段選數(shù)據(jù)通過位鎖存端造成混亂

P0=0xbf;        //送位選數(shù)據(jù)
wela=1;         //打開位選
wela=0;         //關(guān)閉位選
delayms(1);     //延時(shí)


P0=table[hh];    //送段選數(shù)據(jù)
dula=1;         //打開段選
dula=0;         //關(guān)閉斷選
P0=0xff;//送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時(shí)原來段選數(shù)據(jù)通過位鎖存端造成混亂

P0=0x7f;      //送位選數(shù)據(jù)
wela=1;        //打開位選
wela=0;       //關(guān)閉位選
delayms(1);   //延時(shí)

 

}

void delayms(uint16 z)
{
uint16 x,y;
for(x=z;x>0;x--)
 for(y=110;y>0;y--);
}


這個(gè)顯示函數(shù)是我根據(jù)光盤里的程序改寫的
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久九九免费 | 免费a国产 | 亚洲喷水 | 国产精品一区二区在线 | h视频免费在线观看 | 欧美色a v | 国产欧美一级二级三级在线视频 | 日韩在线视频一区 | 亚洲综合热 | 国产乱码精品1区2区3区 | 日本在线看 | 欧美精品久久久久 | 免费中文字幕日韩欧美 | 欧美日韩精品在线免费观看 | 黄色欧美大片 | 久久久久国产一区二区三区 | 日韩一区二区久久 | 日韩一区二区在线视频 | 蜜桃视频在线观看免费视频网站www | 激情久久网 | 一级黄色片日本 | 国产原创视频 | 欧美久久久久 | 久久com| 91人人视频在线观看 | 国产97在线看 | 日韩欧美国产成人一区二区 | 精品1区 | 一区二区精品 | 国产高清精品一区二区三区 | 国产精品精品3d动漫 | 福利一区二区在线 | 日韩在线小视频 | 午夜精品一区二区三区在线播放 | 亚洲综合二区 | 99re视频在线免费观看 | 国产欧美日韩精品一区二区三区 | 日本一区二区三区免费观看 | 日韩午夜影院 | 精品欧美一区二区三区久久久 | 天天色天天色 |