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

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

QQ登錄

只需一步,快速開始

搜索
查看: 5673|回復(fù): 23
收起左側(cè)

52單片機(jī)數(shù)碼管仿真正常,實(shí)物不亮

  [復(fù)制鏈接]
ID:992098 發(fā)表于 2021-12-14 10:51 | 顯示全部樓層 |閱讀模式
要做個(gè)仿真圖所顯示的功能的板子,仿真也沒有問題,數(shù)碼管能亮。
根據(jù)原理圖做出PCB完成實(shí)物

但是實(shí)物做出來以后其他功能都正常,就只有數(shù)碼管不亮,默數(shù)3s后,指示燈和蜂鳴器都能亮能響。
我在思索是不是因?yàn)槲贿x的com端口直接連接單片機(jī),因?yàn)椴捎玫氖枪碴帢O數(shù)碼管驅(qū)動(dòng)不夠?qū)е虏涣粒瑴y(cè)出來的COM端電壓有5V左右。
PCB.jpg
仿真圖.jpg
原理圖.jpg
回復(fù)

使用道具 舉報(bào)

ID:992098 發(fā)表于 2021-12-14 10:51 | 顯示全部樓層

代碼

  1. #include <REGX52.H>
  2. #include <stdio.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar count=0,minute=0,second=3,flag=0,stop=0;
  6. uchar table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰極
  7. uchar disbuf[4]={0};//位選定義一個(gè)四位的數(shù)組,循環(huán)掃描顯示相應(yīng)的內(nèi)容
  8. sbit buzzer=P2^0;//定義單片機(jī)的相應(yīng)引腳
  9. sbit P11=P1^1;
  10. //sbit P12=P1^2;
  11. sbit light=P1^3;
  12. sbit jianfenkey=P1^4;

  13. uchar Jia=0, Jian=0;


  14. void delay_ms(uint x) //延時(shí)消抖函數(shù)
  15. {uint t;
  16. while(x--) for(t = 0; t < 120; t++);
  17. }

  18. void display()//模塊化書寫函數(shù),進(jìn)行相應(yīng)的調(diào)用,實(shí)現(xiàn)模塊化編程
  19. {
  20.         uchar i,j;
  21.         uchar sel;
  22.         disbuf[0]=second%10; //disbuf[]每一個(gè)元素賦值,對(duì)秒賦值
  23.         disbuf[1]=second/10;
  24.         disbuf[2]=minute%10;//對(duì)分鐘賦值
  25.         disbuf[3]=minute/10;
  26.         P2=0XFF;     //P2口接數(shù)碼管的位選端,選擇哪個(gè)數(shù)碼管工作  共陰極數(shù)碼管,位選0時(shí)有效  先置FF,使為選段為高電平,數(shù)碼管不工作
  27.         sel=0x01;//定義一個(gè)掃描的位選端
  28.         for(i=0;i<4;i++)
  29.                 {
  30.                         j=disbuf[i];  //掃描依次顯示四個(gè)數(shù)碼管  上面的賦值已經(jīng)將disbuf數(shù)值更改,也就是1~9
  31.                         P0=table[j]; //將字形碼發(fā)送到P0端口,顯示位的數(shù)據(jù)
  32.                         P2=(sel^0xff); // ^異或相異為1,保證每次都有一個(gè)數(shù)碼管點(diǎn)亮
  33.                         delay_ms(1); // 延時(shí)后,防止程序運(yùn)行太快,跑飛
  34.                         P2=0XFF;
  35.                         sel=sel<<1;  //  左移運(yùn)算  0x01左移,1將依次在四位上循環(huán)
  36.                 }
  37. }

  38. void modify_time()//更改計(jì)時(shí)器時(shí)間的函數(shù),修改初始定時(shí)時(shí)間
  39. {
  40.         if(Jia == 1)
  41. {
  42.         if(flag==0)//修改秒
  43.                 {
  44.                         second++;
  45.                         if(second==60)//秒的最大為60,然后會(huì)發(fā)生進(jìn)位
  46.                                 {
  47.                                         second=0;
  48.                                         disbuf[0]=0;
  49.                                         disbuf[1]=0;
  50.                                 }
  51.                 }
  52.         else//修改分鐘
  53.                 {
  54.                         minute++;
  55.                         if(minute==60)//分鐘最大為60,到60以后會(huì)發(fā)生進(jìn)位
  56.                                 {
  57.                                         minute=0;
  58.                                         disbuf[2]=0;
  59.                                         disbuf[3]=0;
  60.                                 }
  61.                 }

  62. Jia=0;
  63. }
  64. else if(Jian==1)
  65. {
  66.         if(flag==0)//修改秒
  67.                 {
  68.                         second--;
  69.                         if(second==0)//秒的最小為0,然后會(huì)發(fā)生借位
  70.                                 {
  71.                                         second=59;
  72.                                         disbuf[0]=9;
  73.                                         disbuf[1]=5;
  74.                                         minute=minute-1;
  75.                                 }
  76.                 }
  77. Jian=0;}
  78. }
  79. void main(void)//主函數(shù)
  80. {
  81.   TMOD=0x01;//定時(shí)器T0,工作方式1,為16位定時(shí)器
  82.   TH0=(65536-50000)/256;//高8位賦值
  83.   TL0=(65536-50000)%256;//低8位賦值
  84.   TR0=0;//默認(rèn)情況下,定時(shí)器不工作,在外部的觸發(fā)情況下,定時(shí)器,工作,開始減1運(yùn)算
  85.   ET0=1;//打開定時(shí)器T0的中斷
  86.   IT0=1;//設(shè)置外部中斷0的觸發(fā)方式
  87.   EX0=1;//打開外部中斷的中斷
  88.   IT1=1;//設(shè)置外部中斷0觸發(fā)方式
  89.   EX1=1;//打開外部中斷1中斷
  90.   EA=1;//總中斷
  91.   while(1)
  92.         {
  93.                 if(stop==1)//當(dāng)計(jì)時(shí)倒計(jì)時(shí)完成以后,屏幕閃爍顯示
  94.                         {
  95.                                 while(1)
  96.                                         {
  97.                                                 P2=~P2;
  98.                                                 delay_ms(150);
  99.                                         }
  100.                         }
  101.                 else
  102.                         display();//調(diào)用顯示函數(shù),依次減一
  103.                 if(!P11)//判斷更改時(shí)間按鍵是否按鍵  進(jìn)行相應(yīng)的消抖
  104.        {
  105.                    while(!P11)  
  106.            delay_ms(10);
  107.                            Jia=1;  
  108.            if(P11)
  109.                                          {
  110.                                        
  111.            modify_time();
  112.                                          }//調(diào)用調(diào)日期時(shí)間的函數(shù)
  113.                 }        
  114.                          if(!jianfenkey)//判斷更改時(shí)間按鍵是否按鍵  進(jìn)行相應(yīng)的消抖
  115.        {
  116.                    while(!jianfenkey)  
  117.            delay_ms(10);  
  118.                    Jian = 1;
  119.            if(jianfenkey)
  120.            {
  121.              modify_time();}//調(diào)用調(diào)時(shí)間的函數(shù)
  122.                 }        
  123.         }
  124. }
  125. void inter1() interrupt 1//定時(shí)器T0的中斷
  126. {
  127.         count++;
  128.         TH0=(65536-50000)/256;
  129.     TL0=(65536-50000)%256;
  130.         if(count==20)//50ms   20次即為1s
  131.                 {        
  132.                         count=0;
  133.                         second--;
  134.                         if(second==0)//該處的程序結(jié)構(gòu)應(yīng)該仔細(xì)看下
  135.                                 {
  136.                                         if(minute!=0)//防止minute最后為0的時(shí)候,還執(zhí)行minute--,使程序出錯(cuò)。
  137.                                                 {
  138.                                                         minute--;
  139.                                                         second=60;
  140.                                                         second--;
  141.                                                         if(second==0)
  142.                                                                 {        
  143.                                                                         if(minute==0)
  144.                                                                                 {
  145.                                                                                         second=0;
  146.                                                                                         minute=0;
  147.                                                                                         TR0=0;
  148.                                                                                         count=0;
  149.                                                                                         buzzer=0;
  150.                                                                                         light=0;
  151.                                                                                         stop=1;

  152.                                                                                 }
  153.                                                                 }
  154.                                                 }
  155.                                         else
  156.                                                 {
  157.                                                         second=0;
  158.                                                         minute=0;
  159.                                                         TR0=0;
  160.                                                         count=0;
  161.                                                         buzzer=0;
  162.                                                         light=0;
  163.                                                         stop=1;
  164.                                                 }
  165.                                 }
  166.                 }
  167. }
  168.         
  169. void inter0() interrupt 0//外部中斷0
  170. {
  171.         flag=~flag;//flag參數(shù)的作用,是修改定時(shí)時(shí)間的時(shí),確定是分鐘位還是小時(shí)位。
  172.         
  173. }

  174. void inter2() interrupt 2//外部中斷1
  175. {
  176.         TR0=~TR0;//按鍵3,奇數(shù)次按下,定時(shí)器開始工作,偶數(shù)次關(guān)閉。
  177. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:992098 發(fā)表于 2021-12-14 10:59 | 顯示全部樓層
相關(guān)仿真、PCB放入RAR了,麻煩各位大佬幫忙分析一下問題
回復(fù)

使用道具 舉報(bào)

ID:301191 發(fā)表于 2021-12-14 16:22 | 顯示全部樓層
頂一下
回復(fù)

使用道具 舉報(bào)

ID:313048 發(fā)表于 2021-12-14 16:33 | 顯示全部樓層
仿真能行的電路不代表實(shí)物是可以的,因?yàn)榉抡胬锩鎸?duì)電流這個(gè)參數(shù)是沒做處理的,只對(duì)電壓做了處理。你實(shí)物的COM端直接接單片機(jī),對(duì)單片機(jī)來說不一定驅(qū)動(dòng)得了,最好是用三極管去驅(qū)動(dòng)位選,這樣驅(qū)動(dòng)能力強(qiáng)很多,同時(shí)你要確認(rèn)數(shù)碼管選型是否正確,共陽(yáng)共陰是否正確。
還有一點(diǎn),你說是共陰的數(shù)碼管,而位選IO口的電壓是5V我不理解,5V共陰的數(shù)碼管不就不亮嗎,要亮不應(yīng)該是0V嗎?
你可以試試直接段選給個(gè)0XFF,位選拉低為0,你看一下能否有亮燈不就知道驅(qū)動(dòng)夠不夠嗎?
回復(fù)

