📄 main.c
字号:
//******************************************************************
// 使用2块74HC595构成2位数码管显示器 2008年8月2日
// 显示板输入信号说明:J1
// 1:VCC 2:SDAT 3:SCLK 4:LOAD 5:GND
// 使用A口: IOA8 IOA9 IOA10
//
// 数据对应:D7 D6 D5 D4 D3 D2 D1 D0 hex 数字
// dp b a c f g d e
// 0 1 1 1 1 0 1 1 0x7b 0
// 0 1 0 1 0 0 0 0 0x50 1
// 0 1 1 0 0 1 1 1 0x67 2
// 0 1 1 1 0 1 1 0 0x76 3
// 0 1 0 1 1 1 0 0 0x5c 4
// 0 0 1 1 1 1 1 0 0x3e 5
// 0 0 1 1 1 1 1 1 0x3f 6
// 0 1 1 1 0 0 0 0 0x70 7
// 0 1 1 1 1 1 1 1 0x7f 8
// 0 1 1 1 1 1 1 0 0x7e 9
// 0 1 1 1 1 1 0 1 0x7d A
// 0 0 0 1 1 1 1 1 0x1f B
// 0 0 1 0 1 0 1 1 0x2b C
// 0 1 0 1 0 1 1 1 0x57 D
// 0 0 1 0 1 1 1 1 0x2f E
// 0 0 1 0 1 1 0 1 0x2d F
//
//******************************************************************
#define P_IOA_Data (volatile unsigned int *)0x7000
#define P_IOA_Buffer (volatile unsigned int *)0x7001
#define P_IOA_Dir (volatile unsigned int *)0x7002
#define P_IOA_Attrib (volatile unsigned int *)0x7003
#define P_IOA_Latch (volatile unsigned int *)0x7004
//............................................
#define P_IOB_Data (volatile unsigned int *)0x7005
#define P_IOB_Buffer (volatile unsigned int *)0x7006
#define P_IOB_Dir (volatile unsigned int *)0x7007
#define P_IOB_Attrib (volatile unsigned int *)0x7008
#define P_Watchdog_Clear (volatile unsigned int *)0x7012
#define P_SystemClock (volatile unsigned int *)0x7013
int u=0x0000;
int count=25;
int funt=0;
int funt_time[]={30,5,20};
int led_7seg[]={0x7b,0x50,0x67,0x76,0x5c,0x3e,0x3f,0x70,0x7f,0x7e,0x7d,0x1f,0x2b,0x57,0x2f,0x2d,0x00};
int hour=0,min=56,sec=50;
int main()
{
*P_IOA_Dir=0xffff;
*P_IOA_Attrib=0xffff;
*P_IOA_Data =0x0000;
*P_IOB_Dir=0xffff;
*P_IOB_Attrib=0xffff;
*P_IOB_Data=0x0;
/*
sdat_low();
sdat_high();
sdat_low();
sclk_low();
sclk_high();
sclk_low();
load_low();
load_high();
load_low();
*/
while(1)
{
clock();
clock_disp();
delay(100);
}
while(1)
{
test_seg();
test_led();
}
while(1)
{
disp_data(count);
count=count+1;
delay(100);
if (count>9999)
{
count=0;
}
}
}
int delay(int dly)
{
int i,j;
for(i=0;i<dly;i++)
{
for(j=0;j<10;j++)
{
*P_Watchdog_Clear=1;
}
}
}
int sdat_low()
{
*P_IOA_Data=*P_IOA_Data & 0xfeff;
}
int sdat_high()
{
*P_IOA_Data=*P_IOA_Data | 0x0100;
}
int sclk_low()
{
*P_IOA_Data=*P_IOA_Data & 0xfdff;
}
int sclk_high()
{
*P_IOA_Data=*P_IOA_Data | 0x0200;
}
int load_low()
{
*P_IOA_Data=*P_IOA_Data & 0xfbff;
}
int load_high()
{
*P_IOA_Data=*P_IOA_Data | 0x0400;
}
int sclk_puls()
{
sclk_low();
sclk_high();
sclk_low();
}
int load_puls()
{
load_low();
load_high();
load_low();
}
int send_byte(int data)
{
int i,x,y;
x=data;
for (i=0;i<8;i++)
{
y=x/128;
if(y==0)
{
sdat_low();
}
else
{
sdat_high();
}
sclk_puls();
x=x %128;
x=x<<1;
}
}
int disp_data(int data)
{
int i,x1,x2,x3,x4,y;
y=data %10000;
x4=y/1000;
y=y%1000;
x3=y/100;
y=y%100;
x2=y/10;
x1=y%10;
send_byte(led_7seg[x1]);
send_byte(led_7seg[x2]);
send_byte(led_7seg[x3]);
send_byte(led_7seg[x4]);
load_puls();
}
int test_seg()
{
int i,x,y;
x=1;
for(i=0;i<8;i++)
{
send_byte(x);
send_byte(x);
load_puls();
delay(3000);
x=x<<1;
}
}
int test_led()
{
int i,x,y;
for(i=0;i<17;i++)
{
send_byte(led_7seg[i]);
send_byte(led_7seg[i]);
load_puls();
delay(3000);
}
}
int clock()
{
//sec++;
//if(sec>59)
//{
// sec=0;
// min++;
// if(min>59)
// {
// min=0;
hour++;
delay(1000);
if(hour>99)
{
hour=0;
}
// }
// }
}
int clock_disp()
{
send_byte(led_7seg[sec%10]);
send_byte(led_7seg[sec/10]);
send_byte(led_7seg[min%10]+0x80);
send_byte(led_7seg[min/10]);
send_byte(led_7seg[hour%10]+0x80);
send_byte(led_7seg[hour/10]);
load_puls();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -