智能车制作
标题:
proteus AVR PIC单片机仿真100例 精!!!
[打印本页]
作者:
zhen
时间:
2012-4-10 00:44
标题:
proteus AVR PIC单片机仿真100例 精!!!
单片机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等技术应用。
作者:
zhen
时间:
2012-4-10 00:45
AVR100例:
http://zhengoogle.qjwm.com/down_1913197.html
PIC100例:
http://zhengoogle.qjwm.com/down_2684444.html
作者:
youmin90s
时间:
2012-4-10 09:55
3Q
作者:
OPQ_XYQ
时间:
2012-4-10 11:18
入门
作者:
强子
时间:
2012-7-11 14:37
我用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;
}
}
作者:
xuetianyou
时间:
2012-10-21 12:08
good!
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2