這個數碼管模塊是用兩塊595用作靜態顯示。代碼修改如下,如果顯示的個位十位顛倒,就把代碼個位十位調一下。
- #include <REG51.H>
- // LED字模表
- unsigned char LED_0F[17] = {
- 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
- 0x80, 0x90, 0x8C, 0xBF, 0xC6, 0xA1, 0x86, 0xFF, 0xbf};
- sbit DIO = P1^0; //串行數據輸入
- sbit RCK = P1^1; //鎖存
- sbit SCK = P1^2; //移位
- sbit BIT1 = P1^3;
- sbit BIT0 = P1^4;
-
- sbit KEY_UP = P2^0; //按鍵加
- sbit KEY_DOWN = P2^1; //按鍵減
- sbit KEY_RESET = P2^2; //復位
- bit sign;
- unsigned char num=0; //上電初始值
- unsigned int count;
- void Delay(unsigned int xms)//@12.000MHz
- {
- unsigned char i, j;
- while(xms)
- {
- i = 2;
- j = 239;
- do
- {
- while (--j);
- } while (--i);
- xms--;
- }
- }
- void LED_OUT(unsigned char X, unsigned char bitd)
- {
- unsigned char i;
- if(bitd)
- {
- BIT1=1;BIT0=0;
- }
- else
- {
- BIT1=0;BIT0=1;
- }
- for(i=0;i<8;i++)
- {
- X<<=1;
- DIO = CY;
- SCK = 1;
- SCK = 0;
- }
- RCK = 1;
- RCK = 0;
- }
- void main(void)
- {
- LED_OUT(LED_0F[num/10], 1);
- LED_OUT(LED_0F[num%10], 0);
- LED_OUT(LED_0F[num/10], 1);
- LED_OUT(LED_0F[num%10], 0);
- while(1)
- {
- if(!KEY_UP || !KEY_DOWN || !KEY_RESET)
- {
- if(++count>=10 && sign==0)
- {
- sign=1;
- if(!KEY_UP && num<99)num++;
- if(!KEY_DOWN && num>0)num--;
- if(!KEY_RESET)num=0;
- LED_OUT(LED_0F[num/10], 1);
- LED_OUT(LED_0F[num%10], 0);
- }
- }
- else
- {
- sign=0;
- count=0;
- }
- Delay(1);
- }
- }
復制代碼 |