LEDBuffer[0]=Cnt; LEDBuffer[1]=Cnt/10; IT0=1; EX0=1; EA=1; while(1) { P2=SEGTAB[LEDBuffer[LEDPointer]]; P0=DIGTAB[LEDPointer]; if (++LEDPointer==sizeof(LEDBuffer))LEDPointer=0; Delay(); if (++msCnt==200) { msCnt=0; if(--Cnt==(-1))Cnt=99; LEDBuffer[0]=Cnt; LEDBuffer[1]=Cnt/10; } } } 实验六
1、实验内容1
如图6-1,利用AT89C51单片机的P3.0(RXD)和P3.1(TXD)外接一个74HC164(串/并转换芯片)驱动1个8位共阴LED数码管,实现0~9的轮流显示,
#include
unsigned char SEGTAB[] = {
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
};
void Delay(void) {
unsigned char i,j,k; for(i=10;i>0;i--) for(j=100;j>0;j--) for(k=100;k>0;k--); }
void main (void) {
unsigned char i; SCON=0x00; while(1) { for(i=0;i 2、实验内容2 如图6-2,在U1(AT89C51)和U2(AT89C51)的P1端口分别接一个8位共阴LED数码管,P3.2引脚上分别接有一个轻触开关。U1的P3.0(RXD)连接到U2的P3.1(TXD),U1的P3.1(TXD)连接到U2的P3.0(RXD),通过串行口进行双机通信,实现在U1上按下按键实现计数加1,通过U2的LED数码管显示,同样U2上按下按键实现计数加1,通过U1的LED数码管显示,双机通信的波特率为9600。 #include unsigned char SEGTAB[] = { 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, }; void main(void) { unsigned char KeyCnt = 0; PCON |= 0x80; SCON = 0x50; TH1 = 0xFD; TL1 = 0xFD; TR1 = 1; ES = 1; EA = 1; while(1) { if(0 == P3_2) { if(++KeyCnt == 10)KeyCnt = 0; SBUF = KeyCnt; while(0 == TI); TI = 0; while(0 == P3_2); } } } void Serial_ISR(void) interrupt 4 { unsigned char temp; if(1 == RI) { RI = 0; temp = SBUF; P1 = SEGTAB[temp]; } }