1. 摘要: 摘要:
近年来,随着电子技术和微型计算机的发展,单片机的档次不断 提高,应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪 器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端 及通信产品中得到广泛的应用、 成为现代电子系统中最重要的智能化 的核心部件。 AT89C51 就是其中一种, 而 它是一种带 4K 字节闪烁可 编程可擦除只读存储器的低电压,高性能 CMO8 位微处理器,为很 多嵌入式控制系统提供了一种灵活性高且价廉的方案。 2. 关键字:单片机、流水灯 3. 需求分析: 随着现代社会的发展,人们越来越追求审美和新颖,而流水灯就 是其中一种,以前简单的照明工具变得越来越多样化,流水灯的千姿 百态恰能给人一种视觉冲击, 现在不管大街小巷我们都可以随处可见 这种变幻万千的流水灯,而这种流水灯我们可以产用电子电路去设 计,我们主要可以用装套控制器和状态译码器来实现灯光的流水效 果,但是现在我们可以用单片机 AT89C51 来实现,因为其相对于电 子电路有明显的优越性,控制硬件电路比较简单,软件方面程序也不 复杂,因此制作的远离简单,但功能作用并不低于电子电路设计的, 由于它的小巧方便、 通俗易懂, 所以我们往往采用单片机来做流水灯。
4. 系统设计
1.硬件框图
复 位 电 路 盘 键
STC
震 荡 电 路 路 电 灯
89C51
水
流
2.总设计图
3.选用 AT89C51 的引脚功能 XTAL1:单芯片系统时钟的反向放大器输入端。
XTAL2:系统时钟的反向放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英震荡晶体系统就可以工作了, 此外 可以在两引脚与地之间加入 20PF 的小电容,可以使系统更稳定,避 免噪音干扰而死机。 RESET:重置引脚,高电平动作,当要对晶体重置时,只要对此 引脚电平提升至高电平并保持两个及其周期以上的时间便能完成系 统重置的各项动作,使得内部特殊功能寄存器内容均被设成已知状 态。 P0:端口 0 是一个 8 位宽的开路汲汲双向输出入端口,共有 8 个 位,P0.0 表示 0,P0.1 表示 1,以此类推。 P2:端口 2 是具有内部提升电路的双向 I/O 端口,每一个引脚可 以推动 4 个 LS 的 TTL 负载,若将端口 2 的输出设为高电平时,此端 口便能当成输入端口来使用。 4.说明 如图所示,S1 为复位开关,S2、S3、S4 分别为切换不同流水效 果的开关,P2 口控制 LED 灯 D1~D7 的显示,P0 口作为 LED 的输出 控制。当按下 S2 后能实现 D1 和 D7 同时亮其他不亮,然后 D2 和 D6 亮,依此类推。当按下复位 S1,然后按下 S2 实现 LED 灯从 D7 到 D1 循环亮, 按下 S1 然后按下 S3 实现 LED 从 D1
到 D7 的循环亮。 硬件详细设计 1.复位电路部分 如图所示,当要对晶片重置时,只要按此开关就能完成 LED 和开
关的重置。
2.晶振部分 产生时钟信号
3.开关部分 S2、S3、S4 分别控制 3 种 LED 显示效果,这里就不用详细说明 了。
4.LED 显示部分 限流电阻为 470 欧姆,经过的电流大概为 10mA。 软件详细设计 1. 软件框图
开始
检查是否有键按下
读取键值
根据键盘指令执行流水灯显示效果
执行结束
2.详细程序清单 #include // 头文件
sbit k1=P0^0; sbit k2=P0^1; sbit k3=P0^2;
//定义按键 k1 //定义按键 k2 //定义按键 k3
code unsigned char num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,//左 移 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,//右 移
0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e} ;//两边到中间 unsigned char k; //数组的移动指针
void delay10ms(void) //延时 10ms { unsigned char i,j; for(i=20;i>0;i--) for(j=248;j>0;j--); }
void delay02s(void)//延时 0.2s { unsigned char i; for(i=20;i>0;i--) {delay10ms(); } } void KEY(void) //按键扫描程序 { if(k1==0) { delay10ms(); if(k1==0) { k=0; } } if(k2==0) { delay10ms(); if(k2==0) {
k=8; } } if(k3==0) { delay10ms(); if(k3==0) { k=16; } } } void main(void) //主程序 { unsigned char i; while(1)//死循环 { if(P0!=0xff)//判断是否有按键按下 { KEY();//执行按键扫描程序 for(i=0;i
P2=num[i+k];//根据按下的键得到亮的状态 delay02s();//延时 0.2s } P2=0xff;//全灭 } } }
5.Protuce 仿真
Proteus 仿真时,单片机需要加载程序,加载程序为.HEX 文件。 本设计利用 Keil µVision3, 在新建 Keil 项目时选择 AT89C51 单片机 作为 CPU, C 语言源程序导入, 将 在“Options For Target”对话窗口中, 选 中 “Output”选项中 的 “Create HEX File”,编 译链接 后就 可以 生 成.HEX 文件。在 Proteus ISIS 中,选中 AT89C52 并单击鼠标左键, 对 AT89C52 进行设置,设置单片机时钟频率为 12MHz,按照正确的 文件路径加载.HEX 文件。对单片机设置完毕后就可以开始仿真了。 仿真结果如下:当 S2 关闭
当 S3 关闭
1. 摘要: 摘要:
近年来,随着电子技术和微型计算机的发展,单片机的档次不断 提高,应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪 器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端 及通信产品中得到广泛的应用、 成为现代电子系统中最重要的智能化 的核心部件。 AT89C51 就是其中一种, 而 它是一种带 4K 字节闪烁可 编程可擦除只读存储器的低电压,高性能 CMO8 位微处理器,为很 多嵌入式控制系统提供了一种灵活性高且价廉的方案。 2. 关键字:单片机、流水灯 3. 需求分析: 随着现代社会的发展,人们越来越追求审美和新颖,而流水灯就 是其中一种,以前简单的照明工具变得越来越多样化,流水灯的千姿 百态恰能给人一种视觉冲击, 现在不管大街小巷我们都可以随处可见 这种变幻万千的流水灯,而这种流水灯我们可以产用电子电路去设 计,我们主要可以用装套控制器和状态译码器来实现灯光的流水效 果,但是现在我们可以用单片机 AT89C51 来实现,因为其相对于电 子电路有明显的优越性,控制硬件电路比较简单,软件方面程序也不 复杂,因此制作的远离简单,但功能作用并不低于电子电路设计的, 由于它的小巧方便、 通俗易懂, 所以我们往往采用单片机来做流水灯。
4. 系统设计
1.硬件框图
复 位 电 路 盘 键
STC
震 荡 电 路 路 电 灯
89C51
水
流
2.总设计图
3.选用 AT89C51 的引脚功能 XTAL1:单芯片系统时钟的反向放大器输入端。
XTAL2:系统时钟的反向放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英震荡晶体系统就可以工作了, 此外 可以在两引脚与地之间加入 20PF 的小电容,可以使系统更稳定,避 免噪音干扰而死机。 RESET:重置引脚,高电平动作,当要对晶体重置时,只要对此 引脚电平提升至高电平并保持两个及其周期以上的时间便能完成系 统重置的各项动作,使得内部特殊功能寄存器内容均被设成已知状 态。 P0:端口 0 是一个 8 位宽的开路汲汲双向输出入端口,共有 8 个 位,P0.0 表示 0,P0.1 表示 1,以此类推。 P2:端口 2 是具有内部提升电路的双向 I/O 端口,每一个引脚可 以推动 4 个 LS 的 TTL 负载,若将端口 2 的输出设为高电平时,此端 口便能当成输入端口来使用。 4.说明 如图所示,S1 为复位开关,S2、S3、S4 分别为切换不同流水效 果的开关,P2 口控制 LED 灯 D1~D7 的显示,P0 口作为 LED 的输出 控制。当按下 S2 后能实现 D1 和 D7 同时亮其他不亮,然后 D2 和 D6 亮,依此类推。当按下复位 S1,然后按下 S2 实现 LED 灯从 D7 到 D1 循环亮, 按下 S1 然后按下 S3 实现 LED 从 D1
到 D7 的循环亮。 硬件详细设计 1.复位电路部分 如图所示,当要对晶片重置时,只要按此开关就能完成 LED 和开
关的重置。
2.晶振部分 产生时钟信号
3.开关部分 S2、S3、S4 分别控制 3 种 LED 显示效果,这里就不用详细说明 了。
4.LED 显示部分 限流电阻为 470 欧姆,经过的电流大概为 10mA。 软件详细设计 1. 软件框图
开始
检查是否有键按下
读取键值
根据键盘指令执行流水灯显示效果
执行结束
2.详细程序清单 #include // 头文件
sbit k1=P0^0; sbit k2=P0^1; sbit k3=P0^2;
//定义按键 k1 //定义按键 k2 //定义按键 k3
code unsigned char num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,//左 移 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,//右 移
0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e} ;//两边到中间 unsigned char k; //数组的移动指针
void delay10ms(void) //延时 10ms { unsigned char i,j; for(i=20;i>0;i--) for(j=248;j>0;j--); }
void delay02s(void)//延时 0.2s { unsigned char i; for(i=20;i>0;i--) {delay10ms(); } } void KEY(void) //按键扫描程序 { if(k1==0) { delay10ms(); if(k1==0) { k=0; } } if(k2==0) { delay10ms(); if(k2==0) {
k=8; } } if(k3==0) { delay10ms(); if(k3==0) { k=16; } } } void main(void) //主程序 { unsigned char i; while(1)//死循环 { if(P0!=0xff)//判断是否有按键按下 { KEY();//执行按键扫描程序 for(i=0;i
P2=num[i+k];//根据按下的键得到亮的状态 delay02s();//延时 0.2s } P2=0xff;//全灭 } } }
5.Protuce 仿真
Proteus 仿真时,单片机需要加载程序,加载程序为.HEX 文件。 本设计利用 Keil µVision3, 在新建 Keil 项目时选择 AT89C51 单片机 作为 CPU, C 语言源程序导入, 将 在“Options For Target”对话窗口中, 选 中 “Output”选项中 的 “Create HEX File”,编 译链接 后就 可以 生 成.HEX 文件。在 Proteus ISIS 中,选中 AT89C52 并单击鼠标左键, 对 AT89C52 进行设置,设置单片机时钟频率为 12MHz,按照正确的 文件路径加载.HEX 文件。对单片机设置完毕后就可以开始仿真了。 仿真结果如下:当 S2 关闭
当 S3 关闭