使用道具 舉報(bào)

ID:992098 發(fā)表于 2021-12-14 17:07 | 顯示全部樓層
AUG 發(fā)表于 2021-12-14 16:33
仿真能行的電路不代表實(shí)物是可以的,因?yàn)榉抡胬锩鎸?duì)電流這個(gè)參數(shù)是沒做處理的,只對(duì)電壓做了處理。你實(shí)物的 ...

給了0xff測(cè)試以后還是不亮的,通過代碼把他的位選給低電平測(cè)出來還是高電平不知道是怎么回事。所以現(xiàn)在可能是驅(qū)動(dòng)不夠的問題是嗎?因?yàn)楫?dāng)時(shí)做的時(shí)候忘記接三極管開關(guān)選通,導(dǎo)致現(xiàn)在這個(gè)問題
回復(fù)

使用道具 舉報(bào)

ID:992298 發(fā)表于 2021-12-14 17:16 | 顯示全部樓層
上拉電阻有沒有問題哦
回復(fù)

使用道具 舉報(bào)

ID:96682 發(fā)表于 2021-12-14 17:16 來自觸屏版 | 顯示全部樓層
實(shí)物上可以去掉 R7,R8 阻值 1K ,否則即使程序沒問題也會(huì)讓你摸不著頭腦
回復(fù)

