以下是基于51单片机的C语言代码实现:

#include <reg51.h> #include <intrins.h>

#define uchar unsigned char #define uint unsigned int

//定义LED数码管显示的端口 sbit dig1 = P1^0; sbit dig2 = P1^1; sbit segA = P2^0; sbit segB = P2^1; sbit segC = P2^2; sbit segD = P2^3; sbit segE = P2^4; sbit segF = P2^5; sbit segG = P2^6; sbit segDP = P2^7;

//定义按键的端口 sbit start_stop = P3^0; sbit clear = P3^1;

uchar code table[] = { //共阴数码管的显示码表 0x3f, //0 0x06, //1 0x5b, //2 0x4f, //3 0x66, //4 0x6d, //5 0x7d, //6 0x07, //7 0x7f, //8 0x6f //9 };

uchar cnt = 0; //计数器,初始值为0 bit run = 0; //启动停止标志,0为停止状态,1为运行状态

//延时函数,用于控制数码管的刷新频率 void delay(uint ms) { uint i, j; for (i = ms; i > 0; i--) for (j = 110; j > 0; j--); }

//数码管刷新函数 void display(uchar num) { segDP = 1; //小数点不显示 segA = table[num / 10]; //显示十位数 segB = table[num % 10]; //显示个位数 }

//中断服务函数,用于检测按键状态 void key() interrupt 0 { nop(); //延时一下以消除抖动 if (start_stop == 0) //启动停止键按下 run = !run; //反转启动停止标志 if (clear == 0) //清0键按下 cnt = 0; //计数器清零 }

void main() { TMOD = 0x01; //定时器0工作在模式1(16位定时器)下 TH0 = 0xFC; //装入初值,定时1ms TL0 = 0x67; ET0 = 1; //开定时器0中断 EA = 1; //开总中断 TR0 = 1; //启动定时器0 while (1) { if (run) //运行状态 { display(cnt); //显示计数器值 delay(10); //延时10ms cnt++; //计数器加1 if (cnt == 100) //计数器达到最大值 cnt = 0; //计数器清零 } else //停止状态 { display(0); //数码管显示"00" } } }

//定时器0中断服务函数,用于控制数码管的刷新频率 void timer0() interrupt 1 { TH0 = 0xFC; //重新装入初值,定时1ms TL0 = 0x67; static uchar i = 0; if (i == 0) //刷新第一个数码管 { dig1 = 1; //点亮第一个数码管 dig2 = 0; //关闭第二个数码管 i = 1; } else //刷新第二个数码管 { dig1 = 0; //关闭第一个数码管 dig2 = 1; //点亮第二个数码管 i = 0; }

两位led显示可以显示00到99两个按键分别为启动停止键和清0键用c语言再keil软件中实现

原文地址: https://www.cveoy.top/t/topic/fjxi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录