?? max232.c
字號:
#include <reg51.h>
//#include <string.h>
#define uchar unsigned char
#define uint unsigned int
//#define LENGTH 4;
//uchar con=0;
uchar sbu[4]={0};
uchar LED[4];
char f=4;
uchar counter=0,counter2=0;
char hour=0,min=0;
bit flag=0;
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*--------初始化程序-------*/
void init(void)
{
SCON=0x50;
PCON=0x00;
TMOD=0x21;
TL1=0xFD;
TH1=0xFD;
TR1=1;
EA=1;
ES=1;
TH0=0X3c;
TL0=0xb0;
TR0=1;
ET0=1;
}
/*------向串口發送一個字符-----*/
/*void send_char(uchar i)
{
SBUF=i;
while(TI==0);
TI=0;
}*/
/*-----向串口發送一個字符串-----*/
/*void send_string(uchar *str,uint length)
{
uint k=0;
do
{
send_char(*(str+k));
k++;
}while(k==length);
}*/
/*--------延時8us子程序----------*/
void delay8us(uint t)
{
while(--t);
}
/*--------數據更新程序---------*/
void updata()
{
LED[0]=table[sbu[0]];
LED[1]=table[sbu[1]];
LED[2]=table[sbu[2]];
LED[3]=table[sbu[3]];
}
/*---------發送函數----------*/
void send(void)
{
char l;
for(l=3;l>=0;l--)
{
SBUF=sbu[l]+0x30;
while(TI==0);
TI=0;
}
}
/*-----------顯示函數----------*/
void D_display(void)
{
uchar h,i;
P2=0xff;
i=0x01;
for(h=0;h<4;h++)
{
P1=LED[h];
P2=P2^i;
i=i<<1;
delay8us(125);
P2=0xff;
}
}
/*----------主函數-----------*/
void main(void)
{
init();
updata(); //初始化顯示0000
while(1)
{
D_display();
if(flag==1)
{
updata();
flag=0;
}
}
}
/*----串口接收中斷程序--------*/
void receive(void) interrupt 4
{
if(RI)
{
f--;
sbu[f]=SBUF-0x30;
if(f==0)
{
f=4;
min=sbu[0]+sbu[1]*10;
hour=sbu[2]+sbu[3]*10;
flag=1;
}
}
RI=0;
}
/*--------定時器T0中斷程序-------*/
void intt0(void) interrupt 1
{
TH0=0X3c;
TL0=0xb0;
counter2++;
counter++;
if(counter2==10)
{
counter2=0;
LED[2]=LED[2]^0x80; //小數點閃爍
}
if(counter==20)
{
min++;
counter=0;
if(min>=60)
{
hour++;
min=0;
if(hour>=24)
{
hour=0;
}
}
sbu[0]=min%10;
sbu[1]=min/10;
sbu[2]=hour%10;
sbu[3]=hour/10;
updata();
send();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -