单片机c51交通灯程序_数码管0~F显示图

2025-02-1010:56:34创业资讯0

补发上节课的电路原理图。当涉及到多个数码管时,我们只需将每个数码管的a、b、c、d、e、f、g和h脚相应地连接在一起,并将控制位分别接至P1.0、P1.1、P1.2和P1.3。只有当对应的控制位为0时,被控制的数码管才会显示。

上节课的显示系统仅能展示一个数码管的内容,并且需要持续在主循环中等待。这并不符合我们的实际使用需求。我们可以考虑在定时器中设置时间变化,使得数码管显示更为流畅。

定义一个状态标志位,用来判断何时需要刷新数码管。比如我们可以设置当时间到达1秒时进行刷新,不足1秒则不进行刷新。

接下来,我们需要定义数码管的控制位,以决定哪个数码管进行显示。

为了方便数字的显示,我们可以定义一个数组来存储要显示的数字的缩写。

在代码中,我们引入了相应的头文件。

include

然后定义了几个控制位为P1的sbit变量。

sbit kongzhi0 = P1^0;

sbit kongzhi1 = P1^1;

sbit kongzhi2 = P1^2;

sbit kongzhi3 = P1^3;

接下来是定义了一个数码管数字编码的数组。

unsigned char code shuzi[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};

定义了几个变量来记录时间以及刷新状态。

unsigned int miaoshu = 0; // 时间变量,记录秒数

bit shuaxin = 0; // 刷新状态标志位

unsigned char i = 0; // 控制数码管的索引变量

unsigned char xsds[] = {0xff, 0xff, 0xff, 0xff}; // 用于暂存数码管显示数据的数组

在主函数中,我们首先进行了一些初始化设置。

void main() {

EA = 1; // 开启总中断

TMOD = 0x01; // 设置定时器模式

TH0 = 0xD8; // 设置定时器初值高8位

TL0 = 0xEF; // 设置定时器初值低8位

ET0 = 1; // 开启定时器中断允许位

TR0 = 1; // 启动定时器

while (1) { // 主循环开始

} // 主循环结束

} // 主函数结束

接着是定时器的中断服务程序。

void dingshiqi0() interrupt 1 { // 定时器中断服务程序函数,编号为1的定时器中断服务程序(此处根据实际使用情况而定)

TH0 = 0xD8; // 重置定时器初值高8位(此处重复设置初值可能是为了确确计时)

TL0 = 0xEF; // 重置定时器初值低8位(同上)

j++; // 时间递增计数器(此处j与原代码中的i不同)

if (j >= 10) { // 当时间达到一定值时执行后续操作(根据实际情况设定条件)

j = 0; // 重置时间计数器并重置时间数据及显示等(重置的变量未在原代码中给出)

miaoshu++; // 时间增加(此处miaoshu为秒数变量)

  • 版权说明:
  • 本文内容由互联网用户自发贡献,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 295052769@qq.com 举报,一经查实,本站将立刻删除。