|
51單片機(jī)電子抽獎(jiǎng)系統(tǒng)仿真電路原理圖
下面是51單片機(jī)電子抽獎(jiǎng)系統(tǒng)源程序:- #include <AT89X52.h>
- #include <intrins.h>
- #include <stdlib.h>
- #define TRUE 1
- #define FALSE 0
- bit bT0Flg = FALSE;
- //U2 595的驅(qū)動(dòng)引腳定義
- sbit sbSHCP2 = P2^0;
- sbit sbDS2 = P2^1;
- sbit sbSTCP2 = P2^2;
- //U3 595的驅(qū)動(dòng)引腳定義
- sbit sbSHCP3 = P2^3;
- sbit sbDS3 = P2^4;
- sbit sbSTCP3 = P2^5;
- //U4 595的驅(qū)動(dòng)引腳定義
- sbit sbSHCP4 = P2^6;
- sbit sbDS4 = P2^7;
- sbit sbSTCP4 = P3^0;
- //U5 595的驅(qū)動(dòng)引腳定義
- sbit sbSHCP5 = P3^1;
- sbit sbDS5 = P3^3;
- sbit sbSTCP5 = P3^4;
- //U6 595的驅(qū)動(dòng)引腳定義
- sbit sbSHCP6 = P3^5;
- sbit sbDS6 = P3^6;
- sbit sbSTCP6 = P3^7;
- unsigned char temp2,temp3,temp4,temp5,temp6;
- bdata unsigned char sw; //位定義
- sbit sw0 = sw ^ 0;
- sbit sw1 = sw ^ 1;
- sbit sw2 = sw ^ 2;
- sbit sw3 = sw ^ 3;
- sbit sw4 = sw ^ 4;
- sbit sw5 = sw ^ 5;
- sbit sw6 = sw ^ 6;
- sbit sw7 = sw ^ 7;
- unsigned char code SEGtable[]=
- {
- 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
- };
- /*
- void Delay(unsigned int x)
- {
- unsigned char i;
- while(x--)
- {
- for(i=0;i<120;i++);
- }
- } */
- //595輸入函數(shù)2號(hào)
- void Input5952()
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- temp2 <<= 1;
- sbDS2 = CY;
- sbSHCP2 = 1;
- _nop_();
- _nop_();
- sbSHCP2 = 0;
- }
- }
- //595輸出函數(shù)2號(hào)
- void Output5952()
- {
- sbSTCP2 = 0;
- _nop_();
- sbSTCP2 = 1;
- _nop_();
- sbSTCP2 = 0;
- }
- //595輸入函數(shù)3號(hào)
- void Input5953()
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- temp3 <<= 1;
- sbDS3 = CY;
- sbSHCP3 = 1;
- _nop_();
- _nop_();
- sbSHCP3 = 0;
- }
- }
- //595輸出函數(shù)3號(hào)
- void Output5953()
- {
- sbSTCP3 = 0;
- _nop_();
- sbSTCP3 = 1;
- _nop_();
- sbSTCP3 = 0;
- }
- //595輸入函數(shù)4號(hào)
- void Input5954()
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- temp4 <<= 1;
- sbDS4 = CY;
- sbSHCP4 = 1;
- _nop_();
- _nop_();
- sbSHCP4 = 0;
- }
- }
- //595輸出函數(shù)4號(hào)
- void Output5954()
- {
- sbSTCP4 = 0;
- _nop_();
- sbSTCP4 = 1;
- _nop_();
- sbSTCP4 = 0;
- }
- //595輸入函數(shù)5號(hào)
- void Input5955()
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- temp5 <<= 1;
- sbDS5 = CY;
- sbSHCP5 = 1;
- _nop_();
- _nop_();
- sbSHCP5 = 0;
- }
- }
- //595輸出函數(shù)5號(hào)
- void Output5955()
- {
- sbSTCP5 = 0;
- _nop_();
- sbSTCP5 = 1;
- _nop_();
- sbSTCP5 = 0;
- }
- //595輸入函數(shù)6號(hào)
- void Input5956()
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- temp6 <<= 1;
- sbDS6 = CY;
- sbSHCP6 = 1;
- _nop_();
- _nop_();
- sbSHCP6 = 0;
- }
- }
- //595輸出函數(shù)6號(hào)
- void Output5956()
- {
- sbSTCP6 = 0;
- _nop_();
- sbSTCP6 = 1;
- _nop_();
- sbSTCP6 = 0;
- }
- void initrand(void)
- {
- unsigned char counter=0;
- P1 = 0xff;
- sw = P1;
- counter = 0; //統(tǒng)計(jì)開關(guān)閉合的數(shù)碼
- if(sw0 == 1)
- {
- counter++;
- }
- if(sw1 == 1)
- {
- counter++;
- }
- if(sw2 == 1)
- {
- counter++;
- }
- if(sw3 == 1)
- {
- counter++;
- }
- if(sw4 == 1)
- {
- counter++;
- }
- if(sw5 == 1)
- {
- counter++;
- }
- if(sw6 == 1)
- {
- counter++;
- }
- if(sw7 == 1)
- {
- counter++;
- }
- srand(counter); //初始化種子
- }
- void Timer0Init(void) //定時(shí)器0初始化函數(shù)
- {
- TMOD = 0x01; //設(shè)置T1工作方式
- TH0 = 0x00;
- TL0 = 0x0C; //100ms定時(shí)
- ET0 = 1; //開啟定時(shí)器0中斷
- // TR0 = 1; //啟動(dòng)定時(shí)器
- }
- void Timer0Deal(void) interrupt 1 using 1 //定時(shí)器0中斷處理函數(shù)
- {
- ET0 = 0; //首先關(guān)閉中斷
- TH0 = 0x00; //然后重新裝入預(yù)制值
- TL0 = 0x0C;
- ET0 = 1; //打開T0中斷
- bT0Flg = TRUE; //定時(shí)器中斷標(biāo)志位
- }
- EX_INT0() interrupt 0 using 1 //外部中斷0服務(wù)函數(shù)
- {
- if(TR0 == 1) //判斷當(dāng)前定時(shí)計(jì)數(shù)器的狀態(tài)
- {
- TR0 = 0;
- }
- else
- {
- TR0 = 1;
- initrand(); //初始化種子
- }
- }
- void main()
- {
- unsigned int randdata = 0;
- unsigned char wdata,qdata,baidata,sdata,gdata;
- Timer0Init(); //初始化時(shí)鐘
- IT0 = 1; //設(shè)置外部中斷0觸發(fā)方式為低脈沖
- EX0 = 1; //使能外部中斷0
- EA = 1; //打開串口中斷標(biāo)志
- while(1)
- {
- while(bT0Flg==FALSE); //等待延時(shí)標(biāo)志位
- bT0Flg=FALSE;
- randdata = 2 * rand(); //獲得隨機(jī)數(shù)
-
- wdata = randdata/10000; //輸出萬位
- temp2 = SEGtable[wdata];
- Input5952();
- Output5952();
-
- qdata = randdata%10000/1000; //輸出千位
- temp3 = SEGtable[qdata];
- Input5953();
- Output5953();
- baidata = randdata%1000/100; //輸出百位
- temp4 = SEGtable[baidata];
- Input5954();
- Output5954();
- sdata = randdata%100/10; //輸出10位
- temp5 = SEGtable[sdata];
- Input5955();
- Output5955();
- gdata = randdata%10; //輸出個(gè)位
- temp6 = SEGtable[gdata];
- Input5956();
- Output5956();
- }
- }
復(fù)制代碼
51單片機(jī)電子抽獎(jiǎng)系統(tǒng)仿真工程文件及所有資料下載:http://www.torrancerestoration.com/bbs/dpj-54940-1.html
|
|