欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
AVR單片機電子抽獎完整項目仿真+源碼設計
[打印本頁]
作者:
firs9003
時間:
2018-11-26 23:59
標題:
AVR單片機電子抽獎完整項目仿真+源碼設計
電子抽獎完整項目,基于AVR單片機ATMEG128,包含原理圖,源代碼及仿真
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(30.54 KB, 下載次數: 67)
下載附件
2018-11-27 03:09 上傳
0.png
(14.94 KB, 下載次數: 58)
下載附件
2018-11-27 03:10 上傳
單片機源程序如下:
//ICC-AVR application builder
// Target : M128
// Crystal: 8.0000Mhz
#include <iom128v.h>
#include <macros.h>
#include <stdlib.h>
#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<<PE2);
delay(1);
for(j=0;j<=7;j++)
{
PORTE&=~(1<<PE0);
delay(1);
if(bit_read(data,j))
{
PORTE|=1<<PE1;
}
else
{
PORTE&=~(1<<PE1);
}
delay(1);
PORTE=1<<PE0;
delay(1);
}
PORTE&=~(1<<PE0);
delay(1);
PORTE|=1<<PE2;
delay(1);
}
void WR5953(unsigned char data)
{
//PE3-SHCP,PE4-DS,PE5-STCP
unsigned char j;
/*SPI發送開始*/
PORTE&=~(1<<PE5);
delay(1);
for(j=0;j<=7;j++)
{
PORTE&=~(1<<PE3);
delay(1);
if(bit_read(data,j))
{
PORTE|=1<<PE4;
}
else
{
PORTE&=~(1<<PE4);
}
delay(1);
PORTE=1<<PE3;
delay(1);
}
PORTE&=~(1<<PE3);
delay(1);
PORTE|=1<<PE5;
delay(1);
}
void WR5954(unsigned char data)
{
//PE6-SHCP,PE7-DS,PF0-STCP
unsigned char j;
/*SPI發送開始*/
PORTF&=~(1<<PF0);
delay(1);
for(j=0;j<=7;j++)
{
PORTE&=~(1<<PE6);
delay(1);
if(bit_read(data,j))
{
PORTE|=1<<PE7;
}
else
{
PORTE&=~(1<<PE7);
}
delay(1);
PORTE=1<<PE6;
delay(1);
}
PORTE&=~(1<<PE6);
delay(1);
PORTF|=1<<PF0;
delay(1);
}
void WR5955(unsigned char data)
{
//PF1-SHCP,PF2-DS,PF3-STCP
unsigned char j;
/*SPI發送開始*/
PORTF&=~(1<<PF3);
delay(1);
for(j=0;j<=7;j++)
{
PORTF&=~(1<<PF1);
delay(1);
if(bit_read(data,j))
{
PORTF|=1<<PF2;
}
else
{
PORTF&=~(1<<PF2);
}
delay(1);
PORTF=1<<PF1;
delay(1);
}
PORTF&=~(1<<PF1);
delay(1);
PORTF|=1<<PF3;
delay(1);
}
void WR5956(unsigned char data)
{
//PF4-SHCP,PF5-DS,PF6-STCP
unsigned char j;
/*SPI發送開始*/
PORTF&=~(1<<PF6);
delay(1);
for(j=0;j<=7;j++)
{
PORTF&=~(1<<PF4);
delay(1);
if(bit_read(data,j))
{
PORTF|=1<<PF5;
}
else
{
PORTF&=~(1<<PF5);
}
delay(1);
PORTF=1<<PF4;
delay(1);
}
PORTF&=~(1<<PF4);
delay(1);
PORTF|=1<<PF6;
delay(1);
}
//
void main(void)
{
init_devices();
WR5952(0x02);
//insert your functional code here...
while(1)
{
while(TimerFlg==FALSE); //等待延時標志位
TimerFlg=FALSE;
randdata = 2 * rand(); //獲得隨機數
wdata = randdata/10000; //輸出萬位
temp2 = SEGtable[wdata];
WR5952(temp2);
qdata = randdata%10000/1000; //輸出千位
temp3 = SEGtable[qdata];
WR5953(temp3);
baidata = randdata%1000/100; //輸出百位
temp4 = SEGtable[baidata];
WR5954(temp4);
sdata = randdata%100/10; //輸出10位
temp5 = SEGtable[sdata];
WR5955(temp5);
gdata = randdata%10; //輸出個位
temp6 = SEGtable[gdata];
WR5956(temp6);
}
}
復制代碼
所有資料51hei提供下載:
35738618dianzichoujiang.rar
(117.24 KB, 下載次數: 20)
2018-11-26 23:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
baishichao
時間:
2018-11-30 14:53
bit_read(var,bitno) ((var)<<(7-(bitno))>>7)萌新求問,這個宏定義是定義的啥,沒大看懂
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1