學(xué)習(xí)板上集成了很多功能,而且常有端口和接口復(fù)用,利用跳線帽切換電路。樓主想完整仿真一個(gè)復(fù)雜的學(xué)習(xí)板上所有功能幾乎是不可能成功。只能把某些功能的相關(guān)電路分離出來(lái)仿真才能成功。程序修改如下:
無(wú)標(biāo)題.jpg (207.04 KB, 下載次數(shù): 55)
下載附件
2020-2-20 14:40 上傳
- //實(shí)現(xiàn)的功能:第一位亮一,過(guò)一秒種后第二位亮二,再過(guò)一秒后第三位亮三,然后依次類推
- #include<reg52.h>
- #include<intrins.h> //流水燈的循環(huán)移動(dòng)
- #define uint unsigned int
- #define uchar unsigned char
- uchar temp,aa,numdu,numwe;
- sbit dula=P2^6;//段選
- sbit wela=P2^7;//位選
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71};
- uchar code tablewe[]={ //位的table
- 0xfe,0xfd,0xfb,
- 0xf7,0xef,0xdf};
- //{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- void Timer0Init();
- void delay(uint z); //使用定時(shí)器延時(shí)
- void main()
- {
- numdu=0;
- // numwe=0;
- aa=0;
- // TMOD=1;//0x01;確定T0T1的工作方式
- // TH0=(65536-50000)/256;//50毫秒產(chǎn)生一次中斷
- // TL0=(65536-50000)%256;
- Timer0Init();
- EA=1;//開(kāi)總中斷
- ET0=1;//開(kāi)定時(shí)器0中斷
- // TR0=1;//啟動(dòng)定時(shí)器
- /*定時(shí)/計(jì)數(shù)器初始化程序應(yīng)完成如下工作:
- //對(duì)TMOD賦值,以確定T0和T1的工作方式。
- //計(jì)算初值,并將其寫入TH0、TL0或TH1、TL1.
- //中斷方式時(shí),則對(duì)IE賦值,開(kāi)放中斷。
- //使TR0或TR1置位,啟動(dòng)定時(shí)/計(jì)數(shù)器定時(shí)或計(jì)數(shù)*/
- while(1)
- {
- if(aa>=20)//1秒
- {
- aa=0;
- numdu++;
- if(numdu>=6)
- numdu=0;
- }
- P0=table[numdu+1];
- dula=1;
- dula=0;
- P0=tablewe[numdu];
- wela=1;
- wela=0;
- // numwe++;
- // if(numwe==6)
- // numwe=0;
- delay(2);
- }
- }
- void Timer0Init() //50毫秒@11.0592MHz
- {
- TMOD= 0x01; //設(shè)置定時(shí)器模式
- TL0 = 0x00; //設(shè)置定時(shí)初值
- TH0 = 0x4C; //設(shè)置定時(shí)初值
- TF0 = 0; //清除TF0標(biāo)志
- TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
- }
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void timer0() interrupt 1
- /*51單片機(jī)中using使用在C51編程中,
- 用來(lái)在中斷函數(shù)中指定工作寄存器區(qū),
- 工作寄存器共有4個(gè)區(qū),分別代表R0~R7地址是:
- 第0工作區(qū):00H~07H
- 第1工作區(qū):08H~0FH
- 第2工作區(qū):10H~17H
- 第3工作區(qū):18H~1FH
- using n,那么n就是第幾區(qū),使用方法如下:
- void exterint0() interrupt 0 using 1
- 這表示外部中斷0使用第1工作區(qū)地址。*/
- {
- TH0=(65536-50000)/256;//50毫秒產(chǎn)生一次中斷
- TL0=(65536-50000)%256;
- aa++;
- // if(aa==40)//2秒
- // {
- // aa=0;
- // num++;//num不需初始化,默認(rèn)為0
- // if(num==16)
- // num=0;
- // dula=1;
- // P0=table[num];
- // dula=0;
- // }
- }
復(fù)制代碼
|