- /*********************************************************************************************
- 出品: DoYoung Studio
- 程序名: 數碼管驅動程序
- 編寫時間: 2011年8月16日
- 硬件支持: STC12C4052AD
- 接口說明: 點掃描
- 修改日志:
- NO.1-
- /*********************************************************************************************
- 說明:
- /*********************************************************************************************/
- #include <STC15F2K60S2.H>
- /**********************************************************************************************/
- //“程序開發調試設置項”
- #define LI 1 //設置LED顯示的亮度(值域:1~9)
- #define DELAY 10 //設置每一個點顯示的時間長度(1~20)
- /**********************************************************************************************/
- sbit LED_1 =P2^3; //設置LED點陣屏連接的I/O口
- sbit LED_2 =P2^5; //設置LED點陣屏連接的I/O口
- sbit LED_3 =P3^7; //設置LED點陣屏連接的I/O口
- sbit LED_4 =P1^4; //設置LED點陣屏連接的I/O口
- sbit LED_5 =P5^4; //設置LED點陣屏連接的I/O口
- sbit LED_6 =P2^7; //設置LED點陣屏連接的I/O口
- sbit LED_7 =P2^4; //設置LED點陣屏連接的I/O口
- sbit LED_8 =P2^2;
- sbit LED_9 =P2^0;
- sbit LED_10 =P1^1;
- sbit LED_11 =P3^3;
- sbit LED_12 =P3^5;
- sbit LED_13 =P1^6;
- sbit LED_14 =P2^1;
- sbit LED_15 =P1^2;
- sbit LED_16 =P1^0;
- sbit LED_17 =P2^6;
- #define P1M0SET 0x57 //設置I/O口工作方式//01010111
- #define P2M0SET 0xff //設置I/O口工作方式//11111111
- #define P3M0SET 0xa8 //設置I/O口工作方式//10101000
- #define P5M0SET 0x10 //設置I/O口工作方式//00010000
- //sbit KEY =P3^2; //按鍵1
- bit PD;//秒點顯示標志
- unsigned char MENU;//菜單切換標志位
- data unsigned char TIME_HH,TIME_MM,TIME_SS;//設置時、分、秒存放區
- data unsigned char hs = 0; // 軟計數器,對10ms時基信號累加到0.5s
- data unsigned char cou = 0; // 軟計數器,對10ms時基信號累加到1s
- data unsigned char bn;//掃描映射全局變量
- data unsigned char PWM;//顯示亮度
- /**********************************************************************************************/
- unsigned char code NUM[]={//顯示數字字樣
- 0X1F,0X11,0X1F,//0
- 0x12,0x1F,0x10,//1
- 0x1D,0x15,0x17,//2
- 0x15,0x15,0x1F,//3
- 0x07,0x04,0x1F,//4
- 0x17,0x15,0x1D,//5
- 0x1F,0x15,0x1D,//6
- 0x01,0x01,0x1F,//7
- 0x1F,0x15,0x1F,//8
- 0x17,0x15,0x1F,//9
- 0x02,0x1C,0x14,//C
- 0x0E,0x10,0x0E,//V
- };
- /**********************************************************************************************/
- unsigned char code Week[]={//顯示星期字樣
- 0x00,0x04,0x04,0x04,0x04,0x04,0x00,//一
- 0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,//二
- 0x00,0x10,0x15,0x15,0x15,0x10,0x00,//三
- 0x1F,0x11,0x17,0x11,0x17,0x11,0x1F,//四
- 0x00,0x10,0x15,0x1F,0x15,0x1D,0x10,//五
- 0x00,0x12,0x0A,0x03,0x0A,0x12,0x00,//六
- 0x00,0x1F,0x15,0x15,0x15,0x15,0x1F,//日
- };
- /*********************************************************************************************/
- void delay (unsigned int a){ // 用于點掃描的延時
- unsigned int i;
- while( a-- != 0){
- for(i = 0; i < DELAY; i++);
- }
- }
- /*********************************************************************************************/
- void dis_off (void){//全關
- P1M1 = 0x57; //P1置為開漏 01010111
- P2M1 = 0xff; //P2置為開漏 11111111
- P3M1 = 0xa8; //P3置為開漏 10101000
- P5M1 = 0x10; //P5置為開漏 00010000
- P1 = 0x57; //P1置1
- P2 = 0xff; //P2置1
- P3 = 0xa8; //P3置1
- P5 = 0x10; //P5置1
- delay(10-PWM);
- }
- /*********************************************************************************************/
- void displayHH1 (unsigned char d){ //第1列橫向顯示程序
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0xef;LED_1 = 0;delay(PWM);dis_off();}//11101111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xfb;LED_1 = 0;delay(PWM);dis_off();}//11111011
- i = d & 0x04;
- if(i == 0x04){P2M1 = 0xfe;LED_1 = 0;delay(PWM);dis_off();}//11111110
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x55;LED_1 = 0;delay(PWM);dis_off();}//01010101
- i = d & 0x10;
- if(i == 0x10){P3M1 = 0xa0;LED_1 = 0;delay(PWM);dis_off();}//10100000
- }
- /*********************************************************************************************/
- void displayHH2 (unsigned char d){ //第2列橫向顯示程序 10111100
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0xef;LED_2 = 0;delay(PWM);dis_off();}//11101111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xfb;LED_2 = 0;delay(PWM);dis_off();}//11111011
- i = d & 0x04;
- if(i == 0x04){P2M1 = 0xfe;LED_2 = 0;delay(PWM);dis_off();}//11111110
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x55;LED_2 = 0;delay(PWM);dis_off();}//01010101
- i = d & 0x10;
- if(i == 0x10){P3M1 = 0xa0;LED_2 = 0;delay(PWM);dis_off();}//10100000
- }
- /*********************************************************************************************/
- void displayHH3 (unsigned char d){ //第3列橫向顯示程序 11011100
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0xef;LED_3 = 0;delay(PWM);dis_off();}//11101111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xfb;LED_3 = 0;delay(PWM);dis_off();}//11111011
- i = d & 0x04;
- if(i == 0x04){P2M1 = 0xfe;LED_3 = 0;delay(PWM);dis_off();}//11111110
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x55;LED_3 = 0;delay(PWM);dis_off();}//01010101
- i = d & 0x10;
- if(i == 0x10){P3M1 = 0xa0;LED_3 = 0;delay(PWM);dis_off();}//10100000
- }
- /*********************************************************************************************/
- void displayHH4 (unsigned char d){ //第4列橫向顯示程序 11101100
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0xef;LED_4 = 0;delay(PWM);dis_off();}//11101111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xfb;LED_4 = 0;delay(PWM);dis_off();}//11111011
- i = d & 0x04;
- if(i == 0x04){P2M1 = 0xfe;LED_4 = 0;delay(PWM);dis_off();}//11111110
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x55;LED_4 = 0;delay(PWM);dis_off();}//01010101
- i = d & 0x10;
- if(i == 0x10){P3M1 = 0xa0;LED_4 = 0;delay(PWM);dis_off();}//10100000
- }
- /*********************************************************************************************/
- void displayHH5 (unsigned char d){ //第5列橫向顯示程序 11110100
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0xef;LED_5 = 0;delay(PWM);dis_off();}//11101111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xfb;LED_5 = 0;delay(PWM);dis_off();}//11111011
- i = d & 0x04;
- if(i == 0x04){P2M1 = 0xfe;LED_5 = 0;delay(PWM);dis_off();}//11111110
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x55;LED_5 = 0;delay(PWM);dis_off();}//01010101
- i = d & 0x10;
- if(i == 0x10){P3M1 = 0xa0;LED_5 = 0;delay(PWM);dis_off();}//10100000
- }
- /*********************************************************************************************/
- void displayHH6 (unsigned char d){ //第6列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0xef;LED_6 = 0;delay(PWM);dis_off();}//11101111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xfb;LED_6 = 0;delay(PWM);dis_off();}//11111011
- i = d & 0x04;
- if(i == 0x04){P2M1 = 0xfe;LED_6 = 0;delay(PWM);dis_off();}//11111110
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x55;LED_6 = 0;delay(PWM);dis_off();}//01010101
- i = d & 0x10;
- if(i == 0x10){P3M1 = 0xa0;LED_6 = 0;delay(PWM);dis_off();}//10100000
- }
- /*********************************************************************************************/
- void displayHH7 (unsigned char d){ //第7列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P1M1 = 0x17;LED_1 = 0;delay(PWM);dis_off();}//00010111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xfd;LED_1 = 0;delay(PWM);dis_off();}//11111101
- i = d & 0x04;
- if(i == 0x04){P1M1 = 0x53;LED_1 = 0;delay(PWM);dis_off();}//01010011
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x56;LED_1 = 0;delay(PWM);dis_off();}//01010110
- i = d & 0x10;
- if(i == 0x10){P2M1 = 0xbf;LED_1 = 0;delay(PWM);dis_off();}//10111111
- }
- /*********************************************************************************************/
- void displayHH8 (unsigned char d){ //第8列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P1M1 = 0x17;LED_2 = 0;delay(PWM);dis_off();}//00010111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xfd;LED_2 = 0;delay(PWM);dis_off();}//11111101
- i = d & 0x04;
- if(i == 0x04){P1M1 = 0x53;LED_2 = 0;delay(PWM);dis_off();}//01010011
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x56;LED_2 = 0;delay(PWM);dis_off();}//01010110
- i = d & 0x10;
- if(i == 0x10){P2M1 = 0xbf;LED_2 = 0;delay(PWM);dis_off();}//10111111
- }
- /*********************************************************************************************/
- void displayHH9 (unsigned char d){ //第9列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P1M1 = 0x17;LED_3 = 0;delay(PWM);dis_off();}//00010111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xfd;LED_3 = 0;delay(PWM);dis_off();}//11111101
- i = d & 0x04;
- if(i == 0x04){P1M1 = 0x53;LED_3 = 0;delay(PWM);dis_off();}//01010011
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x56;LED_3 = 0;delay(PWM);dis_off();}//01010110
- i = d & 0x10;
- if(i == 0x10){P2M1 = 0xbf;LED_3 = 0;delay(PWM);dis_off();}//10111111
- }
- /*********************************************************************************************/
- void displayHH10 (unsigned char d){ //第10列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P1M1 = 0x17;LED_4 = 0;delay(PWM);dis_off();}//00010111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xfd;LED_4 = 0;delay(PWM);dis_off();}//11111101
- i = d & 0x04;
- if(i == 0x04){P1M1 = 0x53;LED_4 = 0;delay(PWM);dis_off();}//01010011
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x56;LED_4 = 0;delay(PWM);dis_off();}//01010110
- i = d & 0x10;
- if(i == 0x10){P2M1 = 0xbf;LED_4 = 0;delay(PWM);dis_off();}//10111111
- }
- /*********************************************************************************************/
- void displayHH11 (unsigned char d){ //第11列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P1M1 = 0x17;LED_5 = 0;delay(PWM);dis_off();}//00010111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xfd;LED_5 = 0;delay(PWM);dis_off();}//11111101
- i = d & 0x04;
- if(i == 0x04){P1M1 = 0x53;LED_5 = 0;delay(PWM);dis_off();}//01010011
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x56;LED_5 = 0;delay(PWM);dis_off();}//01010110
- i = d & 0x10;
- if(i == 0x10){P2M1 = 0xbf;LED_5 = 0;delay(PWM);dis_off();}//10111111
- }
- /*********************************************************************************************/
- void displayHH12 (unsigned char d){ //第12列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P1M1 = 0x17;LED_6 = 0;delay(PWM);dis_off();}//00010111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xfd;LED_6 = 0;delay(PWM);dis_off();}//11111101
- i = d & 0x04;
- if(i == 0x04){P1M1 = 0x53;LED_6 = 0;delay(PWM);dis_off();}//01010011
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x56;LED_6 = 0;delay(PWM);dis_off();}//01010110
- i = d & 0x10;
- if(i == 0x10){P2M1 = 0xbf;LED_6 = 0;delay(PWM);dis_off();}//10111111
- }
- /*********************************************************************************************/
- void displayHH13 (unsigned char d){ //第13列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0x7f;LED_11 = 0;delay(PWM);dis_off();}//01111111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xef;LED_11 = 0;delay(PWM);dis_off();}//11101111
- i = d & 0x04;
- if(i == 0x04){P2M1 = 0xfb;LED_11 = 0;delay(PWM);dis_off();}//11111011
- i = d & 0x08;
- if(i == 0x08){P2M1 = 0xfe;LED_11 = 0;delay(PWM);dis_off();}//11111110
- i = d & 0x10;
- if(i == 0x10){P1M1 = 0x55;LED_11 = 0;delay(PWM);dis_off();}//01010101
- }
- /*********************************************************************************************/
- void displayHH14 (unsigned char d){ //第14列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0x7f;LED_12 = 0;delay(PWM);dis_off();}//01111111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xef;LED_12 = 0;delay(PWM);dis_off();}//11101111
- i = d & 0x04;
- if(i == 0x04){P2M1 = 0xfb;LED_12 = 0;delay(PWM);dis_off();}//11111011
- i = d & 0x08;
- if(i == 0x08){P2M1 = 0xfe;LED_12 = 0;delay(PWM);dis_off();}//11111110
- i = d & 0x10;
- if(i == 0x10){P1M1 = 0x55;LED_12 = 0;delay(PWM);dis_off();}//01010101
- }
- /*********************************************************************************************/
- void displayHH15 (unsigned char d){ //第15列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0x7f;LED_13 = 0;delay(PWM);dis_off();}//01111111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xef;LED_13 = 0;delay(PWM);dis_off();}//11101111
- i = d & 0x04;
- if(i == 0x04){P2M1 = 0xfb;LED_13 = 0;delay(PWM);dis_off();}//11111011
- i = d & 0x08;
- if(i == 0x08){P2M1 = 0xfe;LED_13 = 0;delay(PWM);dis_off();}//11111110
- i = d & 0x10;
- if(i == 0x10){P1M1 = 0x55;LED_13 = 0;delay(PWM);dis_off();}//01010101
- }
- /*********************************************************************************************/
- void displayHH16 (unsigned char d){ //第16列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0x7f;LED_14 = 0;delay(PWM);dis_off();}//01111111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xef;LED_14 = 0;delay(PWM);dis_off();}//11101111
- i = d & 0x04;
- if(i == 0x04){P2M1 = 0xfb;LED_14 = 0;delay(PWM);dis_off();}//11111011
- i = d & 0x08;
- if(i == 0x08){P2M1 = 0xfe;LED_14 = 0;delay(PWM);dis_off();}//11111110
- i = d & 0x10;
- if(i == 0x10){P1M1 = 0x55;LED_14 = 0;delay(PWM);dis_off();}//01010101
- }
- /*********************************************************************************************/
- void displayHH17 (unsigned char d){ //第17列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0x7f;LED_15 = 0;delay(PWM);dis_off();}//01111111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xef;LED_15 = 0;delay(PWM);dis_off();}//11101111
- i = d & 0x04;
- if(i == 0x04){P2M1 = 0xfb;LED_15 = 0;delay(PWM);dis_off();}//11111011
- i = d & 0x08;
- if(i == 0x08){P2M1 = 0xfe;LED_15 = 0;delay(PWM);dis_off();}//11111110
- i = d & 0x10;
- if(i == 0x10){P1M1 = 0x55;LED_15 = 0;delay(PWM);dis_off();}//01010101
- }
- /*********************************************************************************************/
- void displayHH18 (unsigned char d){ //第18列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0x7f;LED_16 = 0;delay(PWM);dis_off();}//01111111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xef;LED_16 = 0;delay(PWM);dis_off();}//11101111
- i = d & 0x04;
- if(i == 0x04){P2M1 = 0xfb;LED_16 = 0;delay(PWM);dis_off();}//11111011
- i = d & 0x08;
- if(i == 0x08){P2M1 = 0xfe;LED_16 = 0;delay(PWM);dis_off();}//11111110
- i = d & 0x10;
- if(i == 0x10){P1M1 = 0x55;LED_16 = 0;delay(PWM);dis_off();}//01010101
- }
- /*********************************************************************************************/
- void displayHH19 (unsigned char d){ //第19列橫向顯示程序 11111000 (符號)
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0x7f;LED_17 = 0;delay(PWM);dis_off();}//11101111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xef;LED_17 = 0;delay(PWM);dis_off();}//11111011
- }
- /*********************************************************************************************/
- void displayHH20 (unsigned char d){ //第20列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0xf7;LED_11 = 0;delay(PWM);dis_off();}//11110111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xdf;LED_11 = 0;delay(PWM);dis_off();}//11011111
- i = d & 0x04;
- if(i == 0x04){P3M1 = 0x28;LED_11 = 0;delay(PWM);dis_off();}//00101000
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x47;LED_11 = 0;delay(PWM);dis_off();}//01000111
- i = d & 0x10;
- if(i == 0x10){P5M1 = 0x00;LED_11 = 0;delay(PWM);dis_off();}//00000000
- }
- /*********************************************************************************************/
- void displayHH21 (unsigned char d){ //第21列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0xf7;LED_12 = 0;delay(PWM);dis_off();}//11110111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xdf;LED_12 = 0;delay(PWM);dis_off();}//11011111
- i = d & 0x04;
- if(i == 0x04){P3M1 = 0x28;LED_12 = 0;delay(PWM);dis_off();}//00101000
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x47;LED_12 = 0;delay(PWM);dis_off();}//01000111
- i = d & 0x10;
- if(i == 0x10){P5M1 = 0x00;LED_12 = 0;delay(PWM);dis_off();}//00000000
- }
- /*********************************************************************************************/
- void displayHH22 (unsigned char d){ //第22列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0xf7;LED_13 = 0;delay(PWM);dis_off();}//11110111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xdf;LED_13 = 0;delay(PWM);dis_off();}//11011111
- i = d & 0x04;
- if(i == 0x04){P3M1 = 0x28;LED_13 = 0;delay(PWM);dis_off();}//00101000
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x47;LED_13 = 0;delay(PWM);dis_off();}//01000111
- i = d & 0x10;
- if(i == 0x10){P5M1 = 0x00;LED_13 = 0;delay(PWM);dis_off();}//00000000
- }
- /*********************************************************************************************/
- void displayHH23 (unsigned char d){ //第23列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0xf7;LED_14 = 0;delay(PWM);dis_off();}//11110111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xdf;LED_14 = 0;delay(PWM);dis_off();}//11011111
- i = d & 0x04;
- if(i == 0x04){P3M1 = 0x28;LED_14 = 0;delay(PWM);dis_off();}//00101000
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x47;LED_14 = 0;delay(PWM);dis_off();}//01000111
- i = d & 0x10;
- if(i == 0x10){P5M1 = 0x00;LED_14 = 0;delay(PWM);dis_off();}//00000000
- }
- /*********************************************************************************************/
- void displayHH24 (unsigned char d){ //第24列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0xf7;LED_15 = 0;delay(PWM);dis_off();}//11110111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xdf;LED_15 = 0;delay(PWM);dis_off();}//11011111
- i = d & 0x04;
- if(i == 0x04){P3M1 = 0x28;LED_15 = 0;delay(PWM);dis_off();}//00101000
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x47;LED_15 = 0;delay(PWM);dis_off();}//01000111
- i = d & 0x10;
- if(i == 0x10){P5M1 = 0x00;LED_15 = 0;delay(PWM);dis_off();}//00000000
- }
- /*********************************************************************************************/
- void displayHH25 (unsigned char d){ //第25列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0xf7;LED_16 = 0;delay(PWM);dis_off();}//11110111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xdf;LED_16 = 0;delay(PWM);dis_off();}//11011111
- i = d & 0x04;
- if(i == 0x04){P3M1 = 0x28;LED_16 = 0;delay(PWM);dis_off();}//00101000
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x47;LED_16 = 0;delay(PWM);dis_off();}//01000111
- i = d & 0x10;
- if(i == 0x10){P5M1 = 0x00;LED_16 = 0;delay(PWM);dis_off();}//00000000
- }
- /*********************************************************************************************/
- void displayHH26 (unsigned char d){ //第26列橫向顯示程序 11111000
- unsigned char i;
- i = d & 0x01;
- if(i == 0x01){P2M1 = 0xf7;LED_17 = 0;delay(PWM);dis_off();}//11110111
- i = d & 0x02;
- if(i == 0x02){P2M1 = 0xdf;LED_17 = 0;delay(PWM);dis_off();}//11011111
- i = d & 0x04;
- if(i == 0x04){P3M1 = 0x28;LED_17 = 0;delay(PWM);dis_off();}//00101000
- i = d & 0x08;
- if(i == 0x08){P1M1 = 0x47;LED_17 = 0;delay(PWM);dis_off();}//01000111
- i = d & 0x10;
- if(i == 0x10){P5M1 = 0x00;LED_17 = 0;delay(PWM);dis_off();}//00000000
- }
- /*********************************************************************************************/
- void displayHH27 (unsigned char d){ //第27列橫向顯示程序 11111000 (冒號)
- unsigned char i;
- i = d & 0x08;
- if(i == 0x08){P2M1 = 0xfe;LED_17 = 0;delay(PWM);dis_off();}//11111110
- i = d & 0x10;
- if(i == 0x10){P1M1 = 0x55;LED_17 = 0;delay(PWM);dis_off();}//01010101
- }
- /*********************************************************************************************/
- void diplay_data (unsigned char l,unsigned char d){
- switch (l){//顯示的列位置
- case 1://
- displayHH1(d); //將顯示數據送入
- break;//
- case 2://
- displayHH2(d); //將顯示數據送入
- break;//
- case 3://
- displayHH3(d); //將顯示數據送入
- break;//
- case 4://
- displayHH4(d); //將顯示數據送入
- break;//
- case 5://
- displayHH5(d); //將顯示數據送入
- break;//
- case 6://
- displayHH6(d); //將顯示數據送入
- break;//
- case 7://
- displayHH7(d); //將顯示數據送入
- break;//
- case 8://
- displayHH8(d); //將顯示數據送入
- break;//
- case 9://
- displayHH9(d); //將顯示數據送入
- break;//
- case 10://
- displayHH10(d); //將顯示數據送入
- break;//
- case 11://
- displayHH11(d); //將顯示數據送入
- break;//
- case 12://
- displayHH12(d); //將顯示數據送入
- break;//
- case 13://
- displayHH13(d); //將顯示數據送入
- break;//
- case 14://
- displayHH14(d); //將顯示數據送入
- break;//
- case 15://
- displayHH15(d); //將顯示數據送入
- break;//
- case 16://
- displayHH16(d); //將顯示數據送入
- break;//
- case 17://
- displayHH17(d); //將顯示數據送入
- break;//
- case 18://
- displayHH18(d); //將顯示數據送入
- break;//
- case 19://
- displayHH19(d); //將顯示數據送入
- break;//
- case 20://
- displayHH20(d); //將顯示數據送入
- break;//
- case 21://
- displayHH21(d); //將顯示數據送入
- break;//
- case 22://
- displayHH22(d); //將顯示數據送入
- break;//
- case 23://
- displayHH23(d); //將顯示數據送入
- break;//
- case 24://
- displayHH24(d); //將顯示數據送入
- break;//
- case 25://
- displayHH25(d); //將顯示數據送入
- break;//
- case 26://
- displayHH26(d); //將顯示數據送入
- break;//
- case 27://
- displayHH27(d); //將顯示數據送入
- break;//
- }
- }
- /*********************************************************************************************/
- void init (void){ //上電初始化
- P1M0 = P1M0SET;
- P2M0 = P2M0SET;
- P3M0 = P3M0SET;
- P5M0 = P5M0SET;
- dis_off();
- PWM = LI;
- TMOD = 0x01; // 定時/計數器0,1工作于方式1
- TH0 = 0x4c; // 預置產生50ms時基信號
- TL0 = 0x00;
- EA = 1; // 開總中斷
- ET0 = 1; // 定時/計數器0允許中斷
- TR0 = 1; // 開閉定時/計數器0
- }
- /*********************************************************************************************/
- void main (void){ //主程序
- unsigned char l;
- init();
- while (1){
- if (TIME_HH/10==0){
- for(l=1;l<4;l++)
- diplay_data (l,0);
- }else{
- for(l=1;l<4;l++)
- diplay_data (l,NUM[TIME_HH/10*3+l-1]);}//*3是字形寬度+列數變量-列數
- for(l=4;l<7;l++)
- diplay_data (l,NUM[TIME_HH%10*3+l-4]);
- if(PD){
- }else{
- diplay_data (27,0x18);}
- for(l=7;l<10;l++)
- diplay_data (l,NUM[TIME_MM/10*3+l-7]);
- for(l=10;l<13;l++)
- diplay_data (l,NUM[TIME_MM%10*3+l-10]);
- for(l=13;l<16;l++)
- diplay_data (l,NUM[TIME_SS/10*3+l-13]);
- for(l=16;l<19;l++)
- diplay_data (l,NUM[TIME_SS%10*3+l-16]);
- for(l=20;l<27;l++)
- diplay_data (l,Week[(6-1)*7+l-20]);
- }}
- /**********************************************************************************************/
- void tiem0(void) interrupt 1{ // T/C0中斷服務程序(產生50ms時基信號)
- cou++; // 軟計數器加1
- if(cou > 19){ // 計數值到50(0.5s)
- cou = 0; // 軟計數器清零
- PD =~ PD; //秒點閃爍
- hs++;
- if(hs > 1){ // 計數值到2(1s)
- hs = 0; // 半秒計數器清零
- TIME_SS++; // 秒計數器加1(進位10ms*100=1s)
- if(TIME_SS > 59){ // 秒計數值到60
-
- TIME_SS = 0; // 秒計數器清零
- TIME_MM++; // 分計數器加1(進位60s=1m)
- if(TIME_MM > 59){ // 分計數到60
- TIME_MM = 0; // 分計數器清零
- TIME_HH++; // 時計數器加1(進位60m=1h)
- if(TIME_HH > 23){ // 時計數到23
- TIME_HH = 0; // 時計數器清零
- }
- }
- }
- }
- }
- TH0 = 0x4c; // 重置定時常數
- // TL0 = 0xb0;
- }
復制代碼
|