对C51进行了扩展,包括一个373,两个244,一个ADC0808(0809protues里面没有拿0808代替是一样的),一个6264。
这个实验是仪电学院嵌入式的实验三,完美符合实验要求。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51单片机扩展,还有8个ADC采集电压通道
暂停protues可以看到6264芯片内部的采集数值
单片机源程序如下:
- #include<reg51.h>
- #include<stdio.h>
- unsigned char xdata ADC0809[0x8] _at_ 0x7FF8;
- unsigned char xdata RAM[0x8] _at_ 0xC000;
- unsigned char xdata *io;
- unsigned char led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
- unsigned char flag=0;
- unsigned char key,i,num,rec;
- unsigned int dat,z1,z2,z3,z4;
- sbit clk=P3^2;
- sbit com1=P3^0;
- sbit com2=P3^1;
- sbit com3=P3^4;
- sbit com4=P3^5;
- void delay(int m)
- {
- while(m--);
- }
- void main()
- {
- TMOD=0x02;
- TH0=216;
- TL0=216;
- TR0=1;
- IT1=1;
- EA=1;
- ET0=1;
- EX1=1;
- io=0xBFFF;
- while(1)
- {
- key=*io;
- if(key!=0xFF)
- {
- for(i=0;i<=7;i++)
- {
- if((key%2)==0)
- {
- num=i;
- }
- key=key>>1;
- }
- ADC0809[num]=0x00;
- while(!flag);
- rec=ADC0809[num];
- RAM[num]=rec;
-
- dat=rec;
- dat=dat*196;
- z1=dat/10000;
- z2=(dat/1000)%10;
- z3=(dat/100)%10;
- z4=(dat/10)%10;
- flag=0;
- com1=0;com2=0;com3=0;com4=0;
- com1=1;com2=0;com3=0;com4=0;
- P1=led[z1]&0x7F;
- delay(100);
- com1=0;com2=0;com3=0;com4=0;
- com1=0;com2=1;com3=0;com4=0;
- P1=led[z2]|0x80;
- delay(100);
- com1=0;com2=0;com3=0;com4=0;
- com1=0;com2=0;com3=1;com4=0;
- P1=led[z3]|0x80;
- delay(100);
- com1=0;com2=0;com3=0;com4=0;
- com1=0;com2=0;com3=0;com4=1;
- P1=led[z4]|0x80;
- delay(100);
- }
- else
- {
- com1=0;com2=0;com3=0;com4=0;
- }
- }
- }
- void int1() interrupt 2 using 0
- {
- flag=1;
- }
- void time0() interrupt 1 using 2
- {
- clk=~clk;
- }
复制代码
附件包含内容
Keil代码与Proteus8.8仿真下载:
three.zip
(435.03 KB, 下载次数: 52)
|