返回列表 回复 发帖

[林夕依然] 实验1:8种LED点亮模式(ICC)

相关搜索: 例程
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
【相关资源】
【ATMEGA16L】单片机学习案例硬件电路图
实验1:8种LED点亮模式
实验2:有源蜂鸣器驱动实验
实验3:按键扫描(用KEY选择对应LED点亮)
实验4:按键扫描+8种LED亮灭模式控制
实验5:按键扫描(用KEY选择LED点亮模式)
实验6:无源蜂鸣器驱动实验
实验7:外部中断INT0实验
实验8:7种LED亮灭模式+INT0中断+蜂鸣器
实验9:蜂鸣器产生音节节拍
实验10:按键扫描(KEY控制对应LED亮灭)
实验11:SPI实验(数码管显示)
实验12:SPI实验(数码管位显示控制)
实验13:SPI实验(数码管显示INT0次数)
实验14:TC0用作PWM相位修正模式
实验15:TC0定时器四种工作模式实验
实验16:TC0定时器中断实验
实验17:TC0定时器溢出定时实验
实验18:TC1比较中断实现10ms定时实验
实验19:音乐键盘
实验20:USART实验(查询方式收发数据)
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★


一、程序结构
程序结构.jpg
2009-3-27 20:25


二、仿真效果
LED.jpg
2009-4-28 22:19


三、程序源码
1、main.c
  1. /***************************************************************************
  2. Platform : AVR mega16学习板(www.iccavr.com)
  3. Project : 实验一:8种LED点亮模式
  4. Clock F : 3.6864M
  5. Software : ICCAVR7.14C
  6. Author : 林夕依然
  7. Version : 08.11.22
  8. Updata : 09.02.25 模块化
  9. 09.04.28 增加了proteus仿真模型,调试通过。
  10. comments :
  11. 1、以学习板八个LED灯为硬件电路,JP7短路块需装上
  12. 2、练习简单延时函数的编制
  13. 3、AVR单片机端口寄存器的使用及理解
  14. 4、练习程序模块化,结构化的书写
  15. 5、单片机休眠模式练习
  16. 6、8种LED点亮模式
  17. ***************************************************************************/
  18. #include <iom16v.h>
  19. #include <macros.h>
  20. #include "led01.h"
  21. //#define uchar unsigned char
  22. //#define uint unsigned int

  23. void main()
  24. {
  25. int l,m,n,o,p,q,r,s,i,j;
  26. DDRA =0X00; //端口上拉输入
  27. PORTA=0XFF;
  28. DDRB =0xFF; //端口输出
  29. PORTB=0xFF; //输出高电平,LED熄灭
  30. DDRC =0X00;
  31. PORTC=0XFF;
  32. DDRD =0X00;
  33. PORTD=0XFF;

  34. for (r=0;r<5;r++)
  35. {
  36. for(l=0;l<5;l++) //模式1:顺序点亮
  37. {
  38. for (i = 0; i < 8; i++) //顺序单个点亮LED
  39. LED_01(i);
  40. for (i = 6; i > 0; i--) //逆序单个点亮LED
  41. LED_01(i);
  42. }
  43. LED_off();

  44. for(m=0;m<5;m++) //模式2:顺序单个间隔点亮
  45. {
  46. for (i = 0; i < 8; i += 2) //顺序间隔点亮LED
  47. LED_01(i);
  48. for (i = 7; i > 0; i -= 2) //逆序间隔点亮LED
  49. LED_01(i);
  50. }
  51. LED_off();

  52. for(n=0;n<5;n++) //模式3:间隔点亮
  53. {
  54. for (i = 2; i < 8; i++) //间隔顺序同时点亮
  55. LED_02(i);
  56. for (i = 6; i > 2; i--) //间隔逆序同时点亮
  57. LED_02(i);
  58. }
  59. LED_off();

  60. for(o=0;o<5;o++) //模式4:相临点亮
  61. {
  62. for (i = 1; i < 8; i++) //相临顺序同时点亮
  63. LED_03(i);
  64. for (i = 6; i > 1; i--) //相临逆序同时点亮
  65. LED_03(i);
  66. }
  67. LED_off();

  68. for(p=0;p<5;p++) //模式5:发散聚集点亮
  69. {
  70. for(i=0;i<4;i++) //发散点亮
  71. LED_04(i);
  72. for(i=2;i>0;i--) //聚集点亮
  73. LED_04(i);
  74. }
  75. LED_off();

  76. for(q=0;q<5;q++) //模式6:四四点亮
  77. {
  78. for(i=0;i<4;i++) //四四顺序点亮
  79. LED_05(i);
  80. for(i=2;i>0;i--) //四四逆序点亮
  81. LED_05(i);
  82. }
  83. LED_off();

  84. for(s=0;s<5;s++) //模式7:四四点亮
  85. {
  86. for(i=0;i<2;i++) //四四顺序点亮
  87. LED_06(i);
  88. }
  89. LED_off();

  90. for(j=0;j<10;j++) //模式8:全部点亮熄灭
  91. {
  92. LED_on();
  93. LED_off();
  94. }
  95. }
  96. //MCUCR=0x40; //空闲模式,CPU占用100%
  97. //MCUCR=0x50; //ADC噪声抑制模式,CPU占用100%
  98. //MCUCR=0x60; //掉电模式,CPU占用80%
  99. //MCUCR=0x70; //省电模式,CPU占用4%
  100. //MCUCR=0xE0; //Standby模式,CPU占用80%
  101. MCUCR=0xF0; //扩展Standby模式,CPU占用4%
  102. asm("sleep"); //CPU休眠指令
  103. }