使用道具 舉報(bào)

ID:992098 發(fā)表于 2021-12-14 17:19 | 顯示全部樓層
wc86110 發(fā)表于 2021-12-14 17:16
實(shí)物上可以去掉 R7,R8 阻值 1K ,否則即使程序沒問題也會(huì)讓你摸不著頭腦

R7 R8是復(fù)位上面的電阻 應(yīng)該不會(huì)影響數(shù)碼管吧
回復(fù)

使用道具 舉報(bào)

ID:752974 發(fā)表于 2021-12-14 17:26 | 顯示全部樓層
這種共陰極電路,流過數(shù)碼管的段電流由RP1控制,這個(gè)電阻值要選的合適。再者,各段電流全部灌入單片機(jī),當(dāng)各個(gè)段都亮?xí)r,單片機(jī)可能就光榮了。
回復(fù)

使用道具 舉報(bào)

ID:342822 發(fā)表于 2021-12-14 17:32 | 顯示全部樓層
屏幕截圖(115).png
回復(fù)

使用道具 舉報(bào)

ID:992098 發(fā)表于 2021-12-14 17:37 | 顯示全部樓層
munuc_w 發(fā)表于 2021-12-14 17:26
這種共陰極電路,流過數(shù)碼管的段電流由RP1控制,這個(gè)電阻值要選的合適。再者,各段電流全部灌入單片機(jī),當(dāng) ...

