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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機數碼管顯示達不到要求,敬請朋友們幫助,謝謝!

[復制鏈接]
跳轉到指定樓層
樓主
ID:86913 發表于 2019-3-17 12:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
4位數碼管顯示2019和依次顯示 2、0、1、9 剛剛試過成功了,但是想來個跳檔顯示(先2、后1、再0、最后9)卻搞不好,又想不通。懇請朋友們指導:我這是錯在哪里?謝謝!
這個程序,只能顯示1個“2”(2常亮)


/******  在 2、0、1、9 的排列上,先顯示2、再1、再0、最后9  ******/
/******所用單片機STC12C4052AD******/  
#include <reg51.h>
#define uint  unsigned int        
#define uchar unsigned char
uchar code bit_tab[]={0xfe,0xfd,0xfb,0xf7};    //四位數碼管位選表
uchar code seg_data[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};           //數碼管顯示碼
uchar disp_buf[]={2,0,1,9,};                       //定義顯示,并賦值“2019”
         /******延時函數*******/
void Delay(uint xms)                                    
{
  uint i,j;
  for(i=xms;i>0;i--)                     
    for(j=110;j>0;j--);      
}
        /******顯示函數******/
void Display()
{
  uchar tmp;                            //定義顯示暫存
  uchar j;                                 
  tmp=bit_tab[j];             //根據當前的位選計數值決定顯示哪只數碼管
  P3=tmp;                            //送P3控制被選取的數碼管點亮
  tmp=disp_buf[j];              //根據當前的位選計數值查的數字的顯示碼
  tmp=seg_data[tmp];                    //取顯示碼
  P1=tmp;                            //送到P1口顯示出相應的數字        
  Delay(1000);                            //延時1秒鐘
  P3=0xff;        
  P1=0xff;            
}
         /******主函數******/
