//=========================================//
3.6 蜂鸣器原理图
//=========================================//
四、实验程序
4.1 基础实验:数码管滚动显示0-7 CODE:
思路:将各个数码管设置成一个数组,通过变量i调用。
u8 i = 0;
u8 SEG_Tab[10] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 }; //数码管显示的0-9数字
u8 COM_Tab[8] = { 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe }; //0-7的位码数组
for ( i = 0; i < 8; i++) // 控制8个数码管逐个显示数字
{
P7 = COM_Tab; // 选择当前数码管
P6 = SEG_Tab; // 显示相应的数字
delay_ms(1000); // 每个数码管显示1秒
}
其他代码略..
实验效果:
//=====================================================================================================//
4.2 拓展实验:设计电磁炉电子控制系统 CODE:
思路:该系统使用了蜂鸣器,LED灯,按键,数码管等模块,需要先将各个模块完善,再综合应用。
//=========================================//
//蜂鸣器模块
#define BEEP P54 //定义蜂鸣器引脚,根据原理图可知蜂鸣器通过P54来开关。
函数名称: BEEP_RUN
功能: 蜂鸣器的运行函数。每10ms执行一次,根据变量 Time_Beep 的值决定是否打开或关闭蜂鸣器。如果 Time_Beep 大于0,蜂鸣器保持响并且 Time_Beep 递减,直至为0时关闭蜂鸣器。
备注: 需要每10ms执行一次。
函数名称: BEEP_ON
功能: 设置蜂鸣器响的持续时间,以10ms为单位。根据输入的 time 参数设置 Time_Beep 的值,控制蜂鸣器持续运行的时间。
函数名称: BEEP_OFF
功能: 立即关闭蜂鸣器。将 Time_Beep 设为0,停止蜂鸣器的运行。
//=========================================//
//LED灯模块
P40 = 0; //由原理图,使用LED灯需要将P40口设置为0使三极管导通
//=========================================//
//按键模块
综合分析:电磁炉电子控制子系统需要5个按键为:开机、模式选择、确认、温度'+'、温度'-'
故需要定义5个按键,SW32-SW36使用矩阵按键扫描(矩阵按键代码见附录)
函数名称: KEY_Deal
功能: 读取按键状态。循环检查8个按键端口的状态,并将按下时间存储在 Count 数组中,按下的状态赋值给 LastState。如果按键按下,计数器递增;如果松开,计数器清零。每10ms执行一次。
函数名称: KEY_ReadState
功能: 读取指定按键的状态。根据按下时间的长短返回不同的状态,包括未按下、消抖、单击、长按等。通过判断 Count 数组的值返回相应的按键状态。
函数名称: MateixKEY_delay
功能: 矩阵按键读取专用的延时函数。提供短暂延时,用于矩阵按键读取过程中确保按键状态稳定。
函数名称: MateixKEY_Read
功能: 读取矩阵按键按下的状态。通过行列扫描的方法,结合延时操作,检测出当前按下的按键并返回其键码。如果没有按键按下,则返回0。
//=========================================//
//数码管模块
综合分析:
函数名称:Update_Temperature_Display
功能:通过对设定好的temperature进行数学运算,将温度值分解为数码管显示的各个位数,并且从右边开始填充数码管。
函数名称:Clear_Temperature_Display()
功能:调用一个for循环来清空数码管显示。
函数名称: SEG_LED_Show
功能: 循环刷新8位数码管和8个LED。此函数每1ms调用一次,在前8ms刷新数码管显示,第9ms刷新LED状态,第10ms留空不进行刷新。
通过 num 变量循环控制数码管和LED的刷新顺序,使用预定义的段码数组 SEG_Tab 和位码数组 COM_Tab 来控制显示内容。
数码管刷新: 前8ms内,选择不同的数码管位(SEG_COM)并通过 SEG_Tab 显示相应的数字。
LED刷新: 在第9ms时,打开LED电源并刷新LED的状态。
空闲: 在第10ms时,关闭所有数码管和段码信号。
//=========================================//
//定时器0模块
综合分析:由于单片机内部需要不断扫描矩阵按键读取到的数值,会占用数码管的显示,所以需要将数码管显示放置到定时器0中。
EA = 1; //需要让CPU开放中断,打开总中断。
函数名称: Timer0_Init
功能: 初始化定时器0,使其在1毫秒内产生一个中断,时钟频率为24.000MHz。设置定时器的模式为12T模式,并配置定时初始值,使定时器开始计时,并且使能中断。
模块代码:
TIM.zip
(952 Bytes, 下载次数: 53)
//=========================================//