图4-1
#include
unsigned char SEGTAB[] = {
0x3F,0x06,0x5B,0x4F, 0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7C, 0x39,0x5E,0x79,0x71, };
unsigned char KeyCnt=0; void main(void) {
P2=SEGTAB[KeyCnt/10]; P0=SEGTAB[KeyCnt];
IT0=1; EX0=1; EA=1;
while(1) { ; } }
void INT0_ISR(void) interrupt 0 {
if(0==P3_2) {
实验内容1仿真电路图
if(++KeyCnt==100)KeyCnt=0; P2=SEGTAB[KeyCnt/10]; P0=SEGTAB[KeyCnt]; } }
2、 如图4-2所示,利用AT89C51单片机的P1端口外接8个LED发光二极管,实现流
水灯,流水灯的速度为0.2~1秒之间可调,步进为0.2s,由外接在P3.2和P3.3引脚上的两个轻触开关实现调慢和调快功能(用中断方式实现按键功能),速度的档位通过P2端口外接的一个8位共阴LED数码管显示。
#include
unsigned char LEDTAB[] = {
0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F, };
unsigned char SEGTAB[] = {
0x3F,0x06,0x5B,0x4F,0x66,0X6D,0x7D,0x07,0x7F,0x6F, };
void Delay10mS(unsigned char t) {
unsigned char i,j; do {
for(i=100;i>0;i--) for(j=100;j>0;j--); }
while(--t); }
unsigned char Speed = 20; void main(void) {
unsigned char i;
P2=SEGTAB[Speed/20]; IT0=1; EX0=1; IT1=1; EX1=1; EA=1;
while(1) {
for(i=0;i void INT0_ISR(void) interrupt 0 { if(0==P3_2) { Speed+=20; if(Speed>100)Speed=100; P2=SEGTAB[Speed/20]; } } void INT1_ISR(void) interrupt 2 { if(0==P3_3) { Speed-=20; if(Speed<20)Speed=20; P2=SEGTAB[Speed/20]; } } 实验五 1、 如图5-1所示,利用AT89C51单片机的定时器T0产生1KHz的方波信号由P3.7引脚 输出,通过连接到“OSCILLOSCOPE”虚拟示波器上查看显示的波形图。 #include TMOD |= 0x01; TH0=(65536-500)/256; TL0=(65536-500)%6; TR0=1; while(1) { if(1==TF0) { TF0=0; TH0=(65536-500)/256; TL0=(65536-500)%6; P3_7=~P3_7; } } } 2、 如图5-2所示,利用AT89C51单片机的定时器T0产生1ms的动态数码管显示扫描 时间,驱动接在P2和P0端口上的4位共阴LED数码管,其中P2用于驱动共阴LED数码管的笔段A~H,P0用于驱动共阴LED数码管的位选端;采用定时器T0的溢出中断实现1ms定时。数码上显示自己的班号和学号的后2位数字,显示方式为“X-YY”,X为班号,YY为学号。并且显示的“-”闪烁频率为0.5秒。 #include unsigned char SEGTAB[] = { 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, }; unsigned char DIGTAB[] = { 0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F, }; unsigned char LEDBuffer[2]; unsigned char LEDPointer; void Delay(void) { unsigned char i,j; for(i=10;i>0;i--) for(j=100;j>0;j--); } void INT0_ISR(void) interrupt 0 { if(0==P3_2) { P2=SEGTAB[LEDBuffer[LEDPointer]]; P0=DIGTAB[LEDPointer]; } } void main(void) { unsigned char Cnt=99; unsigned char msCnt=0;