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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

单片机例程.docx

1、单片机例程试验数码管上显示数字( 单片机直接实现位选 共阴极) *连接方法:P0与J12 用8PIN排线连接 P1与JP16 用排线连接 请学员认真消化本例程,用573锁存器控制和单片机脚直接位选控制(非译码器控制)数码管 #include #include void delay(unsigned int i); /函数声名char DelayCNT;/定义变量 /此表为 LED 的字模, 共阴数码管 0-9 - unsigned char code Disp_Tab = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; /段码控制

2、/此表为8个数码管位选控制, 共阴数码管 1-8个 - unsigned char code dispbit8=0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F; /位选控制 查表的方法控制/*主函数*/ main() unsigned int i,LedNumVal=1 ; /变量定义 unsigned int LedOut10; /变量定义 DelayCNT=0;while(1) if(+DelayCNT=20) /控制数字变化速度 DelayCNT=0; /20个扫描周期清零一次 +LedNumVal; /每隔20个扫描周期加一次LedOut0=Disp_T

3、abLedNumVal%10000/1000; LedOut1=Disp_TabLedNumVal%1000/100|0x80; LedOut2=Disp_TabLedNumVal%100/10; LedOut3=Disp_TabLedNumVal%10; LedOut4=Disp_TabLedNumVal%10000/1000; /千位 LedOut5=Disp_TabLedNumVal%1000/100|0x80; /百位带小数点 LedOut6=Disp_TabLedNumVal%100/10; /十位 LedOut7=Disp_TabLedNumVal%10; /个位 for( i=0

4、; i 0; i-) for(j = 200; j 0; j-);试验数码管上显示数字(译码器位选 共阴极) * 连接方法:P0与J12 用8PIN排线连接 * 请学员认真消化本例程,用573锁存器和译码器控制和数码管 #include #include sbit LS138A = P22; /定义138译码器的输入A脚由P2.2控制 sbit LS138B = P23; /定义138译码器的输入脚B由P2.3控制sbit LS138C = P24; /定义138译码器的输入脚C由P2.4控制void delay(unsigned int i); /函数声名char DelayCNT; /此表

5、为 LED 的字模, 共阴数码管 0-9 - unsigned char code Disp_Tab = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; /*主函数*/ main() unsigned int i,LedNumVal=1 ; unsigned int LedOut10; DelayCNT=0; while(1) /进入循环状态 if(+DelayCNT=50) DelayCNT=0; /延时计数 每扫描一次加一次 +LedNumVal; /每隔50个扫描周期加一次 LedOut0=Disp_TabLedNumVal

6、%10000/1000; LedOut1=Disp_TabLedNumVal%1000/100|0x80; LedOut2=Disp_TabLedNumVal%100/10; LedOut3=Disp_TabLedNumVal%10; LedOut4=Disp_TabLedNumVal%10000/1000; /千位 LedOut5=Disp_TabLedNumVal%1000/100|0x80; /百位带小数点 LedOut6=Disp_TabLedNumVal%100/10; /十位 LedOut7=Disp_TabLedNumVal%10; /个位 for( i=0; i 0; i-)

7、for(j = 200; j 0; j-);1位数码管上显示外部中断计数* 连接方法:P0与JP3 P3与JP5 用8PIN排线连接 P3.2外部中断输入* 请学员认真消化本例程,用单片机脚直接控制数码管和外部中断使用 #include #include unsigned int LedNumVal;unsigned char code Disp_Tab = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0xbf,0xc7,0x8c,0xc1, 0xff, 0xf7 ; /* 主程序 */v

8、oid main(void) / IT0=0; /低电平触发 IT0=1; /下降沿触发 EA=1; EX0=1; while(1) P0=Disp_TabLedNumVal%10; /* INT0中断函数 */void counter(void) interrupt 0 EX0=0; LedNumVal+; /中断计数 EX0=1; 试验4位数码管上显示外部中断计数* 连接方法:P0与J12 P3与JP5 用8PIN排线连接 P3.2外部中断输入 JP15和JP16用8个短路冒连上 * 请学员认真消化本例程,用单片机通过译码器控制数码管和外部中断使用 *#include #include s

9、bit LS138A=P22; sbit LS138B=P23;sbit LS138C=P24; unsigned int LedNumVal = 0 ,LedOut8;unsigned char code Disp_Tab = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0xbf,0xc7,0x8c,0xc1, 0xff, 0xf7 ; void delay(unsigned int i)char j; for(i; i 0; i-) for(j = 200; j 0; j-);disp

