}
}
delay(d1); P0=0xdb; delay(d1); P0=0xe7; delay(d1); break; } case 0xfb: { P0=0xe7; delay(d1); P0=0xdb; delay(d1); P0=0xbd; delay(d1); P0=0x7e; delay(d1); break; } default: break; }
//中间向两边
实验三 报警产生器
一、实验目的
1、掌握单片机实验箱的使用方法与程序调试技巧;
2、学会使用51系列单片机I/O的基本输入输出功能及相应的驱动模块的设计。
二、实验设备
单片机实验箱一台;PC机一台;USB下载线一根。
三、实验内容
用P1.0输出1KHz和500Hz的音频信号驱动扬声器,作报警信号,要求1KHz信号响100ms,500Hz信号响200ms,交替进行,由开关K1控制输出与否,当开关合上响报警信号,当开关断开报警信号停止,请按流程图编出程序,流程图中的开关K1为实验一原理图中的S38。开关K1按下即S38为高电平,开关K1未按下即S38为低电平。图3-1所示为蜂鸣器驱动电路,图3-2所示为程序流程图。
6
图3-1
蜂鸣器接口电路
图3-2 程序流程图
四、实验步骤
1. 信号产生的方法:500Hz信号周期为2ms,信号电平为每1ms变反1次;1KHz的信号周期为1ms,信号电平每500us变反1次。
2. 编写程序,将实验箱电源开关拨至USB供电,并将拨码开关总开关S44拨至“关”状态。 3. 下载程序并运行程序,将蜂鸣器开关S1打开,控制蜂鸣器发声。
五、思考题
1.简述你在本次实验中遇到过哪些问题?这些问题是怎样解决的?有何收获和体会?
2. 本实验的硬件通过编程可以演奏出悦耳的乐曲、可以实现报警声、门铃声音。现要求单片机产生“嘀、嘀、…”报警声从P1.0端口输出,产生频率为1KHz。当1KHZ方波从P1.0输出0.2秒,接着0.2秒从P1.0输出电平信号,如此循环下去时,就形成所需的报警声了。请有兴趣的同学编程调试。
7
程序代码:
#include
#define uint unsigned int sbit S38=P1^7; sbit BUZZ=P1^0; void delay() {
uchar b;
for(b=63;b>0;b--) {
_nop_(); } }
void main() {
while(1) {
uint FLAG=1,i;
while(S38==1) {
if(FLAG) {
for(i=0;i<200;i++) {
BUZZ=~BUZZ; delay(); delay(); }
FLAG=~FLAG; } else {
for(i=0;i<200;i++) {
BUZZ=~BUZZ; delay(); }
FLAG=~FLAG; } }
//调用一次约为500us
//按键按下
//500hz
//1000hz
8
} }
思考题2代码: #include
#define uchar unsigned char sbit S38=P1^7; sbit BUZZ=P1^0; void delay() {
uchar b;
for(b=63;b>0;b--) {
_nop_(); } }
void main() {
while(1) {
uchar i;
while(S38==1) {
for(i=0;i<200;i++) {
BUZZ=~BUZZ; delay(); }
for(i=400;i>0;i--) {
delay(); } } } }
延时0.2s
9
//
实验四 外部中断实验
一、实验目的
1、学习外部中断技术的基本使用方法 2、中断处理的编程方法。
二、实验设备
单片机实验箱一台;PC机一台;USB下载线一根。
三、实验内容
单片机外部中断0(P3.2)已与独立式键盘中S27连接,外部中断1(P3.3)已与S28连接,要求在无外部中断时最右一位发光二极管(D26)点亮。请编程实现:当S27按下,外部中断0请求中断,控制发光二极管左移;当S28按下,外部中断1请求中断,控制发光二极管闪烁。(要求外部中断1优先级高于外部中断0)。单片机与发光二极管的连续见实验一原理图,独立式键盘原理图如图4-1所示。
4-1 独立式键盘原理图
四、思考题
1.51单片机的中断系统由哪几个特殊功能寄存器组成?
2.中断函数与函数调用有何不同?
3.MCS-51单片机若要把外部中断源扩充为6个,另采用哪些方法?如何确定其优先级? 程序代码:
#include
#include
int a,b;
for(a=120;a>0;a--) { for(b=110;b>0;b--); } }
void main()
10