智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3756|回复: 5
打印 上一主题 下一主题

proteus AVR PIC单片机仿真100例 精!!!

[复制链接]

38

主题

85

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2594
威望
642
贡献
1642
兑换币
1
注册时间
2012-2-9
在线时间
155 小时
毕业学校
工业大学
跳转到指定楼层
1#
发表于 2012-4-10 00:44:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机C语言程序设计实训100例---基于AVR+PROTEUS仿真


  基于AVR Studio+WinAVR(GCC)组合环境和Proteus硬件仿真平台,精心安排了100个AVR单片机C程序设计案例。全书提供了所有寨例完整的C语言源程序,各案例设计了难易适中的实训目标。
    基础设计类案例涵盏AVR单片机最基本的端口编程、定时/计数器应用、中断程序设计、A/D转换、比较器程序设计、EEPROM、Flash、USART及看门狗程序设计;硬件应用类案例涉及单片机存储器扩展、接口扩展、译码、编码、驱动、光电、机电、传感器、I2C/TWl及SPl接口器件、MMC、红外等器件;综合设计类案例涉及消费类电子产品、仪器仪表及智能控制设备相关技术,相关案例涉及485及RTL8019的应用。

    本书适合用作大专院校学生学匀实践AVR单片机C语言程序设计技术的参考书,也可用作电子工程技术人员、单片机技术爱好者的学习参考书。

单片机C语言程序设计实训100例---基于PIC+PROTEUS仿真
  编辑推荐:
     一本凝聚了作者近两年艰苦写作经历的书籍 一本忠实的读者们期待已久的单片机技术开发书籍
一本涵盖PIC单片机C语言程序设计大量核心源码的书籍
一本带领你进入PIC单片机C语言程序设计神奇之旅的书籍
一本可作为“代码宝典"或“代码手册”使用的书籍
◆丰富的C语言源程序全部基于MPLAB IDE+HI—TECH PICC/PICC 1 8/MCC 1 8开发环境
◆基于Proteus提供的实物电路案例仿真解决了实验条件欠缺的问题
◆逐步递进的案例设计及难易适中的实训目标引领读者进入炉火纯青的程序设计境界
◆基础设计类案例涵盖PIC单片机最基本的端口编程、定时/计数器应用、中断程序设计、A/D转换、CCP程序设计、EEPROM、Flash、USART及看门狗程序设计等
◆硬件应用类案例涉及单片机存储器扩展、接口扩展、译码、编码、驱动、光电、机电、传感器、I2C及SPI接口器件、MMC、ATA、遥控等器件等
◆综合设计类案例涉及消费类电子产品、仪器仪表及智能控制设备等相关技术,部分案例涉及IRDA/RS-485/Modbus/CAN/Ethernet等技术应用

    本书基础设计类案例涵盖PIC单片机最基本的端口编程、定时/计数器应用、中断程序设计、A/D转换、CCP程序设计、EEPROM、Flash、USART及看门狗程序设计等;硬件应用类案例涉及单片机存储器外展、接口扩展、译码、编码、驱动、光电、机电、传感器、I2C及SPI接口器件、MMC、红外等器件;综合设计类案例涉及消费类电子产品、仪器仪表及智能控制设备相关技术,相关案例涉及RS-485/Modbus/CAN/Ethernet等技术应用。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

38

主题

85

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2594
威望
642
贡献
1642
兑换币
1
注册时间
2012-2-9
在线时间
155 小时
毕业学校
工业大学
2#
 楼主| 发表于 2012-4-10 00:45:16 | 只看该作者
回复 支持 反对

使用道具 举报

6

主题

404

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5100
QQ
威望
2361
贡献
1343
兑换币
457
注册时间
2011-9-23
在线时间
698 小时
3#
发表于 2012-4-10 09:55:03 | 只看该作者
3Q
回复 支持 反对

使用道具 举报

19

主题

670

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3466

热心会员奖章优秀会员奖章在线王奖章论坛元老奖章

威望
1709
贡献
977
兑换币
265
注册时间
2012-3-4
在线时间
391 小时
4#
发表于 2012-4-10 11:18:06 | 只看该作者
入门
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
137
威望
106
贡献
27
兑换币
0
注册时间
2012-4-6
在线时间
2 小时
毕业学校
坪水小学
5#
发表于 2012-7-11 14:37:29 | 只看该作者
我用ICCAVR模仿书中的“用T1控制交通指示灯”不能实现,我想可能是编译器的区别,
问题是:当在T1内的switch内中遇到return.后,所有变量被初始化?他不是返回到main中的while(1);而是返回到main中的第一条语句。
希望获得解释。
谢谢!
//-----------------------------------------------------------------
//  名称: 定时器T1控制交通指示灯
//-----------------------------------------------------------------
//  说明: 东西向绿灯亮5秒后,黄灯闪烁,闪烁5次后亮红灯,
//        红灯亮后,南北向由红灯变为绿灯,5秒后南北向黄灯闪烁,
//        闪烁5次后亮红灯,东西向绿灯亮,如此往复.
//        本例将时间设得较短是为了调试的时候能较快的观察到运行效果.
//               
//-----------------------------------------------------------------
//ICC-AVR application builder : 2012-7-10 10:33:14
// Target : M16
// Crystal: 4.0000Mhz

#include <iom16v.h>
#include <macros.h>
#define INT8U   unsigned char
#define INT16U  unsigned int

