单片机C语言编写共阳0~999,最好解释详细点!
/***数字显示秒表,范围0〜9 9 9 *** // ***默认硬件环境来源程序:5 2 微控制器,1 2 MHz Crystal振荡器,3 位公共阳性数字管,P0端口段选择,P1 0〜P1 2 高级位选择(NPN晶体管驱动器),p1 2 是最高的钻头数字管***/#包括“ reg5 2 .h” //包含5 2 个标头文件 #defineTRUE1 //Defines the boolean quantity '1 ': True#defineFALSE0//Defines the boolean quantity '0':False#defineucharunsignedchar//Define unsigned character data abbreviation #defineuintunsignedint//Define unsigned integer data abbreviation #defineth00xfc#definetl00x 1 8 / /1 MSAT1 2 MHz (计时器操作模式1 状态)#defeneseg_num3 //数字管位数#defeneseg_datap0 //数字管段段驱动接口#defeneseg_enp1 //数字管位驱动器接口#defeneseg_alloff(seg_en&= 0xf8 )//关闭所有数字管(位驱动器) #定义ISTIMEAT1 MSCOUNT5 //单位“位”数字管显示时间,数字管 刷新频率f = 1 /(n×t),其中n是数字管位的数量,t是单位“位”数字管中数字管的显示时间 计时器为1 ms)#def inetimesEnd1 000 //显示范围 0〜9 9 9 ucharcodeseg_b_list [1 0] = {0xc0,0xf9 ,0xa4 ,0xb0,0x9 9 ,0x9 2 ,0x9 2 ,0x8 2 ,0x5 ,0xf8 ,0x8 0,0x9 0}; // // ucharbdataflag = 1 ; sbitdisplayflag = flag^0; //显示flag bits sbittimesUpflag = flag^1 ; // time update update flag bit voidTimer0()interrupt1 //计时器0中断函数{staticuchart1 ms; // // staticuintt1 mms_sec; tl0 = tl0; th0 = th0; // reassign 1 MS定时初始值t1 ms = ++ t1 ms%distimeat1 mscount; //首先添加1 ,然后限制计数范围0 true; //如果定时计数值为0,则表示计数值已达到单元的“位”显示 时间(Distimeat1 mscount),显示标志设置为T1 MS_SEC = ++ T1 MS_SEC%T1 SAT1 MSCOUNT; // //在T1 SAT1 MSCOUNT(1 000)添加1 if(!t1 ms_sec)中的范围timesupflag = true true; //返回0,如果返回0,如果返回0,如果返回0,如果返回0,如果返回0,如果返回,则 ,时间更新标志位置} voidSystemInit()//系统初始化功能 {tmod = 0x01 ; //关闭计时器1 ,打开计时器0,并在模式1 (1 6 位计时器)th0 = th0; tl0 = tl0; //安装时间的初始值(1 MSAT1 2 MHz)TR0 = 1 ; // /启动计时器et0 = 1 ; //允许计时器0中断EA = 1 ; //打开系统中断 函数} floatpow_sers(floatx,uinty)// self-compiled simple x的y功能函数,y只能是一个非阴性整数{floatsum {floatsum; if(x == 0 && y == 0) (x == 0)sum = 0; // y!= 0的情况已经包含x = 0,并且不添加不会影响结果,但会影响操作速度 elseif(y == 0)sum = 1 ; //除上述数字外,任何数字is to to 0的功率为0 is 1 elseif(y == 1 )sum = x; //任何数字均为1 的功率1 本身是elseif(y> 1 )sum = pow_self(x, - y)*x; //递归呼叫,功率减少返回; //返回计算结果} voidTimesUpdata()//时间更新功能 {if(timesupflag)//如果时间更新标志为true {sec = ++ sec%timesEnd; // sec(秒)在timese中添加1 次timesupflag = false nd(0〜9 9 9 ); //清除 时间更新标志bit}} voiddisplay(uintdis_num)//显示功能,显示是无符号整数数据 dis_num {staticuchardis_loca; //定义静态变量的显示位置,如果(displayflag)//如果显示标志bit true(单位'bit'end'end的显示时间),则执行以下任务{displayflag = false;/ /清除显示标志bit dis_loca = ++ dis_loca%seg_num; // pre call display首先添加1 个位置,并限制变量范围 0〜(seg_num-1 )seg_alloff;//关闭所有数字管显示(位驱动器)seg_data = seg_b_list [(dis_num/(uint)/(uint)(pow_sers(pow_sers)(1 0,dis_loca)))%1 0]; //显示这次要显示的(dis_num)位(dis_loca)将其上的值转换为代码并发送到数据端口seg_en | = 1编程实现共阳极八个数码管依次显示12345678
该代码的一部分仍然是一个常见的数字管,需要用常规的数字管代替。,就足够了。
此外,您的仿真图与程序不匹配。
可以减少模拟图,请参见下图,请注意数字管连接方法。
修改后的程序如下; / / 0-9 总数字管代码正ucharled表[] = {1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 }; voiddelayms(ucharx){unitj; j = 0; J
用两位位数码管显示数值,使用P2P3口显示数字3和4的程序怎么做?
只需分别使用连接到P2 和端口P3 端口的两个一般正数字管即可。建模图如下:#include
设计一个LED数码管显示器的静态显示电路并设计程序实现以下功能:完成2位显示,要求两位分别正序和逆
可以使用建模图使用连接到P0和P2 端口的两个常见的正数字管来实现它,以形成两个数字静态显示方案。首先,将添加剂数量计算为9 9 ,自动更改以减去,计算高达0,然后更改为帐户。
这个周期。
仿真方案程序如下#include