STC 89C52RC 数码管LED显示动态2(0-99计数)
单片机源程序如下:
- /***************************************************************************
- 标题: 数码管的显示
- 效果: 显示00-99,动态显示+变化显示
- 工作于:LY5A-L2A开发板
- 作者: 林洋电子吧
- 说明: 此例程将数码管显示内容用一个函数打包,要显示直接调用即可。
- ******************************************************************************/
- //头文件:
- #include "reg51.h"
- //变量定义:
- unsigned int table[]=
- {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- //表:共阳数码管 0-9
- //引脚定义:
- sbit SMG_q = P1^0; //定义数码管阳级控制脚(千位)
- sbit SMG_b = P1^1; //定义数码管阳级控制脚(百位)
- sbit SMG_s = P1^2; //定义数码管阳级控制脚(十位)
- sbit SMG_g = P1^3; //定义数码管阳级控制脚(个位)
- //函数声明:
- void display(unsigned int da);//定义显示函数,参数为显示内容,只显示两位数
- void delay1(void);
- //函数声明:
- void delay2(unsigned char tmp); //延时子函数
- //数据定义:
- code unsigned char tmpled[50]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80,0X81,0X82,
- 0X84,0X88,0X90,0XA0,0XC0,0XC1,0XC2,0XC4,0XC8,0XD0,
- 0XE0,0XE1,0XE2,0XE4,0XE8,0XF0,0XF1,0XF2,0XF4,0XF8,
- 0XF9,0XFA,0XFC,0XFD,0XFE,0XFF,0XFF,0X00,0XFF,0X00};
- //定义数组常量,前面加"code"表示常量在程序代码中存放,
- //不占用RAM。该数组为发光二极管的输出数据
- //主函数,C语言的入口函数:
- void main(void)
- {
- unsigned int i=0; //作为查表的索引号
- unsigned int ldata; //变量用作0~9999计数
- unsigned int j; //此变量作为计数跳变刷新时间
- unsigned char k; //定义变量
-
- //while(1)
- // { //无限循环
- // }
-
- while(1)
- {
- j=800;
- while(j--)
- {
- display(ldata); //刷新5000次,约1秒,注:在C语言里是没有周期可计算的哦~~~
- }
- if(ldata<9999)
- ldata++; //刷新完成约1秒,变量做加计数
- else
- ldata=0;
-
- //for(k=0;i<50;k++)
- // { //循环输出40个数据
- // P2=~tmpled[k]; //"~"这个符号是取反,因发光二极管采用共阳极,所以将数据取反再输出
- // delay2(100); //调用延时子函数,改变参数大小,调整变化速度
- // }
- }
- }
- //显示函数,参数为显示内容,显示四位数
- void display(unsigned int da)
- {
- SMG_q=0; //选择千位数码管
- P0=table[da/1000]; //获取千位值,查表输出定义好的数码管段值与P0口,显示相应的0-9
- delay1(); //延时
- P0=0XFF; //清除数码管显示,因是共阳型,所以不是0
- SMG_q=1; //关闭千位数码管
-
- SMG_b=0; //选择百位数码管
- P0=table[(da%1000)/100]; //获取百位值,查表输出定义好的数码管段值与P0口,显示相应的0-9
- delay1(); //延时
- P0=0XFF; //清除数码管显示,因是共阳型,所以不是0
- SMG_b=1; //关闭百位数码管
-
- SMG_s=0; //选择十位数码管
- P0=table[((da%1000)%100)/10]; //获取十位值,查表输出定义好的数码管段值与P0口,显示相应的0-9
- delay1(); //延时
- P0=0XFF; //清除数码管显示,因是共阳型,所以不是0
- SMG_s=1; //关闭十位数码管
- SMG_g=0; //选择个位数码管
- P0=table[((da%1000)%100)%10]; //获取个位值,查表输出定义好的数码管段值与P0口,显示相应的0-9
- delay1(); //延时
- P0=0XFF; //清除数码管显示,因是共阳型,所以不是0
- SMG_g=1; //关闭个位数码管
-
- }
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
STC 89C52RC 数码管LED显示动态2(0-99计数).rar
(17.51 KB, 下载次数: 37)
|