?? vfd_51.c
字號:
/*
function : P1.0 output frequency time 100ms ~ 1000ms
author :
start date :
*/
//#define DEBUG
//#pragma ot(6,speed)
#pragma small
#include <reg51.h>
#include <intrins.h>
#ifdef DEBUG
#include <stdio.h>
#endif
#define MODEKEY 0x00
#define VFD_A 0x00
#define VFD_B 0x01
#define COMMAND1 0x00
#define DIG4 0x00
#define DIG5 0x01
#define DIG6 0x02
#define DIG7 0x03
#define DIG8 0x04
#define DIG9 0x05
#define DIG10 0x06
#define DIG11 0x07
#define DIG12 0x08
#define COMMAND2 0x40
#define TESTMODE 0x08
#define FIX_ADDR 0x04
#define INC_ADDR 0x00
#define W_DISP 0x00
#define W_LED 0x01
#define R_KEY 0x02
#define COMMAND3 0xc0
#define COMMAND4 0x80
#define DISPLAY_ON 0x08
#define NO_PAD 0x00
#define DUTY14_16 0x01
#define DUTY13_16 0x02
#define DUTY12_16 0x04
#define DUTY11_16 0x08
#define DUTY10_16 0x10
sbit vfd_a_dout = P2 ^ 0;
sbit vfd_a_stb = P2 ^ 1;
sbit vfd_a_din = P2 ^ 2;
sbit vfd_a_clk = P2 ^ 3;
sbit test_p = P2 ^ 4; //test
sbit vfd_b_stb = P2 ^ 5;
sbit vfd_b_din = P2 ^ 6;
sbit vfd_b_clk = P2 ^ 7;
static unsigned char bdata flag0;
sbit f_key_push = flag0 ^ 0; //
sbit f_new_key = flag0 ^ 1; //=1/0 執(zhí)行鍵功能/不執(zhí)行鍵功能
sbit f_old_key = flag0 ^ 2; //=0/1
sbit f_run_mode = flag0 ^ 5;
sbit f_timer0_int= flag0 ^ 6;
sbit f_timer1_int= flag0 ^ 7;
static unsigned char bdata flag1;
sbit f_dispshow = flag1 ^ 0;
sbit f_dispupdata = flag1 ^ 1;
sbit f_mode3p1 = flag1 ^ 2;
sbit f_t500ms = flag1 ^ 3;
sbit f_t1s = flag1 ^ 4;
sbit f_dispminute = flag1 ^ 5;
sbit f_disphour = flag1 ^ 6;
sbit f_padupdata = flag1 ^ 7;
unsigned char data hourbuf,minutedbuf,secbuf;
//unsigned char data dispbuf[48];
unsigned char data key_code;
unsigned char data temp_key_code;
unsigned char data step_kind;
unsigned char data mode;
unsigned char data mode3coun;
unsigned char data t500ms_cont;
unsigned char data duty_buf;
//unsigned char data bcd[3];
/*
unsigned char code digit[] =
{0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10};
*/
void Timer0(void);
void Timer_int_Ini(void);
void delay_short(unsigned char delays_cnt);
void delay_long(unsigned int delayl_cnt);
void serial_out(unsigned char vfd_select, unsigned char s_data);
void display_init(void);
void display(void);
//void hex2bcd(unsigned char hexdata);
void key_scan(void);
void read_switch(void);
void key_process(void);
void main(void)
{
Timer_int_Ini();
EA = 1;
// P2 = 0;
vfd_a_stb = 1;
vfd_a_clk = 0;
vfd_a_din = 0;
vfd_a_dout = 0;
vfd_b_stb = 1;
vfd_b_clk = 0;
vfd_b_din = 0;
// vfd_b_dout = 0;
delay_long(50000);
delay_long(50000);
mode = 0;
duty_buf = 0x07;
f_dispupdata = 1;
f_dispshow = 1;
display_init();
// while (1)
// {}
while (1)
{
if (f_timer1_int == 1)
{
f_timer1_int = 0;
if (t500ms_cont < 16)
{
t500ms_cont++;
}
else
{
t500ms_cont = 0;
f_t500ms = 1;
}
read_switch();
key_scan();
key_process();
}
if(f_t500ms == 1)
{
f_t500ms = 0;
switch (mode)
{
case 0:
case 1:
break;
case 3:
if (mode3coun <20)
{
mode3coun++;
}
else
{
mode3coun = 0;
f_mode3p1 = ~f_mode3p1;
f_dispupdata = 1;
}
break;
case 2:
f_dispupdata = 1;
break;
default:
break;
}
if (f_t1s == 1)
{
f_t1s = 0;
f_dispshow = 0;
test_p =0;
}
else
{
f_t1s = 1;
f_dispshow = 1;
test_p = 1;
if (secbuf < 59)
{
secbuf++;
}
else
{
secbuf = 0;
f_dispminute = 1;
if (minutedbuf < 59)
{
minutedbuf++;
}
else
{
minutedbuf = 0;
f_disphour = 1;
if(hourbuf < 23)
{
hourbuf++;
}
else
{
hourbuf = 0;
}
}
}
}
display();
}
}
}
//
void Timer0(void) interrupt 1 using 0
{
TH0 = 0x00;//0xdc;
TL0 = 0x00;//0x5c;
f_timer0_int = 1;
}
//13.565M, 31.25ms
void Timer1(void) interrupt 3 using 0
{
TH1 = 0x76;//0xdc;
TL1 = 0x02;//0x5c;
f_timer1_int = 1;
}
void Timer_int_Ini(void)
{
TH0 = 0x00;//0xdc; //11.0592Mhz
TL0 = 0x00;//0x5c;
TH1 = 0X76;
TL1 = 0X02;
TMOD = 0x10;
// ET0 = 1;
ET1 = 1;
// TR0 = 1;
TR1 = 1;
}
void key_scan(void)
{
unsigned char temp;
temp = (P0 & 0x01);//有鍵按下時 !=0x0f
if (temp != 0x01)//是否有鍵按下
{
if ((temp == temp_key_code) && (f_old_key == 0))
{
key_code = temp;
f_new_key = 1;
}
else
{
temp_key_code = temp;
}
}
else
{
temp_key_code = 0;
f_new_key = 0;
f_old_key = 0;
}
}
void key_process(void)
{
if (f_new_key)
{
switch (key_code)
{
case MODEKEY:
if(mode < 3)
{
mode++;
}
else
{
mode = 0;
}
f_dispshow= 1;
f_dispupdata = 1;
f_new_key = 0;
f_old_key = 1;
break;
default:
break;
}
}
}
void read_switch(void)
{
step_kind = 0x1f - (P1 & 0x1f);
switch (step_kind)
{
case NO_PAD:
break;
case DUTY14_16:
if(duty_buf != 0x07)
{
duty_buf = 0x07;
f_padupdata =1;
f_dispupdata = 1;
}
break;
case DUTY13_16:
if(duty_buf != 0x06)
{
duty_buf = 0x06;
f_padupdata =1;
f_dispupdata = 1;
}
break;
case DUTY12_16:
if(duty_buf != 0x05)
{
duty_buf = 0x05;
f_padupdata =1;
f_dispupdata = 1;
}
break;
case DUTY11_16:
if(duty_buf != 0x04)
{
duty_buf = 0x04;
f_padupdata =1;
f_dispupdata = 1;
}
break;
case DUTY10_16:
if(duty_buf != 0x03)
{
duty_buf = 0x03;
f_padupdata =1;
f_dispupdata = 1;
}
break;
default:
break;
}
if(f_padupdata)
{
f_padupdata = 0;
vfd_a_stb = 0;
serial_out(VFD_A, COMMAND1 | DIG5); //command 1, 8dig, 24seg
vfd_a_stb = 1;
delay_short(2);
vfd_a_stb = 0;
serial_out(VFD_A, COMMAND4 | DISPLAY_ON | duty_buf); //command 4, duty
vfd_a_stb = 1;
//
vfd_b_stb = 0;
serial_out(VFD_B, COMMAND1 | DIG5); //command 1, 8dig, 24seg
vfd_b_stb = 1;
delay_short(2);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -