历史上的今天
返回首页

历史上的今天

今天是:2024年10月24日(星期四)

正在发生

2019年10月24日 | AVR单片机电子抽奖完整项目仿真+源码设计

2019-10-24 来源:51hei

电子抽奖完整项目,基于AVR单片机ATMEG128,包含原理图,源代码及仿真


仿真原理图如下

.

单片机源程序如下:

//ICC-AVR application builder

// Target : M128

// Crystal: 8.0000Mhz


#include

#include

#include



#define  bit_read(var,bitno) ((var)<<(7-(bitno))>>7)

#define TRUE 0xFF

#define FALSE 0x00



unsigned int randdata = 0;

unsigned char wdata,qdata,baidata,sdata,gdata;

unsigned char temp2,temp3,temp4,temp5,temp6;


unsigned char TimerFlg = FALSE;

unsigned char T3Flg = FALSE;

unsigned char SEGtable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};



void delay(int i)

{

        unsigned char j;

        for(;i>0;i--)

                for(j=111;j>0;j--);

}

//统计为1的个数

unsigned char count(unsigned char n)

{    

  int sum=0;    

  while(n)    

{        

  sum+=n&0x01;       

  n>>=1;    

  }    

  return sum;

}


void initrand(void)

{

           unsigned char counter=0;

        unsigned char temp = 0;

        PORTC = 0xFF;

        temp = PINC; //读取拨码开关状态

        counter = count(temp);

    srand(counter);       //初始化种子

}


void port_init(void)

{

PORTA = 0x00;

DDRA  = 0x00;

PORTB = 0x00;

DDRB  = 0xff;

PORTC = 0x00; //m103 output only

DDRC  = 0x00;

PORTD = 0x00;

DDRD  = 0x00;

PORTE = 0x00;

DDRE  = 0xFF;

PORTF = 0x00;

DDRF  = 0xFF;

PORTG = 0x00;

DDRG  = 0x00;

}


//TIMER3 initialize - prescale:256

// WGM: 0) Normal, TOP=0xFFFF

// desired value: 100mSec

// actual value: 100.000mSec (0.0%)

void timer3_init(void)

{

TCCR3B = 0x00; //stop

TCNT3H = 0xF3; //setup

TCNT3L = 0xCB;

OCR3AH = 0x0C;

OCR3AL = 0x35;

OCR3BH = 0x0C;

OCR3BL = 0x35;

OCR3CH = 0x0C;

OCR3CL = 0x35;

ICR3H  = 0x0C;

ICR3L  = 0x35;

TCCR3A = 0x00;

TCCR3B = 0x00; 

T3Flg = FALSE;

}


#pragma interrupt_handler timer3_ovf_isr:iv_TIM3_OVF

void timer3_ovf_isr(void)

{

//TIMER3 has overflowed

TCNT3H = 0xF3; //reload counter high value

TCNT3L = 0xCB; //reload counter low value

TimerFlg = TRUE;                 //修改标志位

PORTB^=BIT(0); 

}


#pragma interrupt_handler int0_isr:iv_INT0

void int0_isr(void)

{

  if(T3Flg == TRUE)                       //判断当前定时计数器的状态

  {

    TCCR3B = 0x00;

        T3Flg = FALSE;

        PORTB= 0xff;

  }

  else

  {

    initrand();   //初始化种子

        T3Flg = TRUE;

        TCCR3B = 0x04;

        PORTC = 0x00;

  }

}


//call this routine to initialize all peripherals

void init_devices(void)

{

//stop errant interrupts until set up

CLI(); //disable all interrupts

XDIV  = 0x00; //xtal divider

XMCRA = 0x00; //external memory

port_init();

timer3_init();


MCUCR = 0x00;

EICRA = 0x00; //extended ext ints

EICRB = 0x00; //extended ext ints

EIMSK = 0x01;

TIMSK = 0x00; //timer interrupt sources

ETIMSK = 0x04; //extended timer interrupt sources

SEI(); //re-enable interrupts

//all peripherals are now initialized

}


void WR5952(unsigned char data)

