第十章Icc C语言例子程序源程序.PDF_第1页
第十章Icc C语言例子程序源程序.PDF_第2页
第十章Icc C语言例子程序源程序.PDF_第3页
第十章Icc C语言例子程序源程序.PDF_第4页
第十章Icc C语言例子程序源程序.PDF_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 1 第十章 I c c A V R C语言的应用, 本章例子程序编号为对应第九章I A R A V R C语言的例子程序编号, 这些例子 程序硬件接口见 ; 第十章编号1 0 . 5 . 1 - 9 为新增例子程序, 这些例子程序均在 S L - A V R 开发实验器上验证通过 / / 第十章例子 1 0 . 3 . 1 读/ 写口 # i n c l u d e v o i d m a i n ( v o i d ) u n s i g n e d c h a r a c h a r ; D D R B = 0 x F F ; D D R D = 0 x 0 0 ; P O R T D = 0 x 0 0 ; f o r ( ; ; ) a c h a r = P I N D ; P O R T B = a c h a r ; / / 第十章例子 1 0 . 3 . 2 延时函数 # i n c l u d e / * 定义 8 5 1 5 * / v o i d d e l a y ( i n t d e l a y V a l u e ) i n t i ; f o r ( i = 0 ; i = 6 0 ) t i m e 1 - = 6 0 ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 40 t i m e 0 + + ; i f ( t i m e 0 = 2 4 ) t i m e 0 - = 2 4 ; h e x t o b c d ( ) ; d i s p l a y ( ) ; / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * T 1 溢出中断 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d t i m e r 1 ( v o i d ) f l a g = 1 ; t i m e 2 + + ; T C N T 1 = 0 x 8 5 e e ; / / 第十章例子 1 0 . 5 . 8 ) c y m o m e t e r 单量程频率计测量范围 0 - 9 9 9 9 9 9 H Z / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * h t t p : / / w w w . s l . c o m . c n 双龙电子公司- - - - 频率计演示程序( I C C A V R ) 作者詹卫前 1 学习定时器 T 1 捕捉( 捕获) 中断的使用 2 学习频率计的设计方法 频率计编程 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 41 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / # i n c l u d e # i n c l u d e # p r a g m a i n t e r r u p t _ h a n d l e r t i m e r 0 : 8 # p r a g m a i n t e r r u p t _ h a n d l e r t i m e r 1 : 4 e x t e r n v o i d d e l a y _ m s ( u n s i g n e d i n t n ) ; / / 引用外部函数 # p r a g m a d a t a : c o d e / * 七段译码字形表 * / c o n s t u n s i g n e d c h a r t a b e l = 0 x 3 f , 0 x 0 6 , 0 x 5 b , 0 x 4 f , 0 x 6 6 , 0 x 6 d , 0 x 7 d , 0 x 0 7 , 0 x 7 f , 0 x 6 f , 0 x 7 7 , 0 x 7 c , 0 x 3 9 , 0 x 5 e , 0 x 7 9 , 0 x 7 1 ; # p r a g m a d a t a : d a t a / * 显示缓冲区 * / u n s i g n e d c h a r l e d b u f f = 0 x 3 f , 0 x 3 f , 0 x 3 f , 0 x 3 f , 0 x 3 f , 0 x 3 f ; u n s i g n e d l o n g c o u n t ; / / 频率测量计数变量 u n s i g n e d i n t t i m e c o u n t ; / / 频率测量闸门控制变量 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 初始化 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d p o r t _ i n i t ( v o i d ) M C U C R = 0 x 0 0 ; D D R D = 0 x 3 f ; D D R B = 0 x f f ; P O R T D = 0 x f f ; P O R T B = 0 x f f ; T I M S K = 0 x 0 a ; / / 开放 T 0 溢出中断和 T 1 捕捉中断 T C C R 0 = 0 x 0 3 ; T C C R 1 A = 0 x 0 0 ; T C C R 1 B = 0 x c 0 ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 42 T C N T 0 = 0 x 8 3 ; t i m e c o u n t = 1 0 0 0 ; / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 六路动态扫描显示电路 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d d i s p l a y ( v o i d ) u n s i g n e d c h a r i ; f o r ( i = 0 ; i 6 ; i + + ) P O R T B = l e d b u f f i ; / / 将显示缓冲区数据送 P O R T B 口 P O R T D = ( 1 i ) ; / / 开始显示 d e l a y _ 1 m s ( ) ; / / 每一位显示保持一定时间 P O R T D | = ( 1 i ) ; / / 关闭显示 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 将 c o u n t 十六进制数据转换为 L E D 七段码 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d h e x t o b c d ( v o i d ) u n s i g n e d c h a r i , t e m p ; f o r ( i = 0 ; i 9 9 9 9 9 9 ) l e d b u f f 0 | = 0 x 8 0 ; c o u n t = 0 ; t i m e c o u n t = 1 0 0 0 ; S E I ( ) ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 44 T C N T 0 = 0 x 8 4 ; / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * T 1 捕捉中断完成脉冲计数 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d t i m e r 1 ( v o i d ) c o u n t + + ; / / 第十章例子 1 0 . 5 . 9 ) I 2 C . c 以单字节模式访问 I 2 C总路线器件 A T 2 4 C 0 2的例子程序 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * h t t p : / / w w w . s l . c o m . c n 双龙电子公司- - - - I 2 C 总线演示程序( I C C A V R ) 作者詹卫前 1 以访问 A T 2 4 C 0 2 为例 2 S D A P O R T A . 0 3 S C L : P O R T A . 1 使用注意1 应包含头文件 s l a v r . h 2 在工程选项中的 A d d i t i o n a l L i b 中填入 s l a v r 使用编译器使用附加库文件 l i b s l a v r . a * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / # i n c l u d e # i n c l u d e / * 七段译码字形表 * / # p r a g m a d a t a : c o d e c o n s t u n s i g n e d c h a r t a b e l = 0 x 3 f , 0 x 0 6 , 0 x 5 b , 0 x 4 f , 0 x 6 6 , 0 x 6 d , 0 x 7 d , 0 x 0 7 , 0 x 7 f , 0 x 6 f , 0 x 7 7 , 0 x 7 c , 0 x 3 9 , 0 x 5 e , 0 x 7 9 , 0 x 7 1 ; # p r a g m a d a t a : d a t a 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 45 / * 显示缓冲区 * / u n s i g n e d c h a r l e d b u f f = 0 x 3 f , 0 x 3 f , 0 x 3 f , 0 x 3 f , 0 x 0 0 , 0 x 0 0 ; u n s i g n e d c h a r a t 2 4 _ a d d , a t 2 4 _ d a t a ; / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 端口初始化 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d p o r t _ i n i t ( v o i d ) D D R D = 0 x 3 f ; D D R B = 0 x f f ; P O R T D = 0 x f f ; P O R T B = 0 x f f ; / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 六路动态扫描显示电路 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d d i s p l a y ( v o i d ) u n s i g n e d c h a r i ; i = a t 2 4 _ d a t a % 1 6 ; l e d b u f f 0 = t a b e l i ; i = a t 2 4 _ d a t a / 1 6 ; l e d b u f f 1 = t a b e l i ; i = a t 2 4 _ a d d % 1 6 ; l e d b u f f 2 = t a b e l i ; i = a t 2 4 _ a d d / 1 6 ; l e d b u f f 3 = t a b e l i ; f o r ( i = 0 ; i 6 ; i + + ) 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 46 P O R T B = l e d b u f f i ; / / 将显示缓冲区数据送 P O R T B 口 P O R T D = ( 1 i ) ; / / 开始显示 d e l a y _ 1 m s ( ) ; / / 每一位显示保持一定时间 P O R T D | = ( 1 i ) ; / / 关闭显示 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 主程序功能演示了读写 A T 2 4 C 0 2 的过程 说明1 键盘上 0 F 键用于输入地址或数据 S H I F T 键用于切换状态 2 上电复位后按数字键只可以修改地 址, 程序自动显示 A T 2 4 C 0 2 单元内容 3 按一次 S H I F T 键最高位 L E D 小数点亮 此时可以修改数字再按一次 S H I F T 键 程序将修改后的数字写入 A T 2 4 C 0 2 然 后回到上电复位后的状态 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d m a i n ( v o i d ) u n s i g n e d c h a r k e y 1 , k e y 2 ; u n s i g n e d c h a r i n d e x , f l a g ; a t 2 4 _ a d d = 0 ; a t 2 4 _ d a t a = 0 ; i n d e x = 0 ; f l a g = 0 ; p o r t _ i n i t ( ) ; / / 端口初始化 w h i l e ( 1 ) k e y 1 = s c a n _ k e y ( ) ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 47 i f ( k e y 1 ! = 0 x 7 f ) d o k e y 2 = s c a n _ k e y ( ) ; / / 检查按键释放 d i s p l a y ( ) ; w h i l e ( k e y 1 = = k e y 2 ) ; i f ( f l a g ! = 0 x 0 0 ) / / S H I F T 键切换数据和地址修改 W r i t e 2 4 c 0 2 ( f l a g = 0 x 0 0 ; e l s e f l a g = 0 x 8 0 ; l e d b u f f 5 = 0 x 0 0 f l a g ; i n d e x = 0 ; e l s e s w i t c h ( i n d e x ) c a s e 0 : i f ( f l a g = = 0 x 0 0 ) k e y 2 = a t 2 4 _ a d d a t 2 4 _ a d d = k e y 2 | ( k e y 1 4 ) ; e l s e k e y 2 = a t 2 4 _ d a t a a t 2 4 _ d a t a = k e y 2 | ( k e y 1 4 ) ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 48 i n d e x = 0 1 ; b r e a k ; c a s e 1 : i f ( f l a g = = 0 x 0 0 ) k e y 2 = a t 2 4 _ a d d a t 2 4 _ a d d = k e y 2 | ( k e y 1 e l s e k e y 2 = a t 2 4 _ d a t a a t 2 4 _ d a t a = k e y 2 | ( k e y 1 i n d e x = 0 0 ; b r e a k ; i f ( f l a g = = 0 x 0 0 ) R e a d 2 4 c 0 2 ( d i s p l a y ( ) ; / / 第十章例子 1 0 . 5 . 9 A ) A T 2 4 C 0 2 . c 调用库函数对 A T 2 4 C 0 2进行读写可以连续多字节读写 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * h t t p : / / w w w . s l . c o m . c n 双龙电子公司- - - - I 2 C 总线演示程序( I C C A V R ) 作者詹卫前 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 49 1 以访问 A T 2 4 C 0 2 为例 2 S D A P O R T A . 0 3 S C L : P O R T A . 1 使用注意1 应包含头文件 s l a v r . h 2 在工程选项中的 A d d i t i o n a l L i b 中填入 s l a v r 使用编译器使用附加库文件 l i b s l a v r . a * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / # i n c l u d e # i n c l u d e / * 七段译码字形表 * / # p r a g m a d a t a : c o d e c o n s t u n s i g n e d c h a r 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 50 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 51 # p r a g m a d a t a : d a t a / * 显示缓冲区 * / u n s i g n e d c h a r l e d b u f f = 0 x 3 f , 0 x 3 f , 0 x 3 f , 0 x 3 f , 0 x 0 0 , 0 x 0 0 ; u n s i g n e d c h a r a t 2 4 _ a d d , a t 2 4 _ d a t a ; / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * I 2 C 总线写一个字节 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d i 2 c _ W r i t e ( u n s i g n e d c h a r W d a t a , u n s i g n e d c h a r R o m A d d r e s s ) S t a r t ( ) ; W r i t e 8 B i t ( 0 x a 0 ) ; T e s t A c k ( ) ; W r i t e 8 B i t ( R o m A d d r e s s ) ; T e s t A c k ( ) ; W r i t e 8 B i t ( W d a t a ) ; T e s t A c k ( ) ; S t o p ( ) ; d e l a y _ m s ( 1 0 ) ; / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * I 2 C 总线读一个字节 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / u n s i g n e d c h a r i 2 c _ R e a d ( u n s i g n e d c h a r R o m A d d r e s s ) u n s i g n e d c h a r t e m p ; S t a r t ( ) ; W r i t e 8 B i t ( 0 x a 0 ) ; T e s t A c k ( ) ; W r i t e 8 B i t ( R o m A d d r e s s ) ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 52 T e s t A c k ( ) ; S t a r t ( ) ; W r i t e 8 B i t ( 0 x a 1 ) ; T e s t A c k ( ) ; t e m p = R e a d 8 B i t ( ) ; N o A c k ( ) ; S t o p ( ) ; r e t u r n t e m p ; / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 端口初始化 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d p o r t _ i n i t ( v o i d ) D D R D = 0 x 3 f ; D D R B = 0 x f f ; P O R T D = 0 x f f ; P O R T B = 0 x f f ; / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 六路动态扫描显示电路 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d d i s p l a y ( v o i d ) u n s i g n e d c h a r i ; i = a t 2 4 _ d a t a % 1 6 ; l e d b u f f 0 = t a b e l i ; i = a t 2 4 _ d a t a / 1 6 ; l e d b u f f 1 = t a b e l i ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论