中国地质大学江城学院
一、课程设计内容
1 编写C程序进行跑马灯及键盘控制
2 根据所用芯片设计外围电路
3 电路焊接
4 程序下载入所焊电路进行系统软硬件综合调试
二、器材
9个二极管、9个330Ω的电阻、11个10K的电阻、2个220Ω的电阻、4个
5.1K的电阻、1个整流二极管IN400
7、1个三端稳压集成电路(+5V)LM780
5、2个10μF/25V的电容、1个三端稳压芯片(+3.3V)LM11
17、1个12MHZ无源晶振、2个33瓷片电容、2个16脚的插槽、2个CD4511BE芯片、1个20脚的插槽、1个74HC573N芯片、1个24脚的插槽、2个七段数码管、1个14脚的插槽、1个HD74HC21P芯片、1个40脚的插槽、1个AT89S52芯片、1个10脚下载口、19个按键、若干细导线。
三、电路结构
四、程序设计
1.跑马灯和键盘控制:
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit P27=P2^7;
sbit P26=P2^6;
uchar a;
uint key;
uchar code table[]={0x00,0x11,0x22,0x33,0x44,0x55,
0x66,0x77,0x88,0x99,0x00,0x11,0x22,0x33,0x44,0x55};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
main()
{
P1=0xF0;
P2=0x00;
P0=0x00;
a=0x01;
P26=0;
P27=1;
key=0;
EA=1;
EX0=1;
EX1=1;
IT0=0;
IT1=1;
PX0=0;
PX1=1;
while(1);
}
display(uint num)
{
P26=0;
P0=table[num];
delay(20);
P26=1;
P1=0Xf0;
}
void int0() interrupt 0
{
uint i,j,pin;
P27=0;
for(i=0;i
for(j=0;j
{
P1=0xFF&(~(0x01
pin=P1;
if(((pin>>(4+j))&0x01)==0)
{key=i+j*4;
IE0=0;
return;
}
}
display(key);
}
void int1() interrupt
2{
P26=1;
while(1)
{
a=_crol_(a,1);
P27=1;
P0=a;
delay(1000);
P27=0;
}
}
2.秒表:
#include
#define uchar unsigned char
#define uint unsigned int
sbit P27=P2^7;
sbit P26=P2^6;
uint a;
uchar b;
main()
{
TMOD=0x01;
TH0=0x3C;
TL0=0xB0;
ET0=1;
EA=1;
TF0=0;
TR0=1;
P0=0xFF;
P2=0x00;
P26=0;
P27=1;
while(1);
}
void Timer0_Overflow() interrupt
1{
TH0=0x3C;
TL0=0xB0;
{ if(a==20)
{a=0;
b=b+1;
if((b&0x0F)==0x0A) b=b+6;
P0=b;
}
a++;
if(b>0x59){b=0x00;P0=b;}
}
}
五、结果分析
1.外部中断0控制按键,此时令P27=0,让8个二极管锁存为初始状态,全灭。同时令P26=0,然后按下按键可以在数码管上同时显示相应的数字,按下16个键可以显示0-9-0-5。
2.外部中断1控制跑马灯,此时令P26=1,让数码管锁存为初始状态,不亮。 同时令P27=1,二极管就能大约1秒循环。
3.显示60秒,令P26=0和P27=1,让数码管和二极管都亮,二极管按照0-59循环,数码管就显示0-59秒。
六、实物图