、鲜食玉米在采后加工过程中需要进行15分钟的高温灭菌,才能够玉米果穗内部存在的有害物消杀干净,当灭菌时间到达时控制系统将关闭加热装置并进入保温状态。现要求灭菌时间未到达时,控制面板上的第一个数码管循(共有8个数码管,均共阴极)环显示0~F;当灭菌时间到达时,控制面板上的蜂鸣器发出报警声音。设置灭菌时间到达用外部中断0实现,其触发方式为低电平触发,试使用C51编写程序实现上述功能。
时间: 2024-03-11 18:43:29 浏览: 75
好的,根据你的要求,我们可以使用C51编写一个程序,实现鲜食玉米加工过程中的高温灭菌控制。以下是一个简单的参考程序:
```
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit D1 = P1^0; // 第1个数码管
sbit D2 = P1^1; // 第2个数码管
sbit D3 = P1^2; // 第3个数码管
sbit D4 = P1^3; // 第4个数码管
sbit D5 = P1^4; // 第5个数码管
sbit D6 = P1^5; // 第6个数码管
sbit D7 = P1^6; // 第7个数码管
sbit D8 = P1^7; // 第8个数码管
sbit BUZZ = P3^7; // 蜂鸣器
uchar code seg[] = { // 数码管段码表
0xC0, // 0
0xF9, // 1
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x90, // 9
0x88, // A
0x83, // b
0xC6, // C
0xA1, // d
0x86, // E
0x8E // F
};
void delay(uint n)
{
while (n--);
}
void display(uchar num)
{
D1 = D2 = D3 = D4 = D5 = D6 = D7 = D8 = 1; // 所有数码管关闭
// 显示第1个数码管
D1 = 0;
P0 = seg[num % 16];
num /= 16;
delay(10);
D1 = 1;
// 显示第2个数码管
D2 = 0;
P0 = seg[num % 16];
num /= 16;
delay(10);
D2 = 1;
// 显示第3个数码管
D3 = 0;
P0 = seg[num % 16];
num /= 16;
delay(10);
D3 = 1;
// 显示第4个数码管
D4 = 0;
P0 = seg[num % 16];
num /= 16;
delay(10);
D4 = 1;
// 显示第5个数码管
D5 = 0;
P0 = seg[num % 16];
num /= 16;
delay(10);
D5 = 1;
// 显示第6个数码管
D6 = 0;
P0 = seg[num % 16];
num /= 16;
delay(10);
D6 = 1;
// 显示第7个数码管
D7 = 0;
P0 = seg[num % 16];
num /= 16;
delay(10);
D7 = 1;
// 显示第8个数码管
D8 = 0;
P0 = seg[num % 16];
delay(10);
D8 = 1;
}
void main()
{
uchar i = 0;
uint cnt = 0;
// 设置外部中断0触发方式为低电平触发
IT0 = 1;
// 使能外部中断0
EX0 = 1;
// 启动定时器0,用于计时
TMOD = 0x01;
TH0 = 0xFC;
TL0 = 0x67;
TR0 = 1;
while (1) {
if (cnt < 9000) { // 灭菌时间未到,循环显示0~F
for (i = 0; i < 16; i++) {
display(i);
}
} else { // 灭菌时间到达,蜂鸣器发出报警声音
BUZZ = 0;
delay(1000);
BUZZ = 1;
delay(1000);
}
}
}
// 外部中断0中断服务程序
void int0_isr() interrupt 0
{
TR0 = 0; // 停止定时器0
cnt = TH0 * 256 + TL0; // 记录定时器0计数值
TH0 = TL0 = 0; // 清零定时器0计数值
}
```
这个程序使用了P1口控制8个共阴极数码管的开关,使用了P0口输出数码管的段码,使用了P3口控制蜂鸣器。程序中使用了定时器0来计时,外部中断0用于检测灭菌时间是否到达。具体的实现过程比较简单,就是循环显示0~F或者蜂鸣器发出报警声音,具体显示哪个数码管上的数字则取决于计时器的计数值。你可以根据自己的需求来修改程序中的延时时间、灭菌时间等参数。
阅读全文