📄 testclk_2.c
字号:
#include <intrins.h>
#include "STC89LE516AD.h"
#define uchar unsigned char
#define uint unsigned int
sbit ce = P4^0;
sbit cl = P2^6;
sbit di = P2^7;
sbit P3_3 = P3^3;
sbit P4_3 = P4^3;
bit flag = 0,flag1 = 1,flag2 =0;
uchar buffer[20];
uchar sw,vol;
uchar aa,count = 0,blinking = 0,mm;
uchar second,minute,hour,second_h,second_l,minute_h,minute_l,hour_h,hour_l;
uchar code table5[][3] = {{0xc0,0x40,0x1c},{0xc0,0,0},{0x40,0x44,0x15},{0xc0,0x44,0x05},//0,1,2,3
{0xc0,0x04,0x09},{0x80,0x44,0x0d},{0x80,0x44,0x1d},//4,5,6
{0xc0,0,0x04},{0xc0,0x44,0x1d},{0xc0,0x44,0x0d},};//7,8,9
uchar code table6[][3] = {{0x80,0x81,0x38},{0x80,0x01,0},{0x80,0x88,0x2a},{0x80,0x89,0x0a},//0,1,2,3
{0x80,0x09,0x12},{0,0x89,0x1a},{0,0x89,0x3a},//4,5,6
{0x80,0x01,0x08},{0x80,0x89,0x3a},{0x80,0x89,0x1a},};//7,8,9
uchar code table7[][2] = {{0x03,0x71},{0x03,0},{0x11,0x55},{0x13,0x15},//0,1,2,3
{0x13,0x24},{0x12,0x35},{0x12,0x75},//4,5,6
{0x03,0x10},{0x13,0x75},{0x13,0x35},};//7,8,9
uchar code table8[][2] = {{0x06,0xe2},{0x06,0},{0x22,0xaa},{0x26,0x2a},//0,1,2,3
{0x26,0x48},{0x24,0x6a},{0x24,0xea},//4,5,6
{0x06,0x20},{0x26,0xea},{0x26,0x6a},};//7,8,9
uchar code table9[][3] = {{0x0c,0xc4,0x01},{0x0c,0,0},{0x44,0x54,0x01},{0x4c,0x54,0},//0,1,2,3
{0x4c,0x90,0},{0x48,0xd4,0},{0x48,0xd4,0x01},//4,5,6
{0x0c,0x40,0},{0x4c,0xd4,0x01},{0x4c,0xd4,0},};//7,8,9
uchar code table10[][3] = {{0x18,0x88,0x03},{0x18,0,0},{0x88,0xa8,0x02},{0x98,0xa8,0},//0,1,2,3
{0x98,0x20,0x01},{0x90,0xa8,0x01},{0x90,0xa8,0x03},//4,5,6
{0x18,0x80,0},{0x98,0xa8,0x03},{0x98,0xa8,0x01},};//7,8,9
void clk_display();
void up_key();
void down_key();
void delay(uint z)
{
uint x,y;
for(x = 0;x < z;x ++)
{
for(y = 0;y < 110;y ++);
}
}
void clear()
{
buffer[0] = 0;buffer[1] = 0;buffer[2] = 0;buffer[3] = 0;buffer[4] = 0;
buffer[5] = 0;buffer[6] = 0;buffer[7] = 0;buffer[8] = 0;buffer[9] = 0;
buffer[10] = 0;buffer[11] = 0;buffer[12] = 0;buffer[13] = 0;buffer[14] = 0;
buffer[15] = 0;buffer[16] = 0;buffer[17] = 0;buffer[18] = 0;buffer[19] = 0x10;
}
void lcd_show()
{
uchar i,j,temp = 0x41;
ce = 0;
cl = 0;
for(i = 0;i < 8;i ++)
{
if(temp & 0x01)
di = 1;
else
di = 0;
cl = 1;
_nop_();
_nop_();
_nop_();
temp = temp >> 1;
cl = 0;
}
ce = 1;
for(i = 0;i < 20;i ++)
{
temp = buffer[i];
for(j = 0;j < 8;j ++)
{
if(temp & 0x01)
di = 1;
else
di = 0;
cl = 1;
_nop_();
_nop_();
_nop_();
temp = temp >> 1;
cl = 0;
}
}
}
void keyscan_knob()
{
uchar temp,temp1;
if(P3_3 == 0)
{
if(P4_3 == 0)
temp = 0;
else
temp = 1;
}
else
{
if(P4_3 == 0)
temp = 2;
else
temp = 3;
}
if(temp != sw)
{
delay(1);
if(P3_3 == 0)
{
if(P4_3 == 0)
temp1 = 0;
else
temp1 = 1;
}
else
{
if(P4_3 == 0)
temp1 = 2;
else
temp1 = 3;
}
if(temp == temp1)
{
if(temp == 0)
{
if(sw == 2)
{
up_key();
}
else if(sw == 1)
{
down_key();
}
}
else if(temp == 3)
{
if(sw == 1)
{
up_key();
}
else if(sw == 2)
{
down_key();
}
}
sw = temp;
}
}
}
void up_key()
{
if(flag)
{
switch(count)
{
case 1:
hour ++;
if(hour == 24)
hour = 0;
clk_display();
break;
case 2:
minute ++;
if(minute == 60)
minute = 0;
clk_display();
break;
case 3:
second ++;
if(second == 60)
second = 0;
clk_display();
break;
}
}
}
void down_key()
{
if(flag)
{
switch(count)
{
case 1:
if(hour > 0)
hour --;
else
hour = 23;
clk_display();
break;
case 2:
if(minute > 0)
minute --;
else
minute = 59;
clk_display();
break;
case 3:
if(second > 0 )
second --;
else
second = 59;
clk_display();
break;
}
}
}
void Get_AD_Result(uchar channel)
{
ADC_DATA = 0;
ADC_CONTR = channel;
delay(1);
ADC_CONTR |= 0X08;
while((ADC_CONTR & 0x10) == 0);
ADC_CONTR &= 0XF7;
}
void keyscan()
{
uchar t1;
uchar t2;
Get_AD_Result(2);
t1 = ADC_DATA >> 4;
delay(10);
Get_AD_Result(2);
if(ADC_DATA < 0xd0)
{
t2 = ADC_DATA >> 4;
if(t1 == t2)
{
switch(t1)
{
case 0:
break;
case 1:
case 2:
break;
case 3:
case 4:
break;
case 5:
case 6:
break;
case 7:
case 8:
flag = 1;
flag1 = 0;
flag2 = 1;
count = count + 1;
if(count == 4)
count = 1;
clk_display();
break;
case 9:
case 10:
flag = 0;
flag1 = 1;
flag2 = 0;
count = 0;
break;
case 11:
case 12:
break;
}
while(ADC_DATA < 0xd0)
{
delay(10);
Get_AD_Result(2);
}
}
}
}
void clk_display()
{
uchar temp;
clear();
temp=second/10;
buffer[8] |= table9[temp][0];
buffer[9] |= table9[temp][1];
buffer[10]|= table9[temp][2];
temp=second%10;
buffer[6] |= table10[temp][0];
buffer[7] |= table10[temp][1];
buffer[8] |= table10[temp][2];
buffer[12]|= 0x04;
temp=minute/10;
buffer[12]|= table7[temp][0];
buffer[13]|= table7[temp][1];
temp=minute%10;
buffer[10]|= table8[temp][0];
buffer[11]|= table8[temp][1];
buffer[14]|=0x02;
temp=hour/10;
buffer[15] |= table5[temp][0];
buffer[16] |= table5[temp][1];
buffer[17] |= table5[temp][2];
temp=hour%10;
buffer[13] |= table6[temp][0];
buffer[14] |= table6[temp][1];
buffer[15] |= table6[temp][2];
lcd_show();
}
void init()
{
P1 = P1 | 0X04;
P1_ADC_EN = 0X04;
clear();
lcd_show();
TMOD = 0x11;
TH0 = (65536 - 50000 * 11.0592 / 12) / 256;
TL0 = (65536 - 46080) % 256;//50000*11.0592/12=46080
// TH1=(65536-46080)/256;
// TL1=(65536-46080)%256;
EA = 1;
ET0 = 1;
TR0 = 1;
if(P3_3 == 0)
{
if(P4_3 == 0)
sw = 0;
else
sw = 1;
}
else
{
if(P4_3 == 0)
sw = 2;
else
sw = 3;
}
}
void main()
{
init();
while(1)
{
keyscan();
keyscan_knob();
}
}
void timer0() interrupt 1
{
uchar temp;
TH0 = (65536 - 50000 * 11.0592 / 12) / 256;
TL0 = (65536 - 46080) % 256;
if(flag1)
{
aa ++;
if(aa == 20)
{
aa = 0;
second ++;
if(second == 60)
{
second = 0;
second_h = 0;
second_l = 0;
minute ++;
if(minute == 60)
{
minute = 0;
minute_h = 0;
minute_l = 0;
hour ++;
if(hour == 24)
hour = 0;
}
}
clk_display();
}
}
if(flag2)
{
mm ++;
if(mm == 8)
{
mm = 0;
blinking = !blinking;
if(blinking == 1)
{
if(count == 1)
{
buffer[8] &= 0x03 ;
buffer[9] &= 0;
buffer[10] &= 0xfe;
buffer[6] &= 0x07;
buffer[7] &= 0;
buffer[8] &= 0xfc;
}
if(count == 2)
{
buffer[12] &= 0x04;
buffer[13] &= 0x80;
buffer[10] &= 0x01;
buffer[11] &= 0;
}
if(count == 3)
{
buffer[15] &= 0x3f;
buffer[16] &= 0x01;
buffer[17] &= 0xe0;
buffer[13] &= 0x7f;
buffer[14] &= 0x02;
buffer[15] &= 0xc0;
}
}
else
{
if(count == 1)
{
temp = second / 10;
buffer[8] |= table9[temp][0];
buffer[9] |= table9[temp][1];
buffer[10]|= table9[temp][2];
temp = second % 10;
buffer[6] |= table10[temp][0];
buffer[7] |= table10[temp][1];
buffer[8] |= table10[temp][2];
}
if(count == 2)
{
temp = minute / 10;
buffer[12]|= table7[temp][0];
buffer[13]|= table7[temp][1];
temp = minute % 10;
buffer[10]|= table8[temp][0];
buffer[11]|= table8[temp][1];
}
if(count == 3)
{
temp = hour / 10;
buffer[15] |= table5[temp][0];
buffer[16] |= table5[temp][1];
buffer[17] |= table5[temp][2];
temp = hour % 10;
buffer[13] |= table6[temp][0];
buffer[14] |= table6[temp][1];
buffer[15] |= table6[temp][2];
}
}
lcd_show();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -