标题:
proteus 8.12单片机仿真的中断与数码管点亮
[打印本页]
作者:
joe_2019
时间:
2021-11-27 18:47
标题:
proteus 8.12单片机仿真的中断与数码管点亮
51单片机的中断学习与数码管的点亮,仿真过程中遇到一个问题,8.9之前仿真时,点亮数码管顺序为先段选后位选,到8.12后居然全是乱码,找了好久找不到毛病,最后网上查到改成先位选再段选即可,解决问题。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
Snipaste_2021-11-27_18-39-57.png
(68.08 KB, 下载次数: 83)
下载附件
2021-11-27 18:43 上传
单片机源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DUAN=P2^6;
sbit WEI=P2^5;
sbit LED=P2^1;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//共阴极数码管编码
void delayms(uint xms);
void display(int,int);
int num,num1,num2,shi,ge;
void main()
{
TMOD=0X11; //设置定时器0和1的工作方式
TH0=(66536-50000)/256; //T0装初值
TL0=(66536-50000)%256;
TH1=(66536-50000)/256; //T1装初值
TL1=(66536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
while(1)
{
display(shi,ge);
}
}
void display(int shi, int ge)
{
WEI=1;
P0=0Xfd;
WEI=0;
DUAN=1;
P0=table[shi];
DUAN=0;
P0=0Xff;
delayms(5);
WEI=1;
P0=0Xfe;
WEI=0;
DUAN=1;
P0=table[ge];
DUAN=0;
P0=0Xff;
delayms(5);
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for (j=100;j>0;j--);
}
void T0_time() interrupt 1
{
TH0=(66536-50000)/256; //T0装初值
TL0=(66536-50000)%256;
num1++;
if(num1==4)
{
num1=0;
LED=~LED;
}
}
void T1_time() interrupt 3
{
TH1=(66536-50000)/256; //T1装初值
TL1=(66536-50000)%256;
num2++;
if(num2==20)
{
num2=0;
num++;
if(num==60)
num=0;
shi=num/10;
ge=num%10;
}
}
复制代码
仿真代码51hei附件下载:
interruption case 3-5-2.7z
(102.39 KB, 下载次数: 9)
2021-11-27 18:43 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1