ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:18.61KB ,
资源ID:11623067      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11623067.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(51单片机c语言程序集锦.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

51单片机c语言程序集锦.docx

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