生成电路原理仿真图 C51 单片机应用技术题 写程序 在单片机开发盒上,使用 PO 口及P1 口控制8*8 点阵显示。控制要求: 用按键 K1和K2分别控制数码管示字符“0”和🖤”,当按下 K1 键时示,昱示“0”,持续时间2秒。当按下K2 时显示“🖤”持续时间2秒。挡两个按键都不按时显示宇符“E”。延时函数用定时器 T1、工作方式1实现
时间: 2024-04-24 07:21:56 浏览: 140
抱歉,我是一个自然语言处理模型,无法生成电路原理仿真图。但我可以帮您解答程序相关问题。
以下是 C51 单片机的程序代码,可以通过 P0 和 P1 控制 8*8 点阵显示,同时使用 K1 和 K2 按键切换显示内容:
```c
#include <regx51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = { // 点阵显示字符表
0x00, 0x7c, 0x58, 0x38, 0x18, 0x18, 0x18, 0x18, // "0"
0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, // "1"
0x00, 0x7c, 0x40, 0x20, 0x10, 0x08, 0x04, 0x7c, // "2"
0x00, 0x7c, 0x40, 0x20, 0x40, 0x40, 0x40, 0x7c, // "3"
0x00, 0x10, 0x18, 0x14, 0x12, 0x7e, 0x10, 0x10, // "4"
0x00, 0x7c, 0x04, 0x04, 0x7c, 0x40, 0x40, 0x7c, // "5"
0x00, 0x3c, 0x04, 0x04, 0x3c, 0x44, 0x44, 0x38, // "6"
0x00, 0x7c, 0x40, 0x20, 0x10, 0x10, 0x10, 0x10, // "7"
0x00, 0x38, 0x44, 0x44, 0x38, 0x44, 0x44, 0x38, // "8"
0x00, 0x38, 0x44, 0x44, 0x3c, 0x04, 0x04, 0x38, // "9"
0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, // "E"
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00 // "heart"
};
void delay(uint t) { // 延时函数,使用定时器 T1 实现
TMOD |= 0x10; // T1 的工作方式为模式 1
while (t--) {
TH1 = 0xfc; // 定时器 T1 的初值为 65536-9216=56320
TL1 = 0x18;
TR1 = 1; // 启动定时器 T1
while (!TF1); // 等待定时器 T1 溢出
TR1 = 0; // 关闭定时器 T1
TF1 = 0; // 清除定时器 T1 溢出标志
}
}
void main() {
uchar i = 0;
P0 = P1 = 0xff; // 将 P0 和 P1 的初始值设为 1,点阵不亮
while (1) {
if (P3_0 == 0) { // 按下 K1 键
P0 = ~table[0]; // 显示字符 "0"
delay(2000); // 延时 2 秒
} else if (P3_1 == 0) { // 按下 K2 键
P0 = ~table[11]; // 显示字符 "heart"
delay(2000); // 延时 2 秒
} else { // 两个按键都没有按下
P0 = ~table[10]; // 显示字符 "E"
}
}
}
```
程序中使用了定时器 T1 实现延时函数,T1 的工作方式为模式 1。在主函数中使用 while 循环不断检测按键状态,根据按键状态控制点阵的显示内容。其中,P3_0 和 P3_1 分别表示 K1 和 K2 按键的输入口。
阅读全文