|
發布時間: 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 發表于 2018-7-31 05:35 一直沒出來這樣的效果 |
李博文 發表于 2018-7-30 19:46 這與使用八數碼管沒有什么關系,程序是顯示六位,后兩位閑置而已。
|
wulin 發表于 2018-7-30 17:53 我用八位共陽極的數碼管怎么 只顯示小數點 和后兩位數 |
李博文 發表于 2018-7-30 10:43 樓上好多朋友是瞎猜,此程序的共陽數碼管加點當然是 P0 = table[z] & 0x7f; 。由于段碼與位碼共用P0,不加消隱指令肯定會出問題。樓主認為去掉 & 0x7f就顯示正常的說法是不正確的,只是樓主用仿真軟件看不出來,要是實際電路就可以看出問題來了。給你改了一下,你試試。#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 . 關顯示 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); } }
|
| 段碼”或“0x7f才能顯示,才是正解, |
| 段碼”或“0x7f才能顯示 |
| 去了小數點就可以完全顯示 |
angmall 發表于 2018-7-29 12:16 設置成9之后數碼管交替顯示 還是不是一起顯示 延時的時間太長了 |
guangshi_wq 發表于 2018-7-29 10:50 共陽極 直接和 0x7f與 最高位為0 數據的最高位也為0 這樣就不需要判斷了 |
|
要數碼顯示, 你把Delay_Ms(3); 設置成Delay_Ms(9); |
| 在實際中要做消影操作 |
wc86110 發表于 2018-7-29 03:13 哪里不對 |
| 樓主列出的二進制也不完全對啊 |