你這個端口定義寫法是錯誤的,兩個IO口控制4個位選也不是簡單取反就能完成。兩個IO口可以組成4種狀態,是BCD碼,用BCD碼/十進制譯碼器CD4028 就能完美解決,為什么非得要用非門?
無標題.jpg (127.58 KB, 下載次數: 30)
下載附件
2020-4-21 06:36 上傳
- #include <reg51.h>
- sbit wela1=P3^3;
- sbit wela2=P3^4;
- unsigned char code table[]={//共陽數碼管段碼"0~f-."
- 0xc0,0xf9,0xa4,0xb0,
- 0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,
- 0xc6,0xa1,0x86,0x8e,0xbf,0x7f};
- void delay(unsigned int k)
- {
- unsigned int i,j;
- for(i=k;i>0;i--)
- for(j=120;j>0;j--);
- }
- void main()
- {
- while(1)
- {
- P0=0xff; //消隱
- wela1=0; //位選
- wela2=0; //位選
- P0=table[1];//段碼
- delay(2); //延時
- P0=0xff;
- wela1=1;
- wela2=0;
- P0=table[2];
- delay(2);
- P0=0xff;
- wela1=0;
- wela2=1;
- P0=table[3];
- delay(2);
- P0=0xff;
- wela1=1;
- wela2=1;
- P0=table[4];
- delay(2);
- }
- }
復制代碼
|