#include "config.h" DPY_Str DPY_Info; code INT8U DPY_FontTab[] = { DPY_FONT_FULL, //FULL DPY_FONT_NULL, //NULL DPY_FONT_LINE, //- DPY_FONT_0, //0 DPY_FONT_1, //1 DPY_FONT_2, //2 DPY_FONT_3, //3 DPY_FONT_4, //4 DPY_FONT_5, //5 DPY_FONT_6, //6 DPY_FONT_7, //7 DPY_FONT_8, //8 DPY_FONT_9, //9 DPY_FONT_A, //A DPY_FONT_b, //b DPY_FONT_C, //C DPY_FONT_d, //d DPY_FONT_E, //E DPY_FONT_F, //F DPY_FONT_G, //G DPY_FONT_H, //H DPY_FONT_I, //I DPY_FONT_J, //J DPY_FONT_K, //K DPY_FONT_L, //L DPY_FONT_M, //M DPY_FONT_n, //n DPY_FONT_o, //o DPY_FONT_P, //P DPY_FONT_Q, //Q DPY_FONT_r, //R DPY_FONT_S, //S DPY_FONT_t, //t DPY_FONT_U, //U DPY_FONT_v, //v DPY_FONT_W, //w DPY_FONT_X, //X DPY_FONT_Y, //Y DPY_FONT_Z, //Z }; //数码管初始化 void DPY_Init(void) { DPY_InfoInit(); MC74HC595_Init(); DPY_DnInit(); DPY_WriteBuff("A.001"); } //写入要显示的内容到缓冲区 //参数 INT8U Dn:数码管编号 //参数 INT8U Value:数码管显示内容,如果是小数点,只添加小数点到相应的数码管 INT8U DPY_Write(INT8U Dn, INT8U Value) { if(Dn >= DPY_SIZE) { return(0); } if((Value >= '0') && (Value <= '9')) //转换数字0-9 { Value = Value - '0' + 3; } else if((Value >= 'a') && (Value <= 'z')) //转换数字a-z { Value = Value - 'a' + 13; } else if((Value >= 'A') && (Value <= 'Z')) //转换数字A-Z { Value = Value - 'A' + 13; } else if(Value == '-') { Value = Value - '-' + 2; } else if(Value == ' ') { Value = Value - ' ' + 1; } else if(Value == '.') //写入的非小数点,写入要显示的内容, { DPY_Info.DPY[Dn] |= DPY_SegH; return(1); } else if(Value == 0) { DPY_Info.DPY[Dn] = DPY_FONT_FULL; return(1); } else { return(0); } DPY_Info.DPY[Dn] = DPY_FontTab[Value]; return(1); } INT8U DPY_WriteBuff(INT8U *ptr) { INT8U i; for(i = 0; i < 4; i++) { DPY_Write(i, *ptr++); if(*ptr == '.') { DPY_Write(i, *ptr++); } } return(1); } //数码管扫描显示函数 void DPY_Display(void) { DPY_D0_Off(); DPY_D1_Off(); DPY_D2_Off(); DPY_D3_Off(); if(DPY_Info.Cnt < (DPY_SIZE - 1)) { DPY_Info.Cnt++; } else { DPY_Info.Cnt = 0; } //MC74HC595_CLK_Init(); //CLK与D0公用,重新初始化 MC74HC595_DATA_Init(); //DATA与KEY公用,重新初始化 MC74HC595_Write(DPY_Info.DPY[DPY_Info.Cnt]); //DPY_D0_Off(); //DPY_D1_Off(); //DPY_D2_Off(); //DPY_D3_Off(); KEY1_Init(); //KEY1_Schmitt(); switch(DPY_Info.Cnt) { case DPY_D1: //D1=0,数码管1显示 DPY_D1_On(); KEY_MENU_Read(); //读取MENU按键状态 break; case DPY_D2: //D2=0,数码管2显示 DPY_D2_On(); KEY_UP_Read(); //读取UP按键状态 break; case DPY_D3: //D3=0,数码管3显示 DPY_D3_On(); KEY_ENTER_Read(); //读取ENTER按键状态 break; default: //D0=0,数码管0显示 DPY_D0_On(); KEY_DOWN_Read(); //读取DOWN按键状态 break; } }