问题遇到的现象和发生背景
本人51单片机初学者一枚,最近正在做相关的实训,然后问题在下面,代码自己已经纯原创编出来了,并且无报错,但是仿真实现不了相关功能,求hxd帮我看看问题出现在哪里,并且仿真图P1口不知道为什么全都没有电流
这里是题目:
(1)当未按下任何按键时,实现自己的学号动态扫描显示;
(2)当按下Key1时,启动定时器0,并设置定时方式1,并通过IO口输出1000Hz,并采用示波器观察结果;
(3)当按下Key2时,启动定时器1,并设置计数方式1,并采用7段数码管进行显示计数个数(按键方式输入);
(4)当按下Key3时,关闭所有定时器。
(5)请提供硬件分配表格,并绘制电路图。
问题相关代码,请勿粘贴截图
#include <REGX51.H>
unsigned char code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code table2[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0XFE};
unsigned char code xuehao[]={0x66,0x5b,0x3f,0x3f,0x66,0x4f,0x3f,0x7d};
sbit DU=P0;
sbit WE=P2;
sbit k1=P3^4;
sbit k2=P3^5;
sbit k3=P3^2;
sbit DA=P1^7;
sbit MA=P1;
void delay(unsigned int t)
{
unsigned int j=0;
for(;t>0;t--)
for(j=0;j<125;j++);
}
void timer0()interrupt 1//定时中断1
{
DA=!DA;
TH0=0Xfe; //题(2)示波器显示方波
TL0=0X0c;
}
void timer1()interrupt 3//定时中断2
{
TH0=0XFC;
TL0=0X18;
if(k1==0)
{
delay(10);
if(k1==0)
{
while(1)
{
int i; //题(3)计数
i++;
MA=table1[i];
}
}
}
}
wbzd1() interrupt 0//外部中断1
{
TMOD=0x11;
TH0=0Xfe;
TL0=0X0c;
TH1=0XFC;
TL1=0X18;
TR0=TR1=1;
ET0=ET1=1;
EA=1;
if(k1==0)
{
delay(10);
if(k1==0)
{
IT0=1; //打开定时中断1
EX0=1;
}
}
if(k2==0)
{
delay(10);
if(k2==0)
{
IT1=1; //打开定时中断2
EX1=1;
}
}
}
wbzd2() interrupt 2//外部中断2
{
EA=0; //题(4)关闭所有定时器
}
void int0()//执行外部中断1
{
IT0=1;
EA=1;
EX0=1;
}
void int1()//执行外部中断2
{
IT1=1;
EA=1;
EX1=1;
}
void main()
{
while(1)
{
int i;
for(i=0;i<=8;i++)
{
P0=xuehao[i];
P2=table2[i]; //题(1)学号显示
delay(500);
if(k1==0|k2==0)
{
int0();
}
if(k3==0)
{
int1();
}
}
}
}
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
仿真实现题目功能