4位数码管计时器程序

  • 格式:doc
  • 大小:73.00 KB
  • 文档页数:7

/*********************************************************************************************/

#include //STC头文件

/**********************************************************************************************/

//“程序开发调试设置项”

#define DY_LI 9 //设置LED显示的亮度(值域:~9)

#define DY_DELAY 12 //设置每一个点显示的时间长度(~20)

/**********************************************************************************************/

sbit DY_LED1_H1 =P3 ^ 0; //设置LED点阵屏连接的I/O口

sbit DY_LED1_H2 =P3 ^ 1; //设置LED点阵屏连接的I/O口

sbit DY_LED1_H3 =P3 ^ 2; //设置LED点阵屏连接的I/O口

sbit DY_LED1_H4 =P3 ^ 3; //设置LED点阵屏连接的I/O口

sbit DY_LED1_L1 =P1 ^ 0; //设置LED点阵屏连接的I/O口

sbit DY_LED1_L2 =P1 ^ 1; //设置LED点阵屏连接的I/O口

sbit DY_LED1_L3 =P1 ^ 2; //设置LED点阵屏连接的I/O口

sbit DY_LED1_L4 =P1 ^ 3; //设置LED点阵屏连接的I/O口

sbit DY_LED1_L5 =P1 ^ 4; //设置LED点阵屏连接的I/O口

sbit DY_LED1_L6 =P1 ^ 5; //设置LED点阵屏连接的I/O口

sbit DY_LED1_L7 =P1 ^ 6; //设置LED点阵屏连接的I/O口

sbit DY_LED1_L8 =P1 ^ 7; //设置LED点阵屏连接的I/O口

//sbit DY_BEEP =P2 ^ 2; //扬声器

//sbit DY_KEY1 =P0 ^ 2; //按键(M键)(连接在P1.3和P0.2,读P0.2为低时表示有按键动作)

//sbit DY_KEY2 =P3 ^ 0; //按键(+键)(连接在P4.6和P3.0,读P3.0为低时表示有按键动作)

//sbit DY_KEY3 =P3 ^ 6; //按键(-键)(连接在P2.4和P3.6,读P3.6为低时表示有按键动作)

#define DY_P1M0SET 0x00 //设置I/O口工作方式//00000000(左到右,高到低位)

#define DY_P1M1SET 0x00 //设置I/O口工作方式//00101000

#define DY_P3M0SET 0x00 //设置I/O口工作方式//00000000

#define DY_P3M1SET 0xff //设置I/O口工作方式//10010100

data unsigned char TIME_DD,TIME_MO,TIME_YY,TIME_WW,TIME_HH,TIME_MM,TIME_SS,ty;//设置日、月、年、周、时、分、秒和温度存放区

data unsigned char cou = 0; // 软计数器,对ms时基信号累加到s

data unsigned char bn;//扫描映射全局变量

data unsigned char KEY_BIT = 0;//按键值

data unsigned char DY_PWM;//显示亮度

data unsigned char DY_PWM2;//显示暂存

unsigned char code disdata[]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f //无小数点数码管段码表(0~9)

};

/*********************************************************************************************/

void delay (unsigned int a){ // 用于点扫描的延时

unsigned int i;

while( --a != 0){

for(i = 0; i < DY_DELAY; i++);

}

}

/*********************************************************************************************/

void delay1ms (unsigned int a){ // 1ms延时程序(MHz 10倍于单片机速度时)

unsigned int i;

while( --a != 0){

for(i = 0; i < 600; i++);

}

}

/*********************************************************************************************/

void dis_off (void){

P1 = ~DY_P1M1SET; //关所有显示

P3 = ~DY_P3M1SET;

delay(10-DY_PWM);

}

/*********************************************************************************************/

void displayHH1 (unsigned char d){ //第列横向显示程序

unsigned char i;

i = d & 0x01;

if(i == 0x01){

DY_LED1_H1 = 1;DY_LED1_L1 = 0;}delay(DY_PWM);dis_off();

i = d & 0x02;

if(i == 0x02){

DY_LED1_H1 = 1;DY_LED1_L2 = 0;}delay(DY_PWM);dis_off();

i = d & 0x04;

if(i == 0x04){

DY_LED1_H1 = 1;DY_LED1_L3 = 0;}delay(DY_PWM);dis_off();

i = d & 0x08;

if(i == 0x08){

DY_LED1_H1 = 1;DY_LED1_L4 = 0;}delay(DY_PWM);dis_off();

i = d & 0x10; if(i == 0x10){

DY_LED1_H1 = 1;DY_LED1_L5 = 0;}delay(DY_PWM);dis_off();

i = d & 0x20;

if(i == 0x20){

DY_LED1_H1 = 1;DY_LED1_L6 = 0;}delay(DY_PWM);dis_off();

i = d & 0x40;

if(i == 0x40){

DY_LED1_H1 = 1;DY_LED1_L7 = 0;}delay(DY_PWM);dis_off();

i = d & 0x80;

if(i == 0x80){

DY_LED1_H1 = 1;DY_LED1_L8 = 0;}delay(DY_PWM);dis_off();

}

/*********************************************************************************************/

void displayHH2 (unsigned char d){ //第列横向显示程序

unsigned char i;

i = d & 0x01;

if(i == 0x01){

DY_LED1_H2 = 1;DY_LED1_L1 = 0;}delay(DY_PWM);dis_off();

i = d & 0x02;

if(i == 0x02){

DY_LED1_H2 = 1;DY_LED1_L2 = 0;}delay(DY_PWM);dis_off();

i = d & 0x04;

if(i == 0x04){

DY_LED1_H2 = 1;DY_LED1_L3 = 0;}delay(DY_PWM);dis_off();

i = d & 0x08;

if(i == 0x08){

DY_LED1_H2 = 1;DY_LED1_L4 = 0;}delay(DY_PWM);dis_off();

i = d & 0x10;

if(i == 0x10){

DY_LED1_H2 = 1;DY_LED1_L5 = 0;}delay(DY_PWM);dis_off();

i = d & 0x20;

if(i == 0x20){

DY_LED1_H2 = 1;DY_LED1_L6 = 0;}delay(DY_PWM);dis_off();

i = d & 0x40;

if(i == 0x40){

DY_LED1_H2 = 1;DY_LED1_L7 = 0;}delay(DY_PWM);dis_off();

i = d & 0x80;

if(i == 0x80){

DY_LED1_H2 = 1;DY_LED1_L8 = 0;}delay(DY_PWM);dis_off();

}

/*********************************************************************************************/