RP1選的是1K 的 排阻,但是其他功能都正常只是數(shù)碼管不亮而已,所以單片機(jī)應(yīng)該沒有問題……吧
回復(fù)

使用道具 舉報(bào)

ID:992098 發(fā)表于 2021-12-14 17:38 | 顯示全部樓層

謝謝,測(cè)試過了 但是數(shù)碼管沒有壞,每個(gè)段都可以亮
回復(fù)

使用道具 舉報(bào)

ID:313048 發(fā)表于 2021-12-14 17:47 | 顯示全部樓層
海瀾之佳 發(fā)表于 2021-12-14 17:38
謝謝,測(cè)試過了 但是數(shù)碼管沒有壞,每個(gè)段都可以亮

程序簡(jiǎn)單化,新建一個(gè)工程,兩行代碼,P00置高,位選IO置低,試試
回復(fù)

使用道具 舉報(bào)

ID:992535 發(fā)表于 2021-12-15 08:46 | 顯示全部樓層
可能是電阻大小的問題
回復(fù)

使用道具 舉報(bào)

ID:170318 發(fā)表于 2021-12-15 09:39 | 顯示全部樓層
硬件問題,共陰數(shù)碼管的8(含點(diǎn))段碼位上加上驅(qū)動(dòng)三極管或者驅(qū)動(dòng)芯片,降低位掃描頻率,可以讓數(shù)碼管發(fā)光,但會(huì)覺得亮度不足
回復(fù)

使用道具 舉報(bào)

ID:811729 發(fā)表于 2021-12-15 10:02 | 顯示全部樓層
seg推挽 你給0xFF, com 你注意設(shè)置成開漏,如果你的MCU端口有這些功能的話。如果沒有,在確保SEG 5V的情況下,鑷子將COM對(duì)地,看看有沒亮的。
如果是IO口不聽指揮,先不要給對(duì)應(yīng)的bit ,防止宏定義出問題。直接輸出寄存器給值。
還有 不要把com接在IO上,除非你的數(shù)碼管很小。用三極管控制COM也好,共陰用NPN就行。
回復(fù)

使用道具 舉報(bào)

ID:992098 發(fā)表于 2021-12-16 09:06 | 顯示全部樓層
DATOY 發(fā)表于 2021-12-15 08:46
可能是電阻大小的問題

