[51单片机C语言编程]代码如下: typedef union { unsigned int myvalue; struct{ unsigned myvalueL:8; unsigned myvalueH:8; }child; }_mytype; _mytype mytype; void main() { mytype.myvalue...+阅读
首先,PB0只是一个普通IO,它只能判断高低电平,要是换成C口(AD转换口)倒是可以,另外,PC4也不是PWM口,MEGA48和MEGA8基本上一样,都只有3路PWM。当然,你可以把PB0接一个按键,每按一次,占空比对应变化一个值。给你一个小程序,希望你能用的上: #include #include #define uchar unsigned char #define uint unsigned int #define key1 (PINB&0x01) #define key2 (PINB&0x02) #define beep_on PORTD|=0x02 #define beep_off PORTD&=0xfd #define xtal 8 void beep_three(void); char t=0; void delay_1ms(void) { uint i; for(i=0;i<(xtal*143-2);i++) { NOP(); } } void delay_ms(uint k) { uint i=0; while(i=244) { if(key1==0) {delay_ms(20); if(key1==0) { t=255; OCR2=t; beep_three(); delay_ms(200); } } } } void scan_s2(void) { if(t>4) {if(key2==0); { if(key2==0) { beep_on; delay_ms(100); beep_off; t=t-5; OCR2=t; delay_ms(200); } } } else //if(t==0) { if(key2==0) {delay_ms(20); if(key2==0) { OCR2=0; beep_three(); delay_ms(200); } } } } void beep_three(void) { beep_on; delay_ms(95); beep_off; delay_ms(95); beep_on; delay_ms(95); beep_off; delay_ms(95); beep_on; delay_ms(95); beep_off; } void scan_key(void) { scan_s1(); scan_s2(); } void timer2_init(void) { TCCR2 = 0x00; //停止定时器 ASSR = 0x00; //异步时钟模式 TCNT2 = 0x00; //初始值 TIMSK |= 0x00; //中断允许 TCCR2 = 0x61; //启动定时器 } void init_devices(void) { CLI(); //禁止所有中断 MCUCR = 0x00; MCUCSR = 0x80; //禁止JTAG GICR = 0x00; port_init(); timer2_init(); SEI(); //开全局中断 } void main(void) { init_devices(); while(1) { scan_key(); } }
延伸阅读:
单片机 C语言程序P1=1<<j++;这句错了,<<;这个是左移,而不是循环左移 改为这样就可以了 #include <reg52.h> #include<intrins.h> typedef unsigned int uint16; typedef unsigned char uint8;...
单片机C语言编程/*该程序流水灯有两种模式,顺序左移和顺序右移,独立开关控制*/ #include #include #define uchar unsigned char #define uint unsigned int uchar tmp,flag; sbit key1=P3^4;...
C语言单片机编程首先开总中断EA=1; 在开外部中断EX0=1; 在选择触发法式IT0=1;(IT0=0表示为电平触发,IT0=1表示为边沿触发) 写个大概的程序你看看 #include void init() { EA=1//开总中断 EX0...