打印机纸张计数器 测试完美
单片机源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- //uchar dd[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极数码管断码表
- uchar dd[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xb6};
- sbit k1=P3^7; //按键接口定义 加
- sbit k2=P3^1; // 减
- sbit k3=P3^6; // 复位
- sbit led1=P2^0;
- sbit led2=P2^1;
- sbit duan1=P2^6;
- sbit wei1=P2^7;
- sbit duan2=P2^5;
- sbit wei2=P2^4;
- uchar shu=0; //计数变量
- void delay1ms() //@11.0592MHz
- {
- unsigned char i, j;
- _nop_();
- _nop_();
- _nop_();
- i = 11;
- j = 190;
- do
- {
- while (--j);
- } while (--i);
- }
- void display_led1() //显示函数
- {
- if(shu>=10)
- {
- wei1=1;
- P0=0XFE;
- wei1=0;
- duan1=1;
- // P0=dd[shu/100]; //百位
- P0=dd[shu/10%10]; //十位
- duan1=0;
- delay1ms(); //?
- }
-
- wei1=1;
- P0=0XFD;
- wei1=0;
- duan1=1;
- P0=dd[shu%10]; //十位
- duan1=0;
- delay1ms(); //消影
-
- // wei1=1;
- // P0=0XFB;
- // wei1=0;
- // duan1=1;
- // P0=dd[11]; //个位
- // duan1=0;
- // delay1ms();
- }
- void display_led2() //显示函数
- {
- if(shu>=20)
- {
- wei2=1;
- P1=0XFE;
- wei2=0;
- duan2=1;
- P1=dd[shu*5/100]; //百位
- duan2=0;
- delay1ms();
- }
- if(shu>=1)
- {
- wei2=1;
- P1=0XFD;
- wei2=0;
- duan2=1;
- P1=dd[shu*5/10%10]+0X80; //十位
- led1=0;
- led2=0;
- duan2=0;
- delay1ms(); //消影
- }
- wei2=1;
- P1=0XFB;
- wei2=0;
- duan2=1;
- P1=dd[shu*5%10]; //个位
- duan2=0;
- delay1ms();
- }
- void key() //按键操作函数
- {
- if(k1==0) //判断
- {
- delay1ms(); //消抖
- if(k1==0) //再判断
- {
- shu++;if(shu==200){shu=0;} //计数加,到100回0
- }
- while(k1==0);
- }
- // if(k2==0)
- // {
- // delay1ms();
- // if(k2==0)
- // {
- // shu--;if(shu==-1){shu=199;} //计数减 零以下 回99
- // } while(k2==0);
- // }
- if(k3==0)
- {
- delay1ms();
- if(k3==0)
- {
- shu=0; //变量清零
- led1=1;
- led2=1;
- }
- while(k3==0);
- }
- }
- void main()
- {
- while(1)
- {
-
- display_led2() ;
- display_led1();
- key();
- }
- }
复制代码
上图Gerber文件下载:
Gerber文件.7z
(134.69 KB, 下载次数: 15)
|