- /*********************************************************************************************
- 出品: 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;
- }
复制代码
|