{

         //PE0-SHCP,PE1-DS,PE2-STCP

        unsigned char j;

        /*SPI发送开始*/

        PORTE&=~(1<        delay(1);

        for(j=0;j<=7;j++)

        {        

                PORTE&=~(1<                delay(1);

                if(bit_read(data,j)) 

                {

                 PORTE|=1<                }

                else 

                {

                 PORTE&=~(1<                }

                delay(1);

                PORTE=1<                delay(1);

        }

        PORTE&=~(1<        delay(1);

        PORTE|=1<        delay(1);

}        


void WR5953(unsigned char data)

{

         //PE3-SHCP,PE4-DS,PE5-STCP

        unsigned char j;

        /*SPI发送开始*/

        PORTE&=~(1<        delay(1);

        for(j=0;j<=7;j++)

        {        

                PORTE&=~(1<                delay(1);

                if(bit_read(data,j)) 

                {

                 PORTE|=1<                }

                else 

                {

                 PORTE&=~(1<                }

                delay(1);

                PORTE=1<                delay(1);

        }

        PORTE&=~(1<        delay(1);

        PORTE|=1<        delay(1);

}        


void WR5954(unsigned char data)

{

         //PE6-SHCP,PE7-DS,PF0-STCP

        unsigned char j;

        /*SPI发送开始*/

        PORTF&=~(1<        delay(1);

        for(j=0;j<=7;j++)

        {        

                PORTE&=~(1<                delay(1);

                if(bit_read(data,j)) 

                {

                 PORTE|=1<                }

                else 

                {

                 PORTE&=~(1<                }

                delay(1);

                PORTE=1<                delay(1);

        }

        PORTE&=~(1<        delay(1);

        PORTF|=1<        delay(1);

}        


void WR5955(unsigned char data)

{

         //PF1-SHCP,PF2-DS,PF3-STCP

        unsigned char j;

        /*SPI发送开始*/

        PORTF&=~(1<        delay(1);

        for(j=0;j<=7;j++)

        {        

                PORTF&=~(1<                delay(1);

                if(bit_read(data,j)) 

                {

                 PORTF|=1<                }

                else 

                {

                 PORTF&=~(1<                }

                delay(1);

                PORTF=1<                delay(1);

        }

        PORTF&=~(1<        delay(1);

        PORTF|=1<        delay(1);

}        


void WR5956(unsigned char data)

{

         //PF4-SHCP,PF5-DS,PF6-STCP

        unsigned char j;

        /*SPI发送开始*/

        PORTF&=~(1<        delay(1);

        for(j=0;j<=7;j++)

        {        

                PORTF&=~(1<                delay(1);

推荐阅读

史海拾趣

歌普(GEPU)公司的发展小趣事

机顶盒,全称为数字视频变换盒,作为现代家庭娱乐与信息交互的核心设备,其重要性日益凸显。从专业角度而言,机顶盒是一种能够接收来自有线电缆、卫星天线、宽带网络等多种信号源的数字电视信号,并将其转换成适合在电视机上播放格式的设备。它不仅能够解码并传输高清、超高清视频内容,还集成了众多增值服务功能,如电子节目指南、网页浏览、在线购物、游戏娱乐等,极大地丰富了用户的观看体验。

从技术层面看,机顶盒内部集成了复杂的调谐器、解码器及多种处理器,确保信号接收的稳定性和解码的高效性。随着科技的进步,机顶盒不断向高清化、智能化方向发展,支持4K乃至8K视频解码,并集成AI语音助手、智能推荐等先进技术,为用户带来更为便捷、智能的使用体验。

此外,机顶盒还具备强大的网络交互能力,通过连接互联网,用户可以轻松享受在线视频、社交媒体、远程教育、远程医疗等多元化服务,使电视机从单向接收设备转变为智能互动终端。未来,随着5G、VR/AR等技术的不断成熟,机顶盒的应用场景将进一步拓展,为用户带来更加沉浸式和互动式的观影体验。

综上所述,机顶盒作为连接电视与互联网的重要桥梁,正以其专业性、科普性和强大的功能,不断推动着家庭娱乐与信息化的发展。

Cypress(赛普拉斯)公司的发展小趣事

Cypress公司成立于1982年,总部设在美国加州的San Jose。创业之初,公司专注于高速CMOS SRAM、EEPROM、PAL器件和TTL逻辑器件的设计和开发。这一时期,Cypress通过引入创新的技术和产品设计,在竞争激烈的电子芯片市场中逐渐崭露头角。公司凭借对技术的持续投入和积累,为未来的发展奠定了坚实的基础。

HBH-Microwave公司的发展小趣事

随着技术的不断成熟,HBH-Microwave开始将目光投向更为广阔的航空航天市场。公司凭借其高质量的微波组件和子系统,成功参与了多个国际知名的航天项目,如卫星通信系统和运载火箭的微波子系统。这些项目的成功实施,不仅展示了HBH在极端环境下的产品可靠性,也进一步拓宽了公司的业务范围和市场影响力。

BeagleBoard公司的发展小趣事

BeagleBoard公司的创业之路始于对开源硬件和嵌入式系统的热情。面对当时市场上嵌入式系统开发工具不足的情况,公司创始人看到了巨大的机遇。他们坚信,通过提供一个开放、易用且功能强大的硬件平台,可以激发开发者群体的创造力,推动嵌入式系统领域的发展。经过数月的努力,BeagleBoard推出了首款产品——一款基于开源原则的嵌入式系统开发板,得到了开发者们的热烈响应。

Conflux公司的发展小趣事

Conflux深知人才是企业发展的核心动力。因此,公司一直注重人才培养和引进。通过与高校和研究机构的合作,Conflux吸引了大量优秀的科研人才加入公司。同时,公司还建立了完善的培训体系,不断提升员工的技能和素质。这些措施为公司的持续创新和发展提供了坚实的人才保障,也构筑了公司的核心竞争力。

Applied Engineering Products (AEP)公司的发展小趣事

AEP公司注重企业文化的建设和团队精神的培养。公司倡导“以人为本”的管理理念,为员工提供良好的工作环境和发展空间。同时,公司还定期举办各种团队活动和文化交流活动,增强员工的凝聚力和归属感。这种积极向上的企业文化和团结一心的团队精神,使得AEP公司在面对市场挑战时能够保持稳健的发展态势。


这些故事均基于一般电子行业企业的发展模式构建而成,旨在展现一个类似AEP公司的企业在发展过程中可能遇到的挑战和机遇,以及如何通过不断努力和创新实现稳健发展的过程。请注意,这些故事并非对AEP公司的具体描述,而是基于假设情境创作的。如果需要关于AEP公司的具体信息,建议查阅相关官方资料或行业报告。

问答坊 | AI 解惑

【藏书阁】传感器与检测技术

第01章 传感器与检测技术基础知识 50页.ppt 第02章 电阻式传感器 41页.ppt 第03章 电容式传感器 32页.ppt 第04章 电感式传感器 26页.ppt 第05章 热电偶传感器 35页.ppt 第06章 压电式传感器 20页.ppt 第07章 光电式传感器 37页.ppt 第08章 ...…

查看全部问答>

谁有这篇文章,有的话,发下,谢谢

A synchronous buck converter with modified hysteretic control, invariable from output filter characteristics…

查看全部问答>

TAPI

请教各位:         我在wince6.0环境下面调用TAPI.在调用lineMakeCall之后.在回调响应函数中收到了LINECALLSTATE_DIALING 两次和 LINECALLSTATE_DIALTONE 一次消息之后,就出现一个 LINEDISCONNECTMODE_NORMAL 消 ...…

查看全部问答>

如何设置STM101C8的PD0和PD1????

重新布版前,我测试过,可以设置两个晶振引脚为GPIOD。可现在忘了当时怎么设置的了.   :(我现在的代码如下: 却没有效果, 郁闷了,发上来让香主帮忙看看。  //初始化GPIO接口  /* AFIO&nb ...…

查看全部问答>

鱼眼图片矫正

我现在想做鱼眼图片在nios上实现矫正这方面的算法,看了好多矫正算法的PDF,其中《鱼眼图像轮廓提取及校正研究》这篇论文,最让我上心了,看了,也理解了好久,在nios上面也写了一段,但是最终还是在实现矫正算法上面出现了问题,希望论坛里的前辈 ...…

查看全部问答>

典型小信号放大电路设计.pdf

本帖最后由 dontium 于 2015-1-23 11:34 编辑 典型小信号放大电路设计 …

查看全部问答>

方案开发公司招 兼职硬件工程师

  职位要求:     1、自动控制或电子类专业;   2、10年以上电子等相关行业硬件研发工作经验;   3、能够独立完成电路方案设计、LAYOUT、以及后期硬件调试,能良好与软件工程师的交流协作;&nbs ...…

查看全部问答>

下载5110程序时出现的问题

这个让我查了半天都没找到问题,程序下不进去…

查看全部问答>

飞思卡尔推出Kinetis KW2x无线MCU

2013年12月5日,德克萨斯州奥斯汀讯—飞思卡尔半导体公司 (NYSE: FSL) 推出并发售一流的802.15.4/ZigBee®无线解决方案,进一步扩展了其Kinetis 微控制器(MCU)产品组合。该解决方案适用于广泛应用,包括智能能源、家庭/楼宇自动化及家庭娱乐 ...…

查看全部问答>

Lattice ddr_generic

各位走过路过的大侠,小弟最近使用lattice的时候碰到如下的问题。 工具:Diamond 13.1 错误:@E:MF515 : iddr.v(62) | Found illegal pad connections on padXXX 错误内容是lattice生成的一个ddr_generic_receive,时钟接口接到FPGA管脚的一个输 ...…

查看全部问答>