单片机源程序:
- /*这个程序主要实现
- 每隔1ms左右数码显示管上的数字自动累加1
-
- BY:IZHIQIANG
-
- */
- #include<REGX52.H>
- #include<INTRINS.H>
- code unsigned char TransCodes[10]=
- {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//定义查表数组,显示0-9中的第几个就直接选第几个就行
- void Display(int Datum);//自定义的数码管显示函数的声明
- void Delay5ms();//5ms延时声明
- int main()
- {
- int i;
- for(i=0;i<999;i++)//i从0到999累加
- {
- if(i>999)//当i大于999就给它置0
- {
- i=0;
- }
- Display(i);//在数码管上显示i的值
- }
- return 0;
- }
- void Display(int Datum)//自定义的数码管显示函数的定义
- {
-
- //数值转换
- int bai,shi,ge,i;
- bai=Datum/100;//百位
- shi=Datum%100/10;//十位
- ge=Datum%10;//个位
- //数码管显示,每位数字显示5ms,不停地轮回显示
- //大多数数码管都是用的这种视觉延迟的方法显示多个数字
- //在这里只用了数码管的后三位
- //这里66然后乘以下面3个5ms的和,等于990ms,差不多1秒。
-
- for(i=0;i<66;i++) //66个循环
- {
- P2_4=1,P2_5=1,P2_6=1;//关掉三个数码管
- P0=TransCodes[bai];//P0输出百位数字
- P2_4=0,P2_5=1,P2_6=1;//打开百位输入端
-
- Delay5ms(); //5ms延时
- P2_4=1,P2_5=1,P2_6=1;//这里是十位的,其他同上
- P0=TransCodes[shi];
- P2_4=1,P2_5=0,P2_6=1;
-
- Delay5ms();
- P2_4=1,P2_5=1,P2_6=1;//这个是个位的,其他同上
- P0=TransCodes[ge];
- P2_4=1,P2_5=1,P2_6=0;
-
- Delay5ms();
- }
- }
- //5ms的软件延时,这个是用stc软件生成的
- void Delay5ms()
- {
- unsigned char i, j;
- i = 10;
- j = 183;
- do
- {
- while (--j);
- } while (--i);
- }
复制代码
下载:
数码管显示.zip
(50.76 KB, 下载次数: 70)
|