10、lay() unsigned char i;LedOut0=Disp_TabLedNumVal%10000/1000; LedOut1=Disp_TabLedNumVal%1000/100&0x7f; LedOut2=Disp_TabLedNumVal%100/10; LedOut3=Disp_TabLedNumVal%10; for( i=0; i8; i+) P0 = LedOuti; switch(i) case 0:LS138A=0; LS138B=0; LS138C=0; break; case 1:LS138A=1; LS138B=0; LS138C=0; break; case

11、2:LS138A=0; LS138B=1; LS138C=0; break; case 3:LS138A=1; LS138B=1; LS138C=0; break; case 4:LS138A=0; LS138B=0; LS138C=1; break; case 5:LS138A=1; LS138B=0; LS138C=1; break; case 6:LS138A=0; LS138B=1; LS138C=1; break; case 7:LS138A=1; LS138B=1; LS138C=1; break; delay(150); /* 主程序 */void main(void) P0=0

12、xff; P1=0xff; P2=0xff; / IT0=0; /低电平触发 IT0=1; /下降沿触发 EA=1; EX0=1;while(1) display(); /* INT0中断函数 */void counter(void) interrupt 0 / unsigned char x; EX0=0; LedNumVal+; /中断计数 EX0=1;试验数码管显示时钟* 通过本例程了解 DS1302时钟芯片的基本原理和使用 ,理解并掌握DS1302时钟芯片 驱动程序的编写以及实现数字字符在数码管中的显示。 注意:JP1302跳线冒要短接。 请学员认真消化本例程,懂DS1302在C语言中

13、的操作 #include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include sbit SCK=P36; /时钟 sbit SDA=P34; /数据 sbit RST = P35;/ DS1302复位sbit LS138A=P22; sbit LS138B=P23;sbit LS138C=P24; bit ReadRTC_Flag;/定义读DS1302标志unsigned char l_tmpdate7=0,0,12,15,5,3,8;/秒分时日月周年08-05-15 12:00:00unsigned char l_tmpdisplay8;code unsigne

14、d 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=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; /共阴数码管 0-9 - 熄灭表/*/* 函数声明 */*/ void Write_Ds1302_byte(unsigned char t

15、emp); 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(void) InitTIMER0(); /初始化定时器0 Set_RTC(); /写入时钟值,如果使用备用电池时候,不需要没每

16、次上电写入,此程序应该屏蔽 while(1) if(ReadRTC_Flag) ReadRTC_Flag=0; Read_RTC(); l_tmpdisplay0=l_tmpdate2/16; /数据的转换,因我们采用数码管09的显示,将数据分开 l_tmpdisplay1=l_tmpdate2&0x0f; l_tmpdisplay2=10; /加入- l_tmpdisplay3=l_tmpdate1/16; l_tmpdisplay4=l_tmpdate1&0x0f; l_tmpdisplay5=10; l_tmpdisplay6=l_tmpdate0/16; l_tmpdisplay7=l

17、_tmpdate0&0x0f; /*/* 定时器0初始化 */*/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; /*/* 写入DS1302 */*/void Write_Ds1302( unsigned char address,unsigned char dat )

18、 RST=0; _nop_(); SCK=0; _nop_(); RST=1; _nop_(); /启动 Write_Ds1302_Byte(address); /发送地址 Write_Ds1302_Byte(dat); /发送数据 RST=0; /恢复/*/* 读出DS1302数据 */*/unsigned char Read_Ds1302 ( unsigned char address ) unsigned char i,temp=0x00; RST=0; _nop_(); _nop_(); SCK=0; _nop_(); _nop_(); RST=1; _nop_(); _nop_();

19、 Write_Ds1302_Byte(address); for (i=0;i=1; /右移一位 _nop_(); _nop_(); _nop_(); SCK=1; RST=0; _nop_(); /以下为DS1302复位的稳定时间 _nop_(); RST=0; SCK=0; _nop_(); _nop_(); _nop_(); _nop_(); SCK=1; _nop_(); _nop_(); SDA=0; _nop_(); _nop_(); SDA=1; _nop_(); _nop_(); return (temp); /返回/*/* 读时钟数据 */*/void Read_RTC(vo

20、id) /读取 日历 unsigned char i,*p; p=read_rtc_address; /地址传递 for(i=0;i7;i+) /分7次读取 秒分时日月周年 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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1