单片机at80c51用 uvision4编程 的电路实验,要期末了,需要一个作品。小女子求各路大

帮助

简单,花样灯吧。uvision4编写。
内容:花样灯一般有两种方法实现:
1、程序循环执行 2、查表法
这里我们两种都使用一下
------------------------------------------------*/
#include<c8051f310.h>//包含寄存器头文件 //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

/*------------------------------------------------
花样表格
------------------------------------------------*/
unsigned char codeseg[]={0x7f,0xbf,0xdf,0xef,
0xf7,0xfb,0xfd,0xfe,
0xff,0xff,0x00,0x00,
0x55,0x55,0xaa,0xaa
};//rom允许情况可以无限添加

void Delay(unsigned int t); //函数声明

void SYSCLK_Init() //时钟初始化
{
OSCICN = 0x83;
}

void Port_Init() //端口初始化
{

//允许弱上拉,开启交叉开关
XBR1 = 0x40;
}

/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
unsigned char i; //定义一个无符号字符型

PCA0MD &= ~0x40; //关闭看门狗
SYSCLK_Init();
Port_Init(); //局部变量 i 取值范围 0~255
while(1)
{
P1=0xFE; //第1个LED亮
for(i=0;i<8;i++)
{
Delay(20000);
P1 <<=1;
}

P1=0x7F; //第8个LED亮
for(i=0;i<8;i++)
{
Delay(20000);
P1 >>=1;
}

P1=0xFE; //第1个LED亮
for(i=0;i<8;i++)
{
Delay(20000);
P1 <<=1;
P1 |=0x01;
}

P1=0x7F; //第8个LED亮
for(i=0;i<8;i++)
{
Delay(20000);
P1 >>=1;
P1 |=0x80;
}
//下面通过查表方法获得花样参数
for(i=0;i<16;i++)//查表可以简单的显示各种花样实用性更强
{
Delay(20000);
P1=seg[i];
}
}

}

/*------------------------------------------------
延时函数,含有输入参数unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
unsigned int i;
while(--t)
{
for(i=0;i<10;i++);
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-11
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar num)
{
P0=table[num];

void matrixkeyscan()
{
uchar temp,key;
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
break;
case 0xde:
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=4;
break;
case 0xdd:
key=5;
break;
case 0xbd:
key=6;
break;
case 0x7d:
key=7;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=8;
break;
case 0xdb:
key=9;
break;
case 0xbb:
key=10;
break;
case 0x7b:
key=11;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:
key=12;
break;
case 0xd7:
key=13;
break;
case 0xb7:
key=14;
break;
case 0x77:
key=15;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
}
void main()
{
P0=0;
P0=0xc0;
while(1)
{
matrixkeyscan();
}
}

扫描矩阵键盘 同时数码管显示键位数字追问

能把电路图也发一下嘛?非常感谢…最好是文件~

追答

复制代码生成.HEX文件加载到单片机里面 运行仿真  这里只有添加图片不能添加文件

本回答被提问者和网友采纳
相似回答