第十章Icc C语言例子程序源程序.PDF

0596、《AVR高速嵌入式单片机原理与应用》

收藏

资源目录
跳过导航链接。
压缩包内文档预览:(预览前20页/共56页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:6127029    类型:共享资源    大小:15.36MB    格式:ZIP    上传时间:2017-11-24 上传人:超****计 IP属地:浙江
4.8
积分
关 键 词:
avr 高速 嵌入式 单片机 原理 应用 利用 运用
资源描述:
0596、《AVR高速嵌入式单片机原理与应用》,avr,高速,嵌入式,单片机,原理,应用,利用,运用
内容简介:
第十章 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 d e l a y V a l u e ; i + + ) ; v o i d m a i n ( v o i d ) u n s i g n e d c h a r r u n n e r = 0 x 0 1 ; D D R B = 0 x f f ; / * P o r t B 输出 * / 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 2 f o r ( ; ; ) / * 死循环 * / i f ( r u n n e r ) r u n n e r = 1 ; e l s e r u n n e r = 0 x 0 1 ; P O R T B = r u n n e r ; d e l a y ( 3 2 7 6 7 ) ; / / 第十章例子 1 0 . 3 . 3 读/ 写 E E P R O M / / T h e s e w o r k f o r d e v i c e s w i t h m o r e t h a n 2 5 6 b y t e s o f E E P R O M / / i n t E E P R O M w r i t e ( i n t l o c a t i o n , u n s i g n e d c h a r ) ; / / u n s i g n e d c h a r E E P R O M r e a d ( i n t ) ; # i n c l u d e # 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 t e m p = 0 x a a , i ; E E P R O M w r i t e ( 0 x 2 0 , t e m p ) ; / * 写 E 2 P R O M 地址 0 x 2 0 * / i = E E P R O M r e a d ( 0 x 2 0 ) ; / * 读 E 2 P R O M 地址 0 x 2 0 * / i + + ; E E P R O M w r i t e ( 0 x 3 0 , i ) ; / / 第十章例子 1 0 . 3 . 4 A V R的 P B口变速移位 # i n c l u d e # d e f i n e B I T ( x ) ( 1 ( x ) ) 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 3 v o i d d e l a y ( v o i d ) u n s i g n e d c h a r i , j ; f o r ( i = 1 ; i ; i + + ) f o r ( j = 1 ; j ; j + + ) ; v o i d l e d _ p b ( v o i d ) u n s i g n e d c h a r i ; D D R B = 0 x f f ; f o r ( i = 0 ; i 8 ; i + + ) P O R T B = B I T ( i ) ; d e l a y ( ) ; v o i d m a i n ( v o i d ) w h i l e ( 1 ) l e d _ p b ( ) ; / / 第十章例子 1 0 . 3 . 5 4个口 L E D亮灯变速移位 # i n c l u d e # d e f i n e B I T ( x ) ( 1 ( x ) ) v o i d d e l a y ( u n s i g n e d c h a r d e l a y V a l u e ) u n s i g n e d c h a r i , j ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 4 f o r ( i = 0 ; i d e l a y V a l u e ; i + + ) f o r ( j = 1 ; j ; j + + ) ; v o i d l e d _ p b ( u n s i g n e d c h a r t ) u n s i g n e d c h a r i ; D D R B = 0 x f f ; f o r ( i = 0 ; i 8 ; i + + ) P O R T B = B I T ( i ) ; d e l a y ( t ) ; P O R T B = 0 x f f ; v o i d l e d _ p d ( u n s i g n e d c h a r t ) u n s i g n e d c h a r i ; D D R D = 0 x f f ; f o r ( i = 0 ; i 8 ; i + + ) P O R T D = B I T ( i ) ; d e l a y ( t ) ; P O R T D = 0 x f f ; v o i d l e d _ p c ( u n s i g n e d c h a r t ) u n s i g n e d c h a r i ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 5 D D R C = 0 x f f ; f o r ( i = 0 ; i 0 ; i - - ) P O R T A = B I T ( i - 1 ) ; d e l a y ( t ) ; P O R T A = 0 x f f ; v o i d m a i n ( v o i d ) u n s i g n e d c h a r d t ; w h i l e ( 1 ) f o r ( d t = 5 ; d t 2 0 0 ; d t + = 2 5 ) l e d _ p b ( d t ) ; l e d _ p d ( d t ) ; l e d _ p c ( d t ) ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 6 l e d _ p a ( d t ) ; / / 第十章例子 1 0 . 3 . 6 音符声程序 # i n c l u d e / * 预处理命令 * / # d e f i n e u c h a r u n s i g n e d c h a r # d e f i n e u i n t u n s i g n e d i n t v o i d d e l a y ( u c h a r t ) u c h a r i , j ; f o r ( i = 0 ; i t ; i + + ) f o r ( j = 1 ; j 1 5 0 ; j + + ) ; v o i d s o u n d _ p c 0 ( u c h a r t ) u i n t i ; D D R C = 0 x f f ; P O R T C = 0 x f f ; f o r ( i = 0 ; i 3 5 0 - t * t ; i + + ) P O R T C = 0 x 0 1 ; d e l a y ( t ) ; v o i d m a i n ( v o i d ) 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 7 u c h a r d t ; f o r ( ; ; ) f o r ( d t = 1 ; d t 1 4 ; d t + + ) s o u n d _ p c 0 ( d t ) ; / / 第十章例子 1 0 . 3 . 7 8字循环移位显示程序 # i n c l u d e # d e f i n e u c h a r u n s i g n e d c h a r # d e f i n e u i n t u n s i g n e d i n t v o i d d e l a y ( u i n t t ) u i n t i ; f o r ( i = 0 ; i t ; i + + ) ; v o i d i n i t _ d i s p ( v o i d ) D D R B = 0 x f f ; D D R D = 0 x f f ; P O R T B = 0 x 7 f ; v o i d s c a n ( v o i d ) u c h a r i , j ; f o r ( i = 0 ; i 6 ; i + + ) 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 8 j = 1 5 0 ; d o P O R T D = ( 0 x 0 1 i ) ; d e l a y ( 1 5 0 ) ; P O R T D = 0 x f f ; d e l a y ( 2 1 0 0 ) ; w h i l e ( - - j ) ; v o i d m a i n ( v o i d ) i n i t _ d i s p ( ) ; f o r ( ; ; ) s c a n ( ) ; / / 第十章例子 1 0 . 3 . 8 按键加计数显示程序 # i n c l u d e # d e f i n e u c h a r u n s i g n e d c h a r # d e f i n e u i n t u n s i g n e d i n t c o n s t u c h a r D A T A _ 7 S E G = 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 ; / * L E D 字形表* / u c h a r l e d 6 ; u i n t c o u n t ; v o i d d e l a y ( u i n t t ) 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 9 u i n t i ; f o r ( i = 0 ; i t ; i + + ) ; v o i d i n i t _ d i s p ( v o i d ) D D R B = 0 x f f ; D D R D = 0 x 7 f ; P O R T D | = 0 x 8 0 ; v o i d d i s p ( v o i d ) u c h a r i ; f o r ( i = 0 ; i 6 ; i + + ) P O R T D = ( 0 x 0 1 i ) ; P O R T B = D A T A _ 7 S E G l e d i ; d e l a y ( 1 0 0 0 ) ; P O R T B = 0 x 0 0 ; P O R T D = 0 x f f ; v o i d b e _ p c 0 ( v o i d ) u i n t i ; D D R C | = 0 x 0 1 ; f o r ( i = 0 ; i 3 5 0 ; i + + ) P O R T C = 0 x 0 1 ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 10 d e l a y ( 3 5 0 ) ; v o i d c o n v ( v o i d ) l e d 5 = 0 ; l e d 4 = c o u n t / 1 0 0 0 0 ; l e d 3 = c o u n t / 1 0 0 0 % 1 0 ; l e d 2 = c o u n t / 1 0 0 % 1 0 ; l e d 1 = c o u n t / 1 0 % 1 0 ; l e d 0 = c o u n t % 1 0 ; v o i d m a i n ( v o i d ) i n i t _ d i s p ( ) ; c o u n t = 0 ; c o n v ( ) ; f o r ( ; ; ) w h i l e ( ( P I N D & 0 x 8 0 ) = = 0 x 8 0 ) d i s p ( ) ; b e _ p c 0 ( ) ; c o u n t + + ; c o n v ( ) ; w h i l e ( ( P I N D & 0 x 8 0 ) = = 0 ) d i s p ( ) ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 11 / / 第十章例子 1 0 . 4 . 1 锯齿波程序 # i n c l u d e # d e f i n e u c h a r u n s i g n e d c h a r v o i d d e l a y ( v o i d ) v o i d m a i n ( v o i d ) u c h a r c ; D D R A = 0 x f f ; f o r ( ; ; ) P O R T A = c + + ; d e l a y ( ) ; / / 第十章例子 1 0 . 4 . 2 正三角波程序 # i n c l u d e # i n c l u d e # d e f i n e u c h a r u n s i g n e d c h a r # d e f i n e u i n t u n s i g n e d i n t v o i d d e l a y ( v o i d ) v o i d m a i n ( v o i d ) 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 12 u c h a r c ; D D R A = 0 x f f ; f o r ( ; ; ) f o r ( c = 0 x 0 0 ; c 0 x 0 0 ; c - - ) P O R T A = c ; d e l a y ( ) ; / / 第十章例子 1 0 . 4 . 3 梯形波程序 # i n c l u d e # d e f i n e u c h a r u n s i g n e d c h a r # d e f i n e u i n t u n s i g n e d i n t v o i d d e l a y ( u c h a r t ) u c h a r i ; f o r ( i = 0 ; i t ; i + + ) ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 13 v o i d m a i n ( v o i d ) u c h a r c ; D D R A = 0 x f f ; f o r ( ; ; ) f o r ( c = 0 x 0 0 ; c 0 x 0 0 ; c - - ) P O R T A = c ; d e l a y ( 2 5 5 ) ; / / 第十章例子 1 0 . 4 . 4 正弦波程序 # i n c l u d e # d e f i n e u c h a r u n s i g n e d c h a r # d e f i n e u i n t u n s i g n e d i n t c o n s t u c h a r s i n t a b = 1 2 8 , 1 3 0 , 1 3 2 , 1 3 5 , 1 3 7 , 1 3 9 , 1 4 1 , 1 4 3 , 1 4 6 , 1 4 8 , 1 5 0 , 1 5 2 , 1 5 4 , 1 5 7 , 1 5 9 , 1 6 1 , 1 6 3 , 1 6 5 , 1 6 7 , 1 6 9 , 1 7 1 , 1 7 4 , 1 7 6 , 1 7 8 , 1 8 0 , 1 8 2 , 1 8 4 , 1 8 6 , 1 8 8 , 1 9 0 , 1 9 1 , 1 9 3 , 1 9 5 , 1 9 7 , 1 9 9 , 2 0 1 , 2 0 3 , 2 0 4 , 2 0 6 , 2 0 8 , 2 1 0 , 2 1 1 , 2 1 3 , 2 1 5 , 2 1 6 , 2 1 8 , 2 1 9 , 2 2 1 , 2 2 2 , 2 2 4 , 2 2 5 , 2 2 7 , 2 2 8 , 2 2 9 , 2 3 1 , 2 3 2 , 2 3 3 , 2 3 5 , 2 3 6 , 2 3 7 , 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 14 2 3 8 , 2 3 9 , 2 4 0 , 2 4 1 , 2 4 2 , 2 4 3 , 2 4 4 , 2 4 5 , 2 4 6 , 2 4 7 , 2 4 7 , 2 4 8 , 2 4 9 , 2 4 9 , 2 5 0 , 2 5 1 , 2 5 1 , 2 5 2 , 2 5 2 , 2 5 3 , 2 5 3 , 2 5 3 , 2 5 4 , 2 5 4 , 2 5 4 , 2 5 5 , 2 5 5 , 2 5 5 , 2 5 5 , 2 5 5 , 2 5 5 , 2 5 5 , 2 5 5 , 2 5 5 , 2 5 5 , 2 5 5 , 2 5 4 , 2 5 4 , 2 5 4 , 2 5 3 , 2 5 3 , 2 5 3 , 2 5 2 , 2 5 2 , 2 5 1 , 2 5 1 , 2 5 0 , 2 4 9 , 2 4 9 , 2 4 8 , 2 4 7 , 2 4 7 , 2 4 6 , 2 4 5 , 2 4 4 , 2 4 3 , 2 4 2 , 2 4 1 , 2 4 0 , 2 3 9 , 2 3 8 , 2 3 7 , 2 3 6 , 2 3 5 , 2 3 3 , 2 3 2 , 2 3 1 , 2 2 9 , 2 2 8 , 2 2 7 , 2 2 5 , 2 2 4 , 2 2 2 , 2 2 1 , 2 1 9 , 2 1 8 , 2 1 6 , 2 1 5 , 2 1 3 , 2 1 1 , 2 1 0 , 2 0 8 , 2 0 6 , 2 0 4 , 2 0 3 , 2 0 1 , 1 9 9 , 1 9 7 , 1 9 5 , 1 9 3 , 1 9 2 , 1 9 0 , 1 8 8 , 1 8 6 , 1 8 4 , 1 8 2 , 1 8 0 , 1 7 8 , 1 7 6 , 1 7 4 , 1 7 1 , 1 6 9 , 1 6 7 , 1 6 5 , 1 6 3 , 1 6 1 , 1 5 9 , 1 5 7 , 1 5 4 , 1 5 2 , 1 5 0 , 1 4 8 , 1 4 6 , 1 4 3 , 1 4 1 , 1 3 9 , 1 3 7 , 1 3 5 , 1 3 2 , 1 3 0 , 1 2 8 , 1 2 6 , 1 2 4 , 1 2 1 , 1 1 9 , 1 1 7 , 1 1 5 , 1 1 3 , 1 1 0 , 1 0 8 , 1 0 6 , 1 0 4 , 1 0 2 , 9 9 , 9 7 , 9 5 , 9 3 , 9 1 , 8 9 , 8 7 , 8 5 , 8 2 , 8 0 , 7 8 , 7 6 , 7 4 , 7 2 , 7 0 , 6 8 , 6 6 , 6 5 , 6 3 , 6 1 , 5 9 , 5 7 , 5 5 , 5 3 , 5 2 , 5 0 , 4 8 , 4 6 , 4 5 , 4 3 , 4 1 , 4 0 , 3 8 , 3 7 , 3 5 , 3 4 , 3 2 , 3 1 , 2 9 , 2 8 , 2 7 , 2 5 , 2 4 , 2 3 , 2 1 , 2 0 , 1 9 , 1 8 , 1 7 , 1 6 , 1 5 , 1 4 , 1 3 , 1 2 , 1 1 , 1 0 , 9 , 9 , 8 , 7 , 7 , 6 , 5 , 5 , 4 , 4 , 3 , 3 , 3 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 3 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 7 , 7 , 8 , 9 , 9 , 1 0 , 1 1 , 1 2 , 1 3 , 1 4 , 1 5 , 1 6 , 1 7 , 1 8 , 1 9 , 2 0 , 2 1 , 2 3 , 2 4 , 2 5 , 2 7 , 2 8 , 2 9 , 3 1 , 3 2 , 3 4 , 3 5 , 3 7 , 3 8 , 4 0 , 4 1 , 4 3 , 4 5 , 4 6 , 4 8 , 5 0 , 5 2 , 5 3 , 5 5 , 5 7 , 5 9 , 6 1 , 6 3 , 6 4 , 6 6 , 6 8 , 7 0 , 7 2 , 7 4 , 7 6 , 7 8 , 8 0 , 8 2 , 8 5 , 8 7 , 8 9 , 9 1 , 9 3 , 9 5 , 9 7 , 9 9 , 1 0 2 , 1 0 4 , 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 15 1 0 6 , 1 0 8 , 1 1 0 , 1 1 3 , 1 1 5 , 1 1 7 , 1 1 9 , 1 2 1 , 1 2 4 , 1 2 6 , ; v o i d m a i n ( v o i d ) u i n t i ; D D R A = 0 x f f ; f o r ( ; ; ) f o r ( i = 0 ; i 3 6 0 ; i + + ) P O R T A = s i n t a b i ; / / 第十章例子 1 0 . 4 . 5 方波程序 # i n c l u d e # d e f i n e u c h a r u n s i g n e d c h a r # d e f i n e u i n t u n s i g n e d i n t v o i d d e l a y ( u c h a r t ) u c h a r i , j ; f o r ( i = 0 ; i t ; i + + ) f o r ( j = 1 ; j ; j + + ) ; v o i d m a i n ( v o i d ) D D R A = 0 x f f ; P O R T A = 0 x f f ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 16 f o r ( ; ; ) P O R T A = 0 x 0 1 ; d e l a y ( 2 5 ) ; 用双龙电子增补 I c c A V R 库文件后新增例子 双龙电子在 I c c A V R C 高级语言中增加了库文件 l i b s l a v r . a , 头文件 s l a v r . h 有关使用注意事项如下 1 在使用例子程序之前将库文件 l i b s l a v r . a 拷贝到 I C C A V R 安装目录下的库文件目录中 即. . . L I B 目录将头文件 s l a v r . h 拷贝到头文件目录即. . . i n c l u d e 目录 2 如果想使用库文件中的函数那么设置如下 1 ) 在文件中应使用 # i n c l u d e 包含 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 库文件( 注意引号不需要输入) 3 l i b s l a v r . a 库中包含的函数清单如下 1 ) v o i d w r i t e _ l c d ( u n s i g n e d c h a r d a t a , u n s i g n e d c h a r d a t a _ t y p e ) ; 写命令或数据到 L C D 模块可直接使用控制命令对 L C D 模块操作 d a t a : 命令或数据字节 , d a t a _ t y p e 0 表示命令1 表示数据 2 ) u n s i g n e d c h a r r e a d _ l c d ( u n s i g n e d c h a r d a t a _ t y p e ) ; 从 L C D 模块中读取数据或地址 d a t a _ t y p e 0 表示读取地址1 表示读取数据 3 ) v o i d l c d _ i n i t ( v o i d ) ; L C D 模块初始化 4 ) v o i d l c d _ p u t c ( u n s i g n e d c h a r c ) ; 单字符输出函数 5 ) v o i d l c d _ p u t s ( u n s i g n e d c h a r * s ) ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 17 字符串输出函数 6 ) v o i d l c d _ c l e a r ( v o i d ) ; 清除 L C D 显示函数 7 ) v o i d l c d _ w r i t e ( u n s i g n e d c h a r a d d e r , u n s i g n e d c h a r d a t a ) ; 写数据到指定 D D R A M / C G R A M 位置 8 ) v o i d l c d _ w r i t e _ d a t a ( u n s i g n e d c h a r d a t a ) ; 写数据到 D D R A M 当前位置 9 ) u n s i g n e d c h a r l c d _ r e a d ( u n s i g n e d c h a r a d d e r ) ; 从指定 D D R A M / C G R A M 位置读取数据 1 0 ) v o i d l c d _ g o t o x y ( u n s i g n e d c h a r x , u n s i g n e d c h a r y ) ; 将光标转移到 D D R A M 指定位置处, x : 0 3 9 , y : 0 1 1 1 ) v o i d l c d _ s h i f t ( u n s i g n e d c h a r n , u n s i g n e d c h a r p ) ; L C D 字符移位函数, n : 移动的次数, p : 移动方向, l 或 L 表示左移 r 或 R 表示右移 1 2 ) v o i d d e l a y _ 1 m s ( v o i d ) ; 1 3 ) v o i d d e l a y _ m s ( u n s i g n e d i n t n ) ; 延时函数( m S ) , 对应晶振频率为 8 M H Z 1 4 ) u n s i g n e d c h a r s c a n _ k e y ( v o i d ) ; 键盘扫描函数, 注意本函数不作按键释放检查 返回值1 没有键按下返回 0 x 7 f 2 如果 s h i f t 按下返回值最高位为 1 3 其余键按下时返回键名对应数值 1 5 ) u n s i g n e d c h a r k e y p a d ( v o i d ) ; 键盘扫描函数, 注意本函数作按键释放检查 返回值1 没有键按下返回 0 x 7 f 2 如果 s h i f t 按下返回值最高位为 1 3 其余键按下时返回键名对应数值 1 6 ) v o i d S t a r t ( v o i d ) ; I 2 C 总线启动 1 7 ) v o i d S t o p ( v o i d ) ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 18 I 2 C 总线停止 1 8 ) v o i d A c k ( v o i d ) ; 发送应答信号 1 9 ) v o i d N o A c k ( v o i d ) ; 发送非应答信号 2 0 ) u n s i g n e d c h a r T e s t A c k ( v o i d ) ; 测试应签信号有应答信号返回 0 无应答信号返回 0 1 2 1 ) v o i d W r i t e 8 B i t ( u n s i g n e d c h a r i n p u t ) ; 写一个字节数据到 I 2 C 总路线 2 2 ) u n s i g n e d c h a r R e a d 8 B i t ( v o i d ) ; 从 I 2 C 总线读取一个字节数据 2 3 ) v o i d W r i t e 2 4 c 0 2 ( 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 , u n s i g n e d c h a r n u m b e r ) ; 对串行 E E P R O M 存贮器 A T 2 4 C 0 2 采用页写模式连续写多个字节 参数说明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 E E P R O M 中的目标地址 u n s i g n e d c h a r n u m b e r 连续写的字节数 2 4 ) v o i d R e a d 2 4 c 0 2 ( u n s i g n e d c h a r * R a m A d d r e s s , 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 b y t e s ) ; 对串行 E E P R O M 存贮器 A T 2 4 C 0 2 连续读多个字节 参数说明u n s i g n e d c h a r * R a m A d d r e s s 指向存放读出数据的变量的指针 u n s i g n e d c h a r R o m A d d r e s s E E P R O M 中的目标地址 u n s i g n e d c h a r b y t e s 连续读的字节数 4 例子说明 1 0 . 5 . 1 ) L E D I C C A V R 中的典型例子可作为 I C C A V R 的起步 1 0 . 5 . 2 ) i n t e r r u p t 使用定时器 1 溢出中断的例子 1 0 . 5 . 4 ) d i s p l a y S L - A V R 实验仪中六路 L E D 进行动态显示的例子程序 k e y b o a r d 包含三个例子程序 k e y b o a r d . c k e y b o a r d 1 . c 和 k e y b o a r d 2 . c 1 0 . 5 . 5 ) k e y b o a r d . c 使用 k e y p a d 函数观察其对 L E D 显示有何影响 1 0 . 5 . 5 A ) k e y b o a r d 1 . c 使用 s c a n _ k e y 函数观察其对 L E D 显示有何影响 1 0 . 5 . 5 B ) k e y b o a r d 2 . c 使用 k e y p a d 函数观察其对 L C D 显示有何影响 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 19 1 0 . 5 . 6 ) m u s i c 电脑音乐演示程序- - - - 播放 卡秋莎 音乐 1 0 . 5 . 7 ) c l o c k 电脑时钟程序- - - - 2 4 小时制时钟 1 0 . 5 . 8 ) c y m o m e t e r 单量程频率计测量范围 0 - 9 9 9 9 9 9 H Z I 2 C A V R 单片机使用 I 2 C 总线的例子A V R 工作于 I 2 C 的主节点模式包含两个例子 1 0 . 5 . 9 ) I 2 C . c 以单字节模式访问I 2 C 总路线器件A T 2 4 C 0 2 的例子程序 从中可以学习I 2 C 总线的工作过程 1 0 . 5 . 9 A ) A T 2 4 C 0 2 . c 调用库函数对 A T 2 4 C 0 2 进行读写可以连续多字节读写 注意a 以上程序中部分例子程序使用了S L - A V R 专用库l i b s l a v r . a 其中有关函数原型说明参考头文件 s l a v r . h b 上述例子程序的硬件接线如果没特殊说明采用双龙电子出品的S L - A V R 实验仪的出厂默认跳线 / / 第十章例子 1 0 . 5 . 1 ) L E D I C C A V R中的典型例子可作为 I C C A V R的起步 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * h t t p : / / w w w . s l . c o m . c n 双龙电子公司( I C C A V R ) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / # i n c l u d e / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 为了可以看见 L E D 的图案变化每次 L E D 图案变化需要保持一定时间 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d D e l a y ( ) u n s i g n e d c h a r a , b ; f o r ( a = 1 ; a ; a + + ) f o r ( b = 1 ; b ; b + + ) ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 20 v o i d L E D _ O n ( i n t i ) P O R T B = ( 1 i ) ; / * 输出低电平使 L E D 发光 * / D e l a y ( ) ; v o i d m a i n ( ) i n t i ; D D R B = 0 x F F ; / * 定义 B 口为输出* / P O R T B = 0 x F F ; / * 关闭全部 L E D * / w h i l e ( 1 ) / * 往前步进 * / f o r ( i = 0 ; i 0 ; i - - ) L E D _ O n ( i ) ; / * 跳 跃 * / f o r ( i = 0 ; i 0 ; i - = 2 ) L E D _ O n ( i ) ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 21 / / 第十章例子 1 0 . 5 . 2 ) i n t e r r u p t 使用定时器 1溢出中断的例子 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * h t t p : / / w w w . s l . c o m . c n 双龙电子公司- - - - 中断演示程序( I C C A V R ) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / # 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 : T O V 1 c h a r l e d _ i m a g e = 0 x F F ; / / 关闭全部 L E D 主程序入口 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d m a i n ( ) / * * * * * * * * * * * * * * * * * * * * * * * * * * * 初始化 8 5 1 5 寄存器 * * * * * * * * * * * * * * * * * * * * * * * * * * * / D D R B = 0 x F F ; P O R T B = 0 x 0 0 ; T C C R 1 A = 0 ; T C C R 1 B = 0 x 0 0 ; / / 停止定时器 1 T C N T 1 H = 0 x 0 0 ; / / 清除定时器 1 T C N T 1 L = 0 x 0 0 ; T I M S K = 0 x 8 0 ; / / 开放定时器 1 溢出中断 S R E G | = 0 x 8 0 ; T C C R 1 B = 0 x 0 3 ; / / 启动定时器 1 预分频比例 6 4 w h i l e ( 1 ) ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 22 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 在定时器中断中改变 L E D 的显示状态 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d t i m e r ( ) P O R T B = + + l e d _ i m a g e ; P O R T C = P O R T C ; / / 第十章例子 1 0 . 5 . 3 ) L C D S L - A V R实验仪中的 2 * 1 6位 L C D模块的使用例子 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * h t t p : / / w w w . s l . c o m . c n 双龙电子公司- - - - 2 * 1 6 L C D 控制演示程序( I C C A V R ) 作者詹卫前 使用注意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 v o i d m a i n ( v o i d ) M C U C R = 0 ; l c d _ i n i t ( ) ; w h i l e ( 1 ) l c d _ g o t o x y ( 2 , 0 ) ; l c d _ p u t s ( H e l l o W o r l d ! ) ; d e l a y _ m s ( 2 0 0 0 ) ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 23 l c d _ c l e a r ( ) ; l c d _ g o t o x y ( 4 , 0 ) ; l c d _ p u t s ( H T T P : / / ) ; l c d _ g o t o x y ( 1 , 1 ) ; l c d _ p u t s ( w w w . s l . c o m . c n ) ; d e l a y _ m s ( 2 0 0 0 ) ; l c d _ c l e a r ( ) ; / / 第十章例子 1 0 . 5 . 4 ) d i s p l a y S L - A V R实验仪中六路 L E D进行动态显示的例子程序 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / / * 延时函数( m S ) , 在本文件中应定义: x t a l ? * / / * x t a l 为对应晶振频率, 单位为 M H Z * / / * 在调用延时函数的文件中, 应作如下说明 * / / * 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 ) ; * / / * e x t e r n v o i d d e l a y _ 1 m s ( v o i d ) ; * / / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / # d e f i n e x t a l 8 v o i d d e l a y _ 1 m s ( v o i d ) u n s i g n e d i n t i ; f o r ( i = 1 ; i ( u n s i g n e d i n t ) ( x t a l * 1 4 3 - 2 ) ; i + + ) ; v o i d d e l a y _ m s ( u n s i g n e d i n t n ) u n s i g n e d i n t i = 0 ; w h i l e ( i n ) 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 24 d e l a y _ 1 m s ( ) ; i + + ; / / 第十章例子 1 0 . 5 . 5 ) k e y b o a r d . c 使用 k e y p a d函数观察其对 L E D显示有何影响 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * H T T P : / / W W W . S L . C O M . C N 双龙电子 使用注意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 3 本例采用了作按键释放检查的函数适用于显 示电路不需频繁刷新的程序, 如静态显示L C D 模块电路等 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / # i n c l u d e # i n c l u 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 ; / / 显示缓冲区 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 ; v o i d p o r t _ i n i t ( v o i d ) / / 端口初始化 D D R C = 0 x 0 f ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 25 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 ; P O R T C = 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 ; 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 D = ( 1 i ) ; d e l a y _ 1 m s ( ) ; P O R T D | = ( 1 i ) ; / * 主程序的功能读取键盘扫描码转换成相应的字形码后* / / * 送入显示缓冲区进行显示显示部分参考 d i s p l a y . c * / / * 如果 s h i f t 键按下则全部清 0 * / 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 v a l 1 ; u n s i g n e d c h a r i = 0 ; M C U C R = 0 ; p o r t _ i n i t ( ) ; w h i l e ( 1 ) k e y v a l 1 = k e y p a d ( ) ; / / 键盘扫描函数作按键释放检查 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 26 i f ( k e y v a l 1 ! = 0 x 7 f ) i f ( ( k e y v a l 1 & 0 x 8 0 ) = = 0 x 8 0 ) f o r ( i = 0 ; i 6 ; i + + ) l e d b u f f i = t a b e l 0 ; e l s e f o r ( i = 0 ; i 5 ; i + + ) l e d b u f f 5 - i = l e d b u f f 4 - i ; / / 每按一次键左移一位 l e d b u f f 0 = t a b e l k e y v a l 1 & 0 x 7 f ; d i s p l a y ( ) ; / / 第十章例子 1 0 . 5 . 5 A ) k e y b o a r d 1 . c 使用 s c a n _ k e y函数观察其对 L E D显示有何影响 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * H T T P : / / W W W . S L . C O M . C N 双龙电子 使用注意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 3 本例采用了不作按键释放检查的函数适用于显 示电路需要频繁刷新 或占用 C P U 时间较多的程序 , 如动态显示电路 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 27 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / # i n c l u d e # i n c l u 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 ; / / 显示缓冲区 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 ; v o i d p o r t _ i n i t ( v o i d ) / / 端口初始化 D D R C = 0 x 0 f ; 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 ; P O R T C = 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 ; 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 D = ( 1 i ) ; d e l a y _ 1 m s ( ) ; P O R T D | = ( 1 i ) ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 28 / * 主程序的功能读取键盘扫描码转换成相应的字形码后* / / * 送入显示缓冲区进行显示显示部分参考 d i s p l a y . c * / / * 如果 s h i f t 键按下则全部清 0 * / 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 v a l 1 , k e y v a l 2 ; u n s i g n e d c h a r i = 0 ; M C U C R = 0 ; p o r t _ i n i t ( ) ; w h i l e ( 1 ) k e y v a l 1 = s c a n _ k e y ( ) ; / / 键盘扫描函数不作按键释放检查 i f ( k e y v a l 1 ! = 0 x 7 f ) d o k e y v a l 2 = s c a n _ k e y ( ) ; d i s p l a y ( ) ; w h i l e ( k e y v a l 1 = = k e y v a l 2 ) ; / / 作按键释放检查 i f ( ( k e y v a l 1 & 0 x 8 0 ) = = 0 x 8 0 ) f o r ( i = 0 ; i 6 ; i + + ) l e d b u f f i = t a b e l 0 ; e l s e f o r ( i = 0 ; i 5 ; i + + ) 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 29 l e d b u f f 5 - i = l e d b u f f 4 - i ; / / 每按一次键左移一位 l e d b u f f 0 = t a b e l k e y v a l 1 & 0 x 7 f ; d i s p l a y ( ) ; / / 第十章例子 1 0 . 5 . 5 B ) k e y b o a r d 2 . c 使用 k e y p a d函数观察其对 L C D显示有何影响 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * H T T P : / / W W W . S L . C O M . C N 使用注意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 3 本例采用了作按键释放检查的函数适用于显 示电路不需频繁刷新的程序, 如静态显示L C D 模块电路等 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / # i n c l u d e # 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 k e y v a l , i ; l c d _ i n i t ( ) ; l c d _ g o t o x y ( 1 , 0 ) ; l c d _ p u t s ( w w w . s l . c o m . c n ) ; l c d _ g o t o x y ( 0 , 1 ) ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 30 l c d _ p u t s ( I N P U T : ) ; w h i l e ( 1 ) k e y v a l = k e y p a d ( ) ; i f ( k e y v a l 1 6 ) / / 对应 0 F 的键盘输入 i f ( k e y v a l 1 0 ) k e y v a l = 0 x 3 0 + k e y v a l ; e l s e k e y v a l = 5 5 + k e y v a l ; l c d _ w r i t e _ d a t a ( k e y v a l ) ; i f ( ( k e y v a l & 0 x 8 0 ) = = 0 x 8 0 ) / / 对应 S H I F 的键盘输入 f o r ( i = 0 ; i 7 ; i + + ) l c d _ s h i f t ( 1 , r ) ; d e l a y _ m s ( 5 0 0 ) ; f o r ( i = 0 ; i 7 ; i + + ) l c d _ s h i f t ( 1 , l ) ; d e l a y _ m s ( 5 0 0 ) ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 31 / / 第十章例子 1 0 . 5 . 6 ) m u s i c 电脑音乐演示程序- - - - 播放 卡秋莎 音乐 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * h t t p : / / w w w . s l . c o m . c n 双龙电子公司- - - - 电脑音乐演示程序( I C C A V R ) 作者詹卫前 1 学习定时器 T 0 溢出中断的使用 2 学习定时器 T 1 比较中断的使用 3 学习电脑音乐的产生 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / # 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 : 5 # p r a g m a d a t a : c o d e f l a s h u n s i g n e d i n t m u s i c _ d a t a 2 = / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 卡秋莎音乐数据 x , y x : 对应音符音阶( 频率) , 0 表示休止符 y : 对应音符节拍 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / 4 4 0 , 6 0 0 , 4 9 4 , 2 0 0 , 5 2 3 , 6 0 0 , 4 4 0 , 2 0 0 , 5 2 3 , 4 0 0 , 4 9 4 , 2 0 0 , 4 4 0 , 2 0 0 , 4 9 4 , 4 0 0 , 3 3 0 , 4 0 0 , 4 9 4 , 6 0 0 , 5 2 3 , 2 0 0 , 5 7 8 , 6 0 0 , 4 9 4 , 2 0 0 , 5 7 8 , 4 0 0 , 5 2 3 , 2 0 0 , 4 9 4 , 2 0 0 , 4 4 0 , 8 0 0 , 6 5 9 , 4 0 0 , 8 8 0 , 4 0 0 , 7 8 4 , 4 0 0 , 8 8 0 , 2 0 0 , 7 8 4 , 2 0 0 , 6 9 8 , 4 0 0 , 6 5 9 , 2 0 0 , 5 7 8 , 2 0 0 , 6 5 9 , 4 0 0 , 4 4 0 , 4 0 0 , 0 , 2 0 0 , / / 休止符 6 9 8 , 4 0 0 , 5 7 8 , 2 0 0 , 6 5 9 , 6 0 0 , 5 2 3 , 2 0 0 , 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 32 4 9 4 , 2 0 0 , 3 3 0 , 2 0 0 , 5 2 3 , 2 0 0 , 4 9 4 , 2 0 0 , 4 4 0 , 8 0 0 , 6 5 9 , 4 0 0 , 8 8 0 , 4 0 0 , 7 8 4 , 4 0 0 , 8 8 0 , 2 0 0 , 7 8 4 , 2 0 0 , 6 9 8 , 4 0 0 , 6 5 9 , 2 0 0 , 5 7 8 , 2 0 0 , 6 5 9 , 4 0 0 , 4 4 0 , 4 0 0 , 0 , 2 0 0 , / / 休止符 6 9 8 , 4 0 0 , 5 7 8 , 2 0 0 , 6 5 9 , 6 0 0 , 5 2 3 , 2 0 0 , 4 9 4 , 2 0 0 , 3 3 0 , 2 0 0 , 5 2 3 , 2 0 0 , 4 9 4 , 2 0 0 , 4 4 0 , 8 0 0 , 0 , 0 ; # p r a g m a d a t a : d a t a u n s i g n e d i n t d e l a y = 0 ; / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * M C U 初始化 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d m u s i c _ i n i t ( v o i d ) M C U C R = 0 x 0 0 ; D D R C = 0 x 0 1 ; T C C R 1 A = 0 x 0 0 ; T C C R 1 B = 0 x 0 9 ; T C C R 0 = 0 x 0 3 ; T C N T 0 = 0 x 1 9 ; T I M S K = 0 x 4 2 ; / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * T 0 中断程序产生音乐节拍 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d t i m e r 0 ( v o i d ) d e l a y + + ; 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 33 T C N T 0 = 0 x 1 9 ; / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * T 1 中断程序根据 S O U N D 函数输出一定频率的方波 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d t i m e r 1 ( v o i d ) P O R T C = 0 x 0 1 ; / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * S O U N D 程序输出频率为 x H Z 的方波, 延时 y M S x : 1 0 0 2 0 0 0 0 H Z , 0 表示不发声 y : 0 6 5 5 3 6 M S * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d s o u n d ( u n s i g n e d i n t x , u n s i g n e d i n t y ) S E I ( ) ; d e l a y = 0 ; i f ( x ! = 0 ) x = 4 0 0 0 0 0 0 / x ; O C R 1 A = x ; T C N T 1 = 0 x 0 0 ; T I M S K | = 0 x 4 0 ; w h i l e ( d e l a y y ) ; T I M S K & = 0 x b f ; e l s e 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 34 T I M S K & = 0 x b f ; w h i l e ( d e l a y y ) ; C L I ( ) ; / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 主程序 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d m a i n ( v o i d ) u n s i g n e d c h a r i = 0 ; m u s i c _ i n i t ( ) ; w h i l e ( 1 ) w h i l e ( m u s i c _ d a t a i 1 ! = 0 ) s o u n d ( m u s i c _ d a t a i 0 , m u s i c _ d a t a i 1 ) ; i + + ; i = 0 ; / / 第十章例子 1 0 . 5 . 7 ) c l o c k 电脑时钟程序- - - - 2 4小时制时钟 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 35 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * h t t p : / / w w w . s l . c o m . c n 双龙电子公司- - - - 电脑时钟演示程序( I C C A V R ) 作者詹卫前 1 学习定时器 T 1 溢出中断的使用 2 学习电脑时钟的编程方法 3 在程序运行时按 S H I F T 进行校时 使用注意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 # 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 1 : 7 # 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 c h a r t i m e 3 = 0 , 0 , 0 ; u n s i g n e d c h a r f l a g = 0 ; / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 初始化 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d p o r t _ i n i t ( v o i d ) 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 36 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 8 0 ; / / 开放 T 1 溢出中断 T C C R 1 A = 0 x 0 0 ; T C C R 1 B = 0 x 0 4 ; T C N T 1 = 0 x 8 5 e e ; S E I ( ) ; / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 刷新 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 3 ; i + + ) t e m p = t e m p % 1 0 ; l e d b u f f 5 - 2 * i = t a b e l t e m p ; t e m p = t i m e i % 1 0 ; l e d b u f f 4 - 2 * i = t a b e l t e m p ; / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 六路动态扫描显示电路 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d d i s p l a y ( v o i d ) 第十章 IccAVR C 语言例子程序源程序 广州天河双龙电子有限公司 http:/WWW.SL.COM.CN 37 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 ) ; / / 关闭显示 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 设定校时时间 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / v o i d s e t t i m e ( v o i d ) u n s i g n e d c h a r t 1 , t 2 , t 3 ; f o r ( t 1 = 0 ; t 1 = 6 0 ) t i m e 2 - = 6 0 ; t i m e 1 + + ; i f ( t i m e 1 = 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 ( & a t 2 4 _ d a t a , a t 2 4 _ a d d , 1 ) ; 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 & 0 x 0 f ; 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 & 0 x 0 f ; 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 & 0 x f 0 ; a t 2 4 _ a d d = k e y 2 | ( k e y 1 & 0 x 0 f ) ; e l s e k e y 2 = a t 2 4 _ d a t a & 0 x f 0 ; a t 2 4 _ d a t a = k e y 2 | ( k e y 1 & 0 x 0 f ) ; i n d e x = 0 0 ; b r e a k ; i
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:0596、《AVR高速嵌入式单片机原理与应用》
链接地址:https://www.renrendoc.com/p-6127029.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2024  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!