可是我位選段沒有接電阻耶
回復(fù)

使用道具 舉報(bào)

ID:992098 發(fā)表于 2021-12-16 09:07 | 顯示全部樓層
AUG 發(fā)表于 2021-12-14 17:47
程序簡(jiǎn)單化,新建一個(gè)工程,兩行代碼,P00置高,位選IO置低,試試

還是不亮
回復(fù)

使用道具 舉報(bào)

ID:992098 發(fā)表于 2021-12-16 09:09 | 顯示全部樓層
jhczy 發(fā)表于 2021-12-15 09:39
硬件問題,共陰數(shù)碼管的8(含點(diǎn))段碼位上加上驅(qū)動(dòng)三極管或者驅(qū)動(dòng)芯片,降低位掃描頻率,可以讓數(shù)碼管發(fā)光 ...

現(xiàn)在實(shí)物已經(jīng)做出來了 還有挽救的辦法嗎
回復(fù)

使用道具 舉報(bào)

ID:992098 發(fā)表于 2021-12-16 09:10 | 顯示全部樓層
love_ourlife 發(fā)表于 2021-12-15 10:02
seg推挽 你給0xFF, com 你注意設(shè)置成開漏,如果你的MCU端口有這些功能的話。如果沒有,在確保SEG 5V的情況 ...

輸出寄存器給值怎么給呀。我
還是個(gè)菜雞
回復(fù)

使用道具 舉報(bào)

ID:140371 發(fā)表于 2021-12-16 09:36 來自觸屏版 | 顯示全部樓層
背面加unl2803,配合修改led驅(qū)動(dòng)部份程式
回復(fù)

使用道具 舉報(bào)

ID:524818 發(fā)表于 2021-12-16 09:43 | 顯示全部樓層
實(shí)際電路圖有嗎?
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2021-12-16 10:16 | 顯示全部樓層
本帖最后由 wulin 于 2021-12-16 13:51 編輯
海瀾之佳 發(fā)表于 2021-12-16 09:09
現(xiàn)在實(shí)物已經(jīng)做出來了 還有挽救的辦法嗎

如果PCB圖與實(shí)物數(shù)碼管管腳沒錯(cuò),數(shù)碼管不亮的主要原因是P0口沒有高電平輸出能力,排阻阻值過大不足以驅(qū)動(dòng)數(shù)碼管。把RP1改為330~510歐排阻。另外樓主的程序與仿真圖的端口定義不一致,并且程序內(nèi)容也較雜亂,就算把數(shù)碼管搞亮也達(dá)不到樓主預(yù)想的功能。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩高清在线观看 | 国产福利91精品一区二区三区 | 天天干天天插天天 | 亚洲毛片一区二区 | 亚洲一区二区精品视频 | 亚洲一区精品视频 | 一区二区视频在线 | 国产在线不卡 | 在线视频 亚洲 | 欧美日韩专区 | 日韩二区 | 草久视频 | 日韩黄a | 国内自拍视频在线观看 | 精品日韩 | 国产精品69久久久久水密桃 | 精品1区2区| 国产一区二区三区久久久久久久久 | 久久精品视频免费看 | 精品天堂| 91精品国产91久久久久久最新 | 亚洲精品美女视频 | 日屁网站| 欧美日本韩国一区二区三区 | 午夜丁香视频在线观看 | 国产午夜精品一区二区三区嫩草 | 国产精品美女久久久久久免费 | 91精品国产综合久久精品 | 成人性视频免费网站 | 麻豆亚洲 | 国产欧美精品一区二区 | 亚洲精品国产a久久久久久 午夜影院网站 | 国产伦精品一区二区三区高清 | 一级高清免费毛片 | 91高清在线视频 | 日韩一区二区三区在线 | 成年人网站免费视频 | 欧美精品首页 | 国产91黄色| 亚洲伊人久久综合 | www.久久艹 |