复制代码

2、delay.c
  1. /*******************************
  2. Platform : AVR mega16学习板(www.iccavr.com)
  3. function :延时函数
  4. Clock F : 3.6864M
  5. Software : ICCAVR7.14C
  6. Author : 林夕依然
  7. Version : 09.02.25
  8. comments :
  9. 1、两种方式实现延时
  10. ********************************/

  11. /*---------------------------------------------------------------------------------
  12. 延时程序计算方法
  13. 计数个数j = 延时时间/6*晶振频率 - 1
  14. ---------------------------------------------------------------------------------*/
  15. #define uchar unsigned char
  16. #define uint unsigned int

  17. //方式一:
  18. void Delay()
  19. {
  20. uchar a, b, c;
  21. for (a = 1; a; a++)
  22. for (b = 1; b; b++)
  23. for (c = 0; c<10; c++) //循环次数=255*255*10
  24. ;
  25. }

  26. //方式二:1ms延时,准确性较Delay();高
  27. void DelayMs(uint i)
  28. {
  29. while(i--)
  30. {
  31. uint j;
  32. for(j=1;j<=613;j++)
  33. ;
  34. }
  35. }
复制代码
3、led01.h
  1. /*******************************
  2. Platform : AVR mega16学习板(www.iccavr.com)
  3. function :功能函数集
  4. Clock F : 3.6864M
  5. Software : ICCAVR7.14C
  6. Author : 林夕依然
  7. Version : 09.02.25
  8. comments :
  9. ********************************/
  10. #define uchar unsigned char
  11. #define uint unsigned int

  12. void LED_on() //打开所有LED
  13. {
  14. PORTB =0X00;
  15. Delay();
  16. }

  17. void LED_off() //关闭所有LED
  18. {
  19. PORTB = 0xFF;
  20. Delay();
  21. }

  22. void LED_01(int i) //LED亮灭控制
  23. {
  24. PORTB = ~BIT(i); //输出低电平
  25. DelayMs(100); //调用延时程序
  26. }

  27. void LED_02(int i) //间隔点亮
  28. {
  29. PORTB=~(BIT(i)|BIT(i-2));
  30. DelayMs(100);
  31. }

  32. void LED_03(int i) //相临点亮
  33. {
  34. PORTB=~(BIT(i)|BIT(i-1)); //~后内容需用括号括起来
  35. DelayMs(100);
  36. }

  37. void LED_04(int i) //发散聚集点亮
  38. {
  39. switch(i)
  40. {
  41. case 0:PORTB=0xE7;DelayMs(100);break; //延时100ms
  42. case 1:PORTB=0xDB;DelayMs(100);break;
  43. case 2:PORTB=0xBD;DelayMs(100);break;
  44. case 3:PORTB=0x7E;DelayMs(100);break;
  45. default:break;
  46. }
  47. }

  48. void LED_05(int i) //00,0F,F0,FF方式显示
  49. {
  50. switch(i)
  51. {
  52. case 0:PORTB=0x00;DelayMs(100);break; //延时100ms
  53. case 1:PORTB=0x0F;DelayMs(100);break;
  54. case 2:PORTB=0xF0;DelayMs(100);break;
  55. case 3:PORTB=0xFF;DelayMs(100);break;
  56. default:break;
  57. }
  58. }

  59. void LED_06(int i)
  60. {
  61. switch(i)
  62. {
  63. case 0:PORTB=0XAA;DelayMs(100);break;
  64. case 1:PORTB=0X55;DelayMs(100);break;
  65. }
  66. }
复制代码
四、完整项目文件下载
完整项目文件及proteus模型.rar (71.16 KB)
谢谢!顶!这是个好东西啊!可惜不知道怎么才能下载!
增加了proteus仿真模型。
为方便学习交流,上传了完整的项目文件和proteus模型。
面对人生,既要有当机立断的决心,更要有永不后悔的气魄!
****************************************************************
期待你和论坛一起成长、进步!
(⊙_⊙),我的proteus版本太低了,打不开你的项目文件,555
提升自我,实现价值!
只是拷贝过来  还得自己再改 自己可是没有什么 #include "led01.h"

改改先就使用下软件得了
看看 正在学这个呢 哈哈
钱不够了,要人命啊。。。。
没有钱下,要命
谢谢LZ!!!
Xsohydra @iw
新手学习下
好东西啊!
好东东谢谢了!
谢谢了!!!!!!!!!
谢谢了!!!!!!!!!
提示: 作者被禁止或删除 内容自动屏蔽
提示: 作者被禁止或删除 内容自动屏蔽
这是个好东西啊
钱不够了,要人命啊。。。。
好东西多呀!
对初学者很有帮助!顶
返回列表
Datasheet