#define     RED_EW_ON()  PORTC |=  (1<<0);   //东西向指示灯开
#define  YELLOW_EW_ON()  PORTC |=  (1<<1);
#define   GREEN_EW_ON()  PORTC |=  (1<<2);

#define     RED_EW_OFF() PORTC &= ~(1<<0);   //东西向指示灯关
#define  YELLOW_EW_OFF() PORTC &= ~(1<<1);
#define   GREEN_EW_OFF() PORTC &= ~(1<<2);

#define     RED_SN_ON()  PORTC |=  (1<<3);   //南北向指示灯开
#define  YELLOW_SN_ON()  PORTC |=  (1<<4);
#define   GREEN_SN_ON()  PORTC |=  (1<<5);

#define     RED_SN_OFF() PORTC &= ~(1<<3);   //南北向指示灯关
#define  YELLOW_SN_OFF() PORTC &= ~(1<<4);
#define   GREEN_SN_OFF() PORTC &= ~(1<<5);

#define   YELLOW_EW_BLINK() PORTC ^= 0x02;   //东西向黄灯闪烁
#define   YELLOW_SN_BLINK() PORTC ^= 0x10;   //南北向黄灯闪烁

#define   BEEP() (PORTB ^= 0x01)            //蜂鸣器

void _delay_us(INT16U n)
{
        INT8U i,j;
        for(i = 0; i < n; i++)
        {
                 for(j = 0; j < 10; j++);
        }                  
}
//------------------------------------------------------------------
// 黄灯警报声音输出
//------------------------------------------------------------------
void Yellow_Light_Alarm(void)
{
         INT8U i;
         for(i = 0; i < 100; i++)
         {
                   BEEP();
                 _delay_us(380);
         }

}
//TIMER1 initialize - prescale:64
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 500mSec
// actual value: 500.000mSec (0.0%)
//TIMER1 initialize - prescale:64
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 500mSec
// actual value: 500.000mSec (0.0%)
/*
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0x85; //setup
TCNT1L = 0xEE;
TCCR1A = 0x00;
TCCR1B = 0x03; //start Timer
}*/
//延时倍数,闪烁次数,操作类型变量
INT8U Flash_Count = 0, Operation_Type = 1;
//------------------------------------------------------------------
// 主程序
//------------------------------------------------------------------

void main(void)
{

          DDRB = 0XFF;//配置输出端口。
        //PORTB = 0XFF;
        DDRC = 0XFF; //
        PORTC = 0X00;
        TCCR1B = 0X03;//T1预设分频:64
        TCNT1H = 0x85; //reload counter high value
        TCNT1L = 0xEE; //reload counter low value
        //TCNT1 = 65536- ((4000000/64)/2);//晶振4MHz,0.5s定时初值。
        TIMSK = (1<<TOIE1);//允许T1定时器溢出中断
        //timer1_init();
        SEI();//开中断
        while(1);

}



//-----------------------------------------------------------------
// T1定时器溢出中断服务程序(控制交通指示灯切换显示)
//-----------------------------------------------------------------
#pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
void timer1_ovf_isr(void)
{
static INT8U Time_Count=9;
//TIMER1 has overflowed
TCNT1H = 0x85; //reload counter high value
TCNT1L = 0xEE; //reload counter low value
//TCNT1 = 65536- ((4000000/64)/2);//晶振4MHz,0.5s定时初值。
PORTB ^= 0x80;
switch(Operation_Type)
{
            case 1: //东西向绿灯与南北向灯亮,5S后绿灯灭。
                               RED_EW_OFF(); YELLOW_EW_OFF(); GREEN_EW_ON();
                          RED_SN_ON(); YELLOW_SN_OFF(); GREEN_SN_OFF();
                          
                          
                          //5s后切换操作(0.5*10=5s)
                        //  Time_Count;
                          if(++Time_Count != 10)
                          {
                                     return;
                          }
                          PORTB ^= 0x40;
                          Time_Count = 0;
                          Operation_Type = 2;//下一操作
                          break;
                case 2://东西方向绿灯灭,黄灯开始闪烁;
                          Yellow_Light_Alarm();
                          GREEN_EW_OFF();
                          YELLOW_EW_BLINK();
                          //闪烁5次
                          if(++Flash_Count != 10)
                          {
                              return;
                          }
                          Flash_Count = 0;
                          Operation_Type = 3;//下一操作;
                          break;
                case 3://东西方向红灯与南北方向绿灯亮
                          RED_EW_ON();
                          YELLOW_EW_OFF();
                          GREEN_EW_OFF();
                          RED_SN_OFF();
                          YELLOW_SN_OFF();
                          GREEN_SN_ON();
                          //南北方向绿灯亮5S后切换(0.5s*10=5s)
                          if(++Time_Count != 10)
                          {
                              return;
                          }
                          Time_Count = 0;
                          Operation_Type = 4;//下一种操作类型
                          break;
                case 4:        //南北方向绿灯灭,黄灯开始闪烁
                          Yellow_Light_Alarm();
                          GREEN_SN_OFF();
                          YELLOW_SN_BLINK();
                          //闪烁5次
                          if(++Flash_Count != 10)
                          {
                              return;
                          }
                          Flash_Count = 0;
                          Operation_Type = 1;
                          break;
}
}
回复 支持 反对

使用道具 举报

3

主题

283

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1406
威望
788
贡献
380
兑换币
272
注册时间
2012-9-20
在线时间
119 小时
毕业学校
陕西理工学院
6#
发表于 2012-10-21 12:08:58 | 只看该作者
good!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-6-17 09:31 , Processed in 0.055058 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表