robinsonlin 发表于 2018-12-26 10:13 如下。麻烦看一下 是不是哪里有问题 #include<reg52.h> #define uint unsigned int #define uchar unsigned char uchar time; double count=50; //定义占空比,并初始占空比为50% sbit PWM=P3^0; //P2^0口输出PWM sbit zkb_add=P3^6; //占空比增加的按键 的I/O口 sbit zkb_dec=P3^7; //占空比减小 的按键 的I/O口 sbit dula=P2^2; sbit wela=P2^3; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阴极数码管0~9编码 /************函数声明**************/ void delayms(uint z); //延时 void keyscan(); //扫描按键 void timer0_init(); //定时器0初始化 /****************延时处理**********************/ void delayms(uint z) //延时xms程序 { uint x,y; for(y=z;x>0;x--) for(y=110;y>0;y--); } /*******数码管显示占空比********************/ void display_pwm(int num)//占空比显示 { uchar shi; shi=num/10; dula=0; P1=table[shi]; delayms(10); dula=1; wela=0; P1=table[0]; delayms(10); wela=1; } void keyscan() //按键扫描 { if(zkb_add==0) { delayms(1); count=count+10; //每按一次占空比增加按键占空比加10% if(count>=100) //限定占空比上限 { count=0; } } if(zkb_dec==0) { delayms(1); count=count-10; //每按一次占空比减小按键占空比减10% if(count<0) //限定占空比下限 { count=100; } } } /***********定时器0初始化***********/ void timer0_init() { TMOD=0x01; //定时器0工作于方式1 TH0=(65536-10)/256; TL0=(65536-10)%256; TR0=1; ET0=1; EA=1; } /**************定时0中断处理******************/ void timer0_int() interrupt 1 { TR0=0; //设置定时器初值期间,关闭定时器 TH0=(65536-10)/256; TL0=(65536-10)%256; TR0=1; time++; if(time<count) //count为占空比 { PWM=1; //输出高电平 } else PWM=0; if(time>=100) { time=0; } display_pwm(count); } /*********主函数********************/ void main() { timer0_init(); delayms(1); while(1) { keyscan(); } } |
那你就得把程序贴出来,大家才能知道问题在哪里呀 |
devcang 发表于 2018-12-26 00:11 经过检查 图没有问题 现在问题就是段选和位选编程那部分 只用一个段选就好用 用两个就出问题 |
网上代码多的很,自己去百度查找下就清除了,就是7个IO口01控制一个数码管。 |
先找一段代码,看一下,就清楚了。。。。。。。 |