1、51单片机c语言程序集锦#include #include /每65536 时钟循环设置断点static unsigned long overflow_count = 0;void timer0_ISR (void) interrupt 1overflow_count+; / 溢出记数 /MAIN Cvoid main (void)/设置16位模式,溢出中断TMOD = (TMOD & 0xF0) | 0x01; / T/C0 模式 ET0 = 1; / 开T0 中断 TR0 = 1; / 开T0计数 EA = 1; / 开中断 while (1) /循环 #include unsigned
2、char ex0_isr_counter = 0;void ex0_isr (void) interrupt 0ex0_isr_counter+; / Increment the countvoid main (void)Configure INT0 (external interrupt 0) to generatean interrupt on the falling-edge of /INT0 (P3.2).Enable the EX0 interrupt and then enable theglobal interrupt flag.IT0 = 1; / Configure inte
3、rrupt 0 for falling edge on /INT0 (P3.2)EX0 = 1; / Enable EX0 InterruptEA = 1; / Enable Global Interrupt FlagWait forever.while (1) Io口输出/点亮P1口的一个灯#include/*-MAIN C Function-*/void main (void)P1 = 0xFF; /灯全不灭掉while (1) /主循环 P1 = 0xfe; /P1口的最低位点亮,可以更改数值是其他的灯点亮 /按下P3口的按键,P1显示相应的位置,IO读写操作程序#includesbit
4、 KEY = P30;/定义按键的接口sbit LED = P10;/定义灯的接口/*-MAIN C Function-*/void main (void)P1 = 0xFF; /所有的灯灭while (1) LED = KEY; /灯的状态由按键的状态决定 /按下P3口的按键,P1显示相应的位置,IO读写操作程序sfr P1 = 0x90; /* SFR definition for Port 1 */sfr P3 = 0xB0; /* SFR definition for Port 3 */*-MAIN C Function-*/void main (void)unsigned char
5、pval; /* temp variable for port values */P1 = 0xFF; /* Setup P1 for Input */*-Use the Toolbox buttons in the debuggerto change the value of P1. Open thePort 1 and Port 3 dialogs from thePeripherals Menu to view their status.-*/while (1) pval = P3; /* Read P1 into pval */ P1 = pval; /* Write pval to
6、P3 */ 跑马灯#include /void delay(unsigned int cnt) /简单的延时 while(-cnt);/main() P1=0xfe;/给初始化值 while(1) delay(30000);/delay at crystal frequency in 12MHz P1=1;/左移一位 P1|=0x01;/最后一位补1 if(P1=0x7f)/检测是否移到最左端? delay(30000);/delay P1=0xfe; 定时器0#includesbit LED=P12;void Init_Timer0(void) TMOD |= 0x01; TH0=0x00;
7、 /* Init value */ TL0=0x00; EA=1; /* interupt enable */ ET0=1; /* enable timer0 interrupt */ TR0=1; main() Init_Timer0(); while(1);void Timer0_isr(void) interrupt 1 using 1 TH0=0x00; /* Init value */ TL0=0x00; LED=LED;/指示灯反相定时器1/*copyright 2009,Sheng zhen JinChuang Electronic Technology co.,Ltd * *T
8、his sample is used for Timer1 16bit timer mode. * *write by Shifang 2009-4-23 * *V1.1 */#includesbit LED=P12;void Init_Timer1(void) TMOD |= 0x10; TH1=0x00; /* Init value */ TL1=0x00; EA=1; /* interupt enable */ ET1=1; /* enable timer1 interrupt */ TR1=1; main() Init_Timer1(); while(1);void Timer1_is
9、r(void) interrupt 3 using 1 TH1=0x00; /* Init value */ TL1=0x00; LED=LED;定时器2/*copyright 2009,Sheng zhen JinChuang Electronic Technology co.,Ltd * *This sample is used for Timer1 16bit timer mode. * *write by Shifang 2009-4-23 * *V1.1 */#includesbit LED=P12;void TIM2Inital(void) RCAP2H = (65536-6000
10、0)/256;/12M 10ms 16bit 自动重载 RCAP2L = (65536-60000)%256; ET2=1; EA=1; TR2=1;main() TIM2Inital(); while(1);void Timer0_isr(void) interrupt 1 using 1 TH0=0x00; /* Init value */ TL0=0x00; LED=LED;/指示灯反相void TIM2(void) interrupt 5 using 1/定时器2中断 TF2=0; LED=LED;/指示灯反相 中段/按键中断程序#includemain() P1=0x55;/P1口初
11、始值 EA=1;/全局中断开 EX0=1;/外部中断0开 IT0=1;/边沿触发 while(1) void ISR_Key(void) interrupt 0 using 1 P1=P1;/s3按下触发一次,P1取反一次实时时钟#include #include sbit SCK=P36; sbit SDA=P34; sbit RST = P35; / DS1302复位bit ReadRTC_Flag=1;unsigned char l_tmpdate7=0,0,12,15,4,3,9;/秒分时日月周年08-05-15 12:00:00unsigned char l_tmpdisplay8;
12、code unsigned char write_rtc_address7=0x80,0x82,0x84,0x86,0x88,0x8a,0x8c; /秒分时日月周年 最低位读写位code unsigned char read_rtc_address7=0x81,0x83,0x85,0x87,0x89,0x8b,0x8d; code unsigned char table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff; /共阴数码管 0-9 - 熄灭表code unsigned char table1=0xfe,0xfd,
13、0xfb,0xf7,0xef,0xdf,0xbf,0x7f; /显示位码表 void Write_Ds1302_byte(unsigned char temp); void Write_Ds1302( unsigned char address,unsigned char dat );unsigned char Read_Ds1302 ( unsigned char address );void Read_RTC(void);/read RTC void Set_RTC(void); /set RTC void InitTIMER0(void);/inital timer0 void main
14、(void) InitTIMER0(); /Set_RTC(); while(1) if(ReadRTC_Flag) ReadRTC_Flag=0; Read_RTC(); switch (l_tmpdate0/5) /设计每个5秒 交替显示 年月日 时分秒 case 0: case 2: case 4: case 6: case 8: case 10: l_tmpdisplay0=l_tmpdate2/16; /数据的转换,因我们采用数码管09的显示,将数据分开 l_tmpdisplay1=l_tmpdate2&0x0f; l_tmpdisplay2=10; /加入- l_tmpdispla
15、y3=l_tmpdate1/16; l_tmpdisplay4=l_tmpdate1&0x0f; l_tmpdisplay5=10; l_tmpdisplay6=l_tmpdate0/16; l_tmpdisplay7=l_tmpdate0&0x0f; break; case 1: case 3: case 5: case 7: case 9: case 11: l_tmpdisplay0=l_tmpdate6/16; l_tmpdisplay1=l_tmpdate6&0x0f; l_tmpdisplay2=10; l_tmpdisplay3=l_tmpdate4/16; l_tmpdispl
16、ay4=l_tmpdate4&0x0f; l_tmpdisplay5=10; l_tmpdisplay6=l_tmpdate3/16; l_tmpdisplay7=l_tmpdate3&0x0f; break; default: break; void InitTIMER0(void) TMOD|=0x01;/定时器设置 16位 TH0=0xef;/初始化值 TL0=0xf0; ET0=1; TR0=1; EA=1;void Write_Ds1302_Byte(unsigned char temp) unsigned char i; for (i=0;i=1; /右移一位 SCK=1; /*/
17、void Write_Ds1302( unsigned char address,unsigned char dat ) RST=0; _nop_(); SCK=0; _nop_(); RST=1; _nop_(); /启动 Write_Ds1302_Byte(address); /发送地址 Write_Ds1302_Byte(dat); /发送数据 RST=0; /恢复/*/unsigned char Read_Ds1302 ( unsigned char address ) unsigned char i,temp=0x00; RST=0; _nop_(); SCK=0; _nop_();
18、 RST=1; _nop_(); Write_Ds1302_Byte(address); for (i=0;i=1; /右移一位 SCK=1; RST=0; _nop_(); /以下为DS1302复位的稳定时间 RST=0; SCK=0; _nop_(); SCK=1; _nop_(); SDA=0; _nop_(); SDA=1; _nop_(); return (temp); /返回/*/void Read_RTC(void) /读取 日历 unsigned char i,*p; p=read_rtc_address; /地址传递 for(i=0;i7;i+) /分7次读取 秒分时日月周年
19、 l_tmpdatei=Read_Ds1302(*p); p+; /*/void Set_RTC(void) /设定 日历 unsigned char i,*p,tmp; for(i=0;i7;i+) /BCD处理 tmp=l_tmpdatei/10; l_tmpdatei=l_tmpdatei%10; l_tmpdatei=l_tmpdatei+tmp*16; Write_Ds1302(0x8E,0X00); p=write_rtc_address; /传地址 for(i=0;i7;i+) /7次写入 秒分时日月周年 Write_Ds1302(*p,l_tmpdatei); p+; Writ
20、e_Ds1302(0x8E,0x80);void tim(void) interrupt 1 using 1/中断,用于数码管扫描 static unsigned char i,num; TH0=0xf5; TL0=0xe0; P0=tablel_tmpdisplayi; /查表法得到要显示数字的数码段 P2=table17-i; i+; if(i=8) i=0; num+; if(10=num) /隔段时间读取1302的数据。时间间隔可以调整 ReadRTC_Flag=1; /使用标志位判断 num=0; 鸿鸣灯/*copyright 2009,Shen zhen JinChuang Ele
21、ctronic Technology co.,Ltd * *This sample is used for Timer1 16bit timer mode. * *write by Shifang 2009-4-23 * *V1.1 */#includesbit SPK=P12;/定义蜂鸣器端口void delay(unsigned int cnt)/延时 while(-cnt);main()unsigned int i; while(1) for(i=0;i200;i+)/喇叭发声的时间循环,改变大小可以改变发声时间长短 delay(80);/参数决定发声的频率,估算值 SPK=!SPK; SPK=1; /喇叭停止工作,间歇的时间,可更改 delay(20000);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1