|
#include "public.h"
#include "digital.h"
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
#define KEY2 P32
#define KEY3 P33
int temp_value=0;
u8 temp_buf[8];
void Smg_dispaly(void);
void main()
{
bit run_flay=0;
sys_init();
usb_init();
EA = 1;
while(1)
{
if(DeviceState!=DEVSTATE_CONFIGURED)
continue;
if(bUsbOutReady)
{
usb_OUT_done();
}
Smg_dispaly();
if(run_flay==1)
{
delay_ms(1);
temp_value++;
}
if(KEY2==0)
{
delay_ms(10);
if(KEY2==0)
{
while(KEY2==0)
{
Smg_dispaly();
}
delay_ms(10);
if(run_flay==0)temp_value=0;
run_flay=!run_flay;
// if(run_flay==1)temp_value=0;
}
}
}
}
void Smg_dispaly(void)
{
temp_buf[0]=gsmg_code[1];
temp_buf[1]=gsmg_code[0]&0x7f;
temp_buf[2]=gsmg_code[0];
temp_buf[3]=gsmg_code[0];
temp_buf[4]=gsmg_code[temp_value/1000];//百位
temp_buf[5]=gsmg_code[temp_value%1000/100]&0x7f;//十位
temp_buf[6]=gsmg_code[temp_value%1000%100/10];//个位+小数点
temp_buf[7]=gsmg_code[temp_value%1000%100%10];//小数点后一位
digital_tube(temp_buf,1);
}
#include "digital.h"
#include "public.h"
u8 gsmg_code[10]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,
};
u8 Pos_display[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
u8 num=0;
/*******************************************************************************
* 函 数 名 : digital_tube
* 函数功能 : 动态数码管显示
* 输 入 : dat:要显示的数据
pos:从左开始第几个位置开始显示,范围1-8
* 输 出 : 无
*******************************************************************************/
#ifndef _DIGITAL_H_
#define _DIGITAL_H_
#include "public.h"
#define SMG_A_DP_PORT P6
#define KEY2 P32
extern u8 gsmg_code[10];
extern u8 Pos_display[8];
void digital_tube(u8 dat[],u8 pos);
#endif
void digital_tube(u8 dat[],u8 pos)
{
u8 i=0;
u8 pos_temp=pos-1;
for(i=pos_temp;i<8;i++)
{
P7=Pos_display[i];
SMG_A_DP_PORT=dat[i-pos_temp];//传送段选数据
printf("dat[%u]=%x\n",i-pos_temp,dat[i-pos_temp]);
delay_ms(1);;//延时一段时间,等待显示稳定
SMG_A_DP_PORT=0xff;//消音
}
}
printf函数注释掉后试验箱数码管不显示
|
|