电子科学综合设计
3.5源程序
#include
uchar code DIS_SEG7[]={0xc0,0xa4,0xc0,0xa4,0xc0,0xf9};//设置学号,共阳字形码 uchar code DIS_BIT[6]={0x3e,0x3d,0x3b,0x37,0x2f,0x1f};//六位数码管位选 sbit k1=P1^0; sbit k2=P1^1; void delay1ms(uint i) { }
void main(void) {
uchar cnt, ttt;
uchar DISP[] = {0, 1, 2, 3, 4, 5,}; while(1) {
for(ttt = 0; ttt < 100; ttt++)
for(cnt = 0; cnt < 6; cnt++) { //点亮数码管0-5 }
P2 = 0;
P0 = DIS_SEG7[DISP[cnt]]; P2 = ~DIS_BIT[cnt]; if(k1==1&&k2==1) else{ }
if(k1==0&&k2==1) else{ }
if(k1==1&&k2==0) else{ }
if(k1==0&&k2==0)
delay1ms(4);
delay1ms(3);
delay1ms(2);
delay1ms(1);
uint j;
while(i--) for(j = 0; j < 110; j++);
6
电子科学综合设计
}
}
ttt = DISP[0]; DISP[0] = DISP[1]; DISP[1] = DISP[2]; DISP[2] = DISP[3]; DISP[3] = DISP[4]; DISP[4] = DISP[5]; DISP[5] = ttt;
4.仿真结果与结果分析
当按键K1、K2弹起时,学号延时1s滚动;当K1按下,K2弹起时,学号延时2s滚动;当K1弹起,K2按下时,学号延时3s滚动;当K1、K2按下时,学号延时4s滚动。
二、课题2:LED8彩灯花样显示
1.课题任务要求及技术指标 1.1设计任务:
要求学生设计出LED8彩灯在两个拨码开关的控制下每隔1秒,2秒,3秒和4秒间隔点亮。 1.2设计要求:
(1)给出正确的原理图;
(2)给出正确的程序,并结合原理图给出相应结果。 2.课题分析及设计思路
7
电子科学综合设计
2.1功能分析:
彩灯流水显示,间隔时间可控。 2.2实现思路:
当51单片机的P2口有高电平输出时,相应的发光二极管就会点亮。应用这一原理我们可以容易的点亮一个数码管,例如令P2口输出0000 0001时D1就会点亮。若再把0000 0001向左循环一位,利用P2口输出,就会点亮D2。在发光二极管两次点亮的间隔中加延时程序,让每次点亮停留一段时间,像这样人眼就可以看到“流水” 的现象。 2.3难点描述:
移位与延时之间的关联。 3.系统设计(建模) 3.1硬件框图
震荡 3.2软件框图
3.3电路图
8
复位电 路 STC 89C51 键盘 流水灯电 路 电 路 开 始 数码管显示学号 读取键值 根据键值命令数码管延时滚动 执行结束 电子科学综合设计
3.4元件清单 器材 单片机 发光二极管 播码开关 晶振 瓷片电容 电解电容 电阻 电阻
3.5源程序 #include
#define uchar unsigned char #define uint unsigned int sbit k1=P1^0; sbit k2=P1^1; //延时
void DelayMS(uint x) {
9
规格 AT89C51 蓝+红+黄+绿 DIPSW_2 11.0592MHz 22pF 10uF 220Ω 10K 数量 1 2 1 1 2 1 8 1 电子科学综合设计
}
uchar i; while(x--) { }
for(i=0;i<120;i++);
//主程序 void main() { }
4.仿真结果与结果分析
uchar i; P2=0x80; while(1) { }
for(i=0;i<7;i++) { }
P2=_crol_(P2,1); //P2 的值向左循环移动 if(k1==1&&k2==1) else{ }
if(k1==0&&k2==1) else{ }
if(k1==1&&k2==0) else{ }
if(k1==0&&k2==0)
DelayMS(1600);
DelayMS(1200);
DelayMS(800);
DelayMS(400);
10