void main()      
{
  uchar j;                              //顯示位選計數器  
  while(1)
   {        
    j=0;                            //在第一位上顯示2
    Display();                                
    j=2;                            //在第三位上顯示1        
    Display();                                                        
    j=1;                            //在第二位上顯示0
    Display();                                                         
    j=3;                            //在第四位上顯示9
    Display();                                                                  
   }                    
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

來自 4#
ID:234075 發表于 2019-3-17 22:32 | 只看該作者
你在main()主函數和Display()顯示函數中同時定義了變量 j ,而你想把主函數中的變量 j 的值帶入Display顯示函數中,這樣做是不行的。
在執行main()主函數中,你對 j 進行了賦值,但在執行Display()顯示函數時,因為你又重新定義了 j ,程序會使用新的未定義的變量 j ,而不是你在主函數中賦值的 j。
正確的做法應該時在函數初始先定義變量 j ,然后在main()主函數中進行賦值,在Disaplay()顯示函數中調用。

評分

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

查看全部評分

回復

使用道具 舉報

沙發
ID:387856 發表于 2019-3-17 18:52 | 只看該作者
/******  在 2、0、1、9 的排列上,先顯示2、再1、再0、最后9  ******/
/******所用單片機STC12C4052AD******/  
#include <reg51.h>
#define uint  unsigned int        
#define uchar unsigned char

uchar k1,j1;  

uchar code bit_tab[]={0x01,0x02,0x04,0x08};    //四位數碼管位選表
uchar code seg_data[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};           //數碼管顯示碼
uchar disp_buf[]={2,0,1,9,};                       //定義顯示,并賦值“2019”
         /******延時函數*******/
void Delay(uint xms)                                    
{
  uint i,j;
  for(i=xms;i>0;i--)                     
    for(j=110;j>0;j--);      
}
         /******主函數******/
void main()      
{  
  uint i;                           
  P1 = 0xff;
  P3 = 0xff;
  while(1)
   {   
    for(i=0;i<80;i++)     //  此段顯示的時間
    {                                          //
         P1 = seg_data[2];    //                                            
     P3 = bit_tab[0];     //                           
     Delay(10);           //                 
     P3 = 0x00;                  //
     P1 = 0xff;      
     Delay(2);                          //
        }                                     //    此段顯示2
        for(i=0;i<40;i++)      ///
    {                                                //
         P1 = seg_data[2];     ///                                          
     P3 = bit_tab[0];      ///                          
     Delay(10);             //               
     P3 = 0x00;                   //
     P1 = 0xff;                       //
     Delay(2);                           //
         P1 = seg_data[0];      //                                          
     P3 = bit_tab[1];       //                        
     Delay(10);             //               
     P3 = 0x00;                        //
     P1 = 0xff;                       //
     Delay(2);                                 // 此段顯示0  下同 就不標注了
        }   
        for(i=0;i<20;i++)   
    {
         P1 = seg_data[2];                                                
     P3 = bit_tab[0];                                
     Delay(10);                           
     P3 = 0x00;        
     P1 = 0xff;      
     Delay(2);
         P1 = seg_data[0];                                                
     P3 = bit_tab[1];                                
     Delay(10);                           
     P3 = 0x00;        
     P1 = 0xff;      
     Delay(2);
     P1 = seg_data[1];                                                
     P3 = bit_tab[2];                                
     Delay(10);                           
     P3 = 0x00;        
     P1 = 0xff;      
     Delay(2);
        }  
        while(1)   
    {
         P1 = seg_data[2];                                                
     P3 = bit_tab[0];                                
     Delay(10);                           
     P3 = 0x00;        
     P1 = 0xff;      
     Delay(2);
         P1 = seg_data[0];                                                
     P3 = bit_tab[1];                                
     Delay(10);                           
     P3 = 0x00;        
     P1 = 0xff;      
     Delay(2);
     P1 = seg_data[1];                                                
     P3 = bit_tab[2];                                
     Delay(10);                           
     P3 = 0x00;        
     P1 = 0xff;      
     Delay(2);
     P1 = seg_data[9];                                                
     P3 = bit_tab[3];                                
     Delay(10);                           
     P3 = 0x00;        
     P1 = 0xff;      
     Delay(2);
        }                                                                 
   }                    
}
回復

使用道具 舉報

板凳
ID:466164 發表于 2019-3-17 19:10 | 只看該作者
你的變量J
void main()
void Display()
同時使用,且是關聯的,開個全局變量,估計能解決你的問題。

評分

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

查看全部評分

回復

使用道具 舉報

5#
ID:387856 發表于 2019-3-18 09:08 | 只看該作者
我都把程序附上去了 而且是仿真通過的。管理員怎么不給我加分呢。而且其它兩位的回答,我在調試的過程中就試過的,都是不行的,樓主的程序是有問題的。樓主可以直接復制我的程序在PROTUES里仿真,出來的效果就是 先顯示2再顯示20,再顯示201最后停在顯示2019;
回復

使用道具 舉報

6#
ID:86913 發表于 2019-3-19 21:16 | 只看該作者
zhb2004xp 發表于 2019-3-17 22:32
你在main()主函數和Display()顯示函數中同時定義了變量 j ,而你想把主函數中的變量 j 的值帶入Display顯示 ...

謝謝zhb2004xp ,完全是您說的那樣。
回復

使用道具 舉報

7#
ID:86913 發表于 2019-3-19 21:19 | 只看該作者
7358655 發表于 2019-3-17 19:10
你的變量J
void main()
void Display()

感謝7358655您的指導,改為全局變量后運行正確!
回復

使用道具 舉報

8#
ID:86913 發表于 2019-3-19 21:20 | 只看該作者
liuhailan5757 發表于 2019-3-17 18:52
/******  在 2、0、1、9 的排列上,先顯示2、再1、再0、最后9  ******/
/******所用單片機STC12C4052AD*** ...

謝謝您的關心、指導,辛苦了!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 少妇无套高潮一二三区 | 国产亚洲一区二区三区 | 国产精品揄拍一区二区 | 自拍视频一区二区三区 | 精品国产久 | 国产精品美女www爽爽爽视频 | 久久久久成人精品亚洲国产 | 日本精品一区二区 | 中文字幕在线观看日韩 | 国产精品国产a | 在线国产视频 | 91精品国产91久久久久久吃药 | 国产精品久久久久久模特 | 看片国产| 免费v片 | 亚洲欧洲视频 | 91精品国产综合久久香蕉麻豆 | 黄色成人免费在线观看 | 精品久久国产 | 亚洲视频免费在线看 | 三级av网址 | 亚洲成人久久久 | 中文字幕91av | 国产一区二区影院 | 一级毛片色一级 | 亚洲精品一区二区三区 | 亚洲精品精品 | 国产99视频精品免费视频7 | 色综合九九 | 亚洲天堂日韩精品 | 久久免费精品视频 | 久久成人免费视频 | 日韩小视频 | 黄在线免费观看 | 在线视频日韩 | 亚洲国产一区二区三区在线观看 | 精品视频免费 | 免费人成在线观看网站 | 国产特级毛片aaaaaa | 激情久久久久 | 午夜a v电影 |