1 #include<reg52.h>//包含52单片机内部寄存器头文件 2 #define uchar unsigned char // 自定义uchar为unsigned char(即无符号字符型数据,数据范围:0到255。) 3 #define int int//自定义int为int(即有符号整数型数据,数据范围:-32768到32767。) 4 sbit K1=P3^2;//位定义EC11旋转编码器A端引脚K1 5 sbit K2=P3^3;//位定义EC11旋转编码器B端引脚K2 6 sbit K3=P3^4;//位定义EC11旋转编码器C端引脚K3 7 int KeyValue,num;// 8 //int ge ,shi,bai,qian;// 9 //uchar qitingflag; 10 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //共阴数码管段码数字0~9字码表,高电平点亮数码管段码数字0~9。 11 void Delay(int z)//延时程序 12 { 13 int x,y; 14 for(x=z;x>0;x--) 15 for(y=110;y>0;y--); 16 } 17 void ShuMaGuanDisplayKeyValue(int KeyValue)//数码管显示数值函数 18 { 19 // ge=KeyValue%10; 20 // shi=KeyValue%100/10; 21 // bai=KeyValue%1000/100; 22 // qian=KeyValue/1000; 23 24 P2=0xf7;//数码管个位显示位 25 P0=table[KeyValue%10];//数码管个位数值显示 26 Delay(5);//延时 27 28 P2=0xfb;//数码管十位显示位 29 P0=table[KeyValue%100/10];//数码管十位数值显示 30 Delay(5);//延时 31 32 P2=0xfd;//数码管百位显示位 33 P0=table[KeyValue%1000/100];//数码管百位数值显示 34 Delay(5);//延时 35 36 P2=0xfe;//数码管千位显示位 37 P0=table[KeyValue/1000];//数码管千位数值显示 38 Delay(5);//延时 39 } 40 void Int0Init()//外部中断0初始化函数 41 { 42 EA=1;//开启总中断 43 EX0=1;//开启外部中断0中断开关 44 IT0=1;//外部中断0下降沿跳变沿触发方式 45 } 46 void Int0() interrupt 0//外部中断0的中断函数 47 { 48 num++; 49 // if(K2==1&&num==2) 50 // { 51 // KeyValue=0; 52 // } 53 // if(K2==0&&num==2) 54 // { 55 // KeyValue=0; 56 // } 57 if(K2==1&&num>2) 58 { 59 KeyValue++; 60 } 61 if(K2==0&&num>2) 62 { 63 KeyValue--; 64 } 65 if(KeyValue>3000) 66 KeyValue=3000; 67 if(KeyValue<0) 68 KeyValue=0; 69 if(num==32767) 70 num=3; 71 } 72 // void KeyScan() 73 //{ 74 // if(K3==0) 75 // { 76 // ShuMaGuanDisplayKeyValue(KeyValue); 77 // if(K3==0) 78 // { 79 // qitingflag=!qitingflag; 80 // while(!K3) 81 // ShuMaGuanDisplayKeyValue(KeyValue); 82 // } 83 // } 84 // } 85 void main()//主函数 86 { 87 Int0Init();//外部中断0初始化函数 88 while(1)//死循环 89 { 90 // KeyScan(); 91 // if(qitingflag==1) 92 ShuMaGuanDisplayKeyValue(KeyValue);//数码管显示数值函数 93 // if(ge>9) 94 // { 95 // ge=0; 96 // shi=shi++; 97 // if(shi>9) 98 // { 99 // shi=0; 100 // bai++; 101 // if(bai>9) 102 // { 103 // bai=0; 104 // qian++; 105 // if(qian>3) 106 // { 107 // qian=3; 108 // } 109 // } 110 // } 111 // } 112 } 113 114 // if(qitingflag==0)//判断启停标志位变量是否为0 115 // { 116 // P2=0Xff;// 117 // P0=0x00;// 118 // KeyValue=0; 119 // } 120 }
模拟EC11系列数字旋转编码器旋转方向改变数值让数码管显示四个数值的项目工程
原文:https://www.cnblogs.com/AChenWeiqiangA/p/12304789.html