实验一
如图1-1所示,利用AT89C51单片机的P1口外接8个发光二极管,实现流水灯效果。
图1-1 实验一仿真电路图
#include
0xFE,0xFD,0xFB,0xF7,,0xEF,0xDF,0xBF,0x7F };
void Delay(void) {
unsigned char i,j,k; for(i=10;i>0;i--) for(j=100;j>0;j--) for(k=200;k>0;k--); }
void main(void) {
unsigned char i; while(1) {
for(i=0;i P1=LEDTAB[i]; Delay(); } } } 实验二 1、 如图2-1所示,利用AT89C51单片机的P2端口外接一位共阴LED数码管,实现在 LED数码管上轮流显示0~9。 图2-1 数码管显示实验内容1仿真电路图 #include Delay();} } } 2、 如图2-2所示,利用AT89C51单片机的P2和P0端口分别驱动2位共阴LED数码管 的笔段和位选段(动态显示接法),利用动态显示原理实现LED数码管上显示00~99的自动计数加1数值。 图2-2数码管显示实验内容2仿真电路图 #include while(1) { P2=SEGTAB[LEDBuffer[LEDPointer]]; P0=DIGTAB[LEDPointer]; if (++LEDPointer==sizeof(LEDBuffer))LEDPointer=0; Delay(); if (++msCnt==200) { msCnt=0; if(++Cnt==100)Cnt=0; LEDBuffer[0]=Cnt; LEDBuffer[1]=Cnt/10; } } } 实验三 如图3-1所示,利用AT89C51单片机的P3口外接一个4X4矩阵键盘,矩阵键盘的4根行线分别连接在P3.0~P3.3引脚上,4根列线分别连接在P3.4~P3.7引脚上。AT89C51单片机的P2驱动一个8位共阴LED数码管,实现在矩阵键盘的16个按键识别,并将对应的按键编号显示在LED数码管上。 图3-1 矩阵键盘实验内容1仿真原理图 #include unsigned char SEGTAB[] = { 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71, }; unsigned char KEYTAB[] = { 0xEE,0xED,0xEB,0xE7, 0xDE,0xDD,0xDB,0xD7, 0xBE,0xBD,0xBB,0xB7, 0x7E,0x7D,0x7B,0x77, }; void Delay10mS(void) { unsigned char i,j; for(i=10;i>0;i--) for(j=100;j>0;j--); } void main(void) { unsigned char KeyValue; unsigned char i,temp; while (1) { P3=0xF0; if(0xF0!=(P3&0xF0)) { Delay10mS(); if(0xF0!=(P3&0xF0)) { temp=P3&0xF0; P3=0x0F; temp|=(P3&0x0F); for (i=0;i 实验四 1、 如图4-1所示,利用AT89C51单片机的P3.2引脚外接一个轻触按钮“BUTTON”,用 中断方式实现按键计数加1,并通过由P2和P0端口驱动的两个共阴LED数码管显示00~99的计数值。其中P2端口驱动显示数字的十位数,P0端口驱动显示数字的个位数。