熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2018-7-28 18:10
正文摘要:#include<reg52.h> #include<intrins.h> #define uchar unsigned char #define MAIN_Fosc 11059200UL typedef unsigned int INT16U; sbit DU = P ... |
wulin 發(fā)表于 2018-7-31 05:35 一直沒(méi)出來(lái)這樣的效果 |
李博文 發(fā)表于 2018-7-30 19:46 這與使用八數(shù)碼管沒(méi)有什么關(guān)系,程序是顯示六位,后兩位閑置而已。 ![]() |
wulin 發(fā)表于 2018-7-30 17:53 我用八位共陽(yáng)極的數(shù)碼管怎么 只顯示小數(shù)點(diǎn) 和后兩位數(shù) |
李博文 發(fā)表于 2018-7-30 10:43 樓上好多朋友是瞎猜,此程序的共陽(yáng)數(shù)碼管加點(diǎn)當(dāng)然是 P0 = table[z] & 0x7f; 。由于段碼與位碼共用P0,不加消隱指令肯定會(huì)出問(wèn)題。樓主認(rèn)為去掉 & 0x7f就顯示正常的說(shuō)法是不正確的,只是樓主用仿真軟件看不出來(lái),要是實(shí)際電路就可以看出問(wèn)題來(lái)了。給你改了一下,你試試。#include<reg52.h> #include<intrins.h> #define uchar unsigned char #define MAIN_Fosc 11059200UL typedef unsigned int INT16U; sbit DU = P2^6; sbit WE = P2^7; uchar code table[]={ // 0 1 2 3 4 5 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, // 6 7 8 9 . 關(guān)顯示 0x82, 0xf8, 0x80, 0x90, 0x7f, 0xff }; uchar code T_COM[] = { //1 2 3 4 5 6 0x01, 0x02, 0x04, 0x08, 0x10, 0x20 }; void Delay_Ms(INT16U ms) { INT16U i; do{ i = MAIN_Fosc / 96000; while(--i); //96T per loop }while(--ms); } void Display(uchar z) { //------------------------------ P0 = 0xff; DU = 0; DU = 1; P0 = table[z]; DU = 1; DU = 0; P0 = T_COM[0]; WE = 1; WE = 0; Delay_Ms(3); //------------------------------- P0 = 0xff; DU = 0; DU = 1; P0 = table[z] & 0x7f; DU = 1; DU = 0; P0 = T_COM[1]; WE = 1; WE = 0; Delay_Ms(3); //------------------------------ P0 = 0xff; DU = 0; DU = 1; P0 = table[z]; DU = 1; DU = 0; P0 = T_COM[2]; WE = 1; WE = 0; Delay_Ms(3); //------------------------------- P0 = 0xff; DU = 0; DU = 1; P0 = table[z] & 0x7f; DU = 1; DU = 0; P0 = T_COM[3]; WE = 1; WE = 0; Delay_Ms(3); //------------------------------ P0 = 0xff; DU = 0; DU = 1; P0 = table[z]; DU = 1; DU = 0; P0 = T_COM[4]; WE = 1; WE = 0; Delay_Ms(3); //------------------------------- P0 = 0xff; DU = 0; DU = 1; P0 = table[z] & 0x7f; DU = 1; DU = 0; P0 = T_COM[5]; WE = 1; WE = 0; Delay_Ms(3); } void main() { while(1) { Display(0); } } ![]() |
參與人數(shù) 2 | 黑幣 +15 | 收起 理由 |
---|---|---|
![]() | + 8 | 回帖助人的獎(jiǎng)勵(lì)! |
![]() | + 7 | 很給力! |
lids 發(fā)表于 2018-7-30 09:34 要是或的話 數(shù)據(jù)有一位是0和1或之后是 1 改變了數(shù)據(jù)的值 比如 1010 1010按位或0111 1111 變成 1111 1111 或有一個(gè)值為1 則為1 |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎(jiǎng)勵(lì)! |
段碼”或“0x7f才能顯示,才是正解, |
段碼”或“0x7f才能顯示 |
去了小數(shù)點(diǎn)就可以完全顯示 |
angmall 發(fā)表于 2018-7-29 12:16 設(shè)置成9之后數(shù)碼管交替顯示 還是不是一起顯示 延時(shí)的時(shí)間太長(zhǎng)了 |
guangshi_wq 發(fā)表于 2018-7-29 10:50 共陽(yáng)極 直接和 0x7f與 最高位為0 數(shù)據(jù)的最高位也為0 這樣就不需要判斷了 |
要數(shù)碼顯示, 你把Delay_Ms(3); 設(shè)置成Delay_Ms(9); |
問(wèn)題在這里,因?yàn)檫@個(gè)點(diǎn)不是在每個(gè)位上,如果要顯示小數(shù)點(diǎn)的時(shí)候,先要判斷這個(gè)位有沒(méi)有小數(shù)點(diǎn) |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎(jiǎng)勵(lì)! |
樓主要在顯示程序里每位送段碼前加消隱語(yǔ)句! P0 = 0xff;//消隱 DU = 1;//開(kāi)段選 DU = 0;//關(guān)段選 P0 = table[z];//送段碼 DU = 1;//開(kāi)段選 DU = 0;//關(guān)段選 WE = 0;//贅句 P0 = T_COM[0];//送位碼 WE = 1;//開(kāi)位選 WE = 0;//關(guān)位選 Delay_Ms(3); |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎(jiǎng)勵(lì)! |
在實(shí)際中要做消影操作 |
wc86110 發(fā)表于 2018-7-29 03:13 哪里不對(duì) |
樓主列出的二進(jìn)制也不完全對(duì)啊 |
Powered by 單片機(jī)教程網(wǎng)