- #include<reg51.h>//单片机头文件
- #define SMG P0//自定义单片机P0组端口为变量SMG
- #define uchar unsigned char//自定义变量uchar为unsigned char
- unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管段码显示0~9数字的数组,低电平点亮数码管段码数字0~9。
- //uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //共阴数码管段码数字0~9字码表,高电平点亮数码管段码数字0~9。
- int num;//共阳数码管段码数组下标数字变量
- sbit AA = P1^0;//接编码器A端
- sbit BB = P1^1;//接编码器B端
- void delay(uchar z)//延时函数
- {
- uchar i,j;
- for(i = 0; i < z; i++)
- for(j = 0; j < 120; j++);
- }
- void main()//主函数
- {
- while(1)//死循环
- {
- if(num<0)//判断共阳数码管段码数组下标数字变量是否小于0
- {
- num=9;//共阳数码管段码数组下标数字变量变为9
- }
- if(num>9)//判断共阳数码管段码数组下标数字变量是否大于9
- {
- num=0;//共阳数码管段码数组下标数字变量变为0
- }
- SMG=table[num];//共阳数码管段码显示0~9数字的数组赋值给变量SMG,相当于赋值给单片机P0组端口,从而让数码管显示出0~ 9数字。
- if(AA == 0)//开始检测是否旋转了开关
- {
- delay(10);//消除抖动
- if(AA == 0) //确实是旋转了,进行正反转判断。
- {
- delay(10);//消除抖动
- while(!AA);//等待开关A端复位(断开),防止出现乱加减的现象。
- if(BB == 1)//正转,进行正转处理。
- {
- num++;//数码管数值增加
- }
- if(BB == 0)//反转,进行反转处理。
- {
- num--;//数码管数值减少
- }
- }
- }
- }
- }
|