⑴ 学校的课程设计,用proteus单片机和keil设计一个LED数码管显示的秒表,如下
你的程序有问题,仿真图不要用三极管驱动,反而不显示。如下画法就行,那4个按键不变,没有画。
程序中的按键处理,方法不当。
先改成如下的程序,先调出能显示,然后你自己再增加按键功能。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit START = P1 ^0;
sbit STOP = P1 ^1;
sbit RESET = P1 ^2;
sbit dp = P0 ^7;
sbit w1 = P2 ^6;
sbit w2 = P2 ^7;
uchar aa,temp,STOPFLAG,STARTFLAG,miaoshi,miaoge;
uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码表错误
void display();
void delay( uint z);
void init();
void main()
{
init();
while(1)
{
display();//不用带参数
if(aa == 20)
{
aa = 0;
temp ++;
if(temp == 60)
{
temp = 0;
}
}
}
}
void delay(uint z)
{ uchar x,y;
for(x = z; x > 0; x--)
for(y = 110 ; y > 0; y --);//y不能小于110
}
void display()//不用带参数
{
miaoshi = temp/10;
miaoge = temp%10;
w1 = 1;
P0 = table[miaoshi];
delay(2);
w1 = 0;
w2 = 1;
P0 = table[miaoge];
delay(2);
w2 = 0;
}
void init()
{ TMOD = 0x01;
TH0 = (65536 - 50000)/256;
TL0 = (65536 - 50000)%256;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void timer0() interrupt 1
{ TH0 = (65536 - 50000)/256;
TL0 = (65536 - 50000)%256;
aa ++;
}
⑵ 单片机数码管的动态显示问题,求解
我的代码会有很多bug,不过相当于免费的东西,你也就别期待多么好了。
可以参考一下。按照我硬件图来的。
#include<reg51.h>
unsigned char tube1[]={0x5b,0x3f,0x5b,0x3f};//数码管初始状态2020 字符码
unsigned char tube2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极字符码
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
sbit led1=P3^0;
sbit led2=P3^1;
sbit led3=P3^2;
sbit led4=P3^3;
void delay(unsigned int time);
void main()
{
unsigned char i,W;
while(1)
{
if(key1==1&key2==1&key3==1) //初始状态
{
W=0x01;
P3=0X00;
for(i=0;i<4;i++)
{
P1 =W;
W<<=1;
P0=tube1[i];
delay(10);
P1 =0x00;
}
}
if(key1==0) // 按键1按下
{
delay(10);
if(key1==0)
{
led1=1;
led2=0;
led3=0;
led4=0;
W=0x8;
for(i=0;i<10;i++)
{
if(key2==0|key3==0|key4==0)
break;
P1 =W;
P0=tube2[i];
delay(1000);
P1 =0x00;
}
}
while(!key1);
delay(10);
while(!key1);
}
if(key2==0) //按键2按下
{
delay(10);
if(key2==0)
{
led1=0;
led3=0;
led2=1;
led4=1;
W=0x4;
for(i=0;i<10;i=i+2)
{
if(key1==0|key3==0|key4==0)
break;
P1 =W;
P0=tube2[i];
delay(1000);
P1 =0x00;
}
}
while(!key2);
delay(10);
while(!key2);
}
if(key3==0) //按键3按下
{
delay(10);
if(key3==0)
{
led1=1;
led3=1;
led2=0;
led4=0;
W=0x2;
for(i=1;i<10;i=i+2)
{
if(key2==0|key1==0|key4==0)
break;
P1 =W;
P0=tube2[i];
delay(1000);
P1 =0x00;
}
}
while(!key3);
delay(10);
while(!key3);
}
}
}
void delay(unsigned int time)
{
unsigned int j=0;
for(;time> 0;time--)
for(j=0;j<125;j++);
}
⑶ 51单片机“LED滚动显示0123456789AbCdEF” .用keil软件调试,而且一次八位。
是这样的六位换八位,还是六段管换七段管???其实两种都挺简单的
⑷ 用Keil uVision软件编一个让4位LED数码管显示数字的程序
#include<reg52.h>
#include<intrins.h>
sbitwei=P1^0;
sbitan=P1^1;
intw[8]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
inti,tt;
inttemp;
voidmain()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
tt=0;
i=0;
temp=0xfe;
an=1;
P0=0xfe;
an=0;
wei=1;
P0=0x06;
wei=0;
while(1)
{if(tt==20)
{ tt=0;
i++;
if(i==8)
i=0;
wei=1;
P0=w[i];
wei=0;
an=1;
temp=_crol_(temp,1);
P0=temp;
an=0;
}
}
}
voidtimer()interrupt1
{TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
}
这是我的protues电路图,你可以看看,由于可简化,我没画晶振和复位电路哈
⑸ Keil编程 实现:使用51单片机,实现LED温度的显示,同时设定温度界限,当超过步进电机正转,低于则反转
程序还要自己整合,毕竟自己编的才有成就感,我给你提点思路,液晶显示程序和温度控制程序都看懂的情况下,你可以在定时中断中扫描温度,并判断是否达到阀值,设置一个Bit型的flag,然后在主程序中一直调用步进电子子程序,同样,步进电机中的正转反转由上面提到的flag进行判断。有什么问题继续追问就行
⑹ 用keil编一个led灯闪烁程序
点亮 小灯的程序我们第二课完成了,就是让 LED = 0。熄灭小灯的程序也很简单,就是 LED = 1。点亮和熄灭都会了,那么如果我们在亮和灭中间加个延时,反复不停的点亮和熄灭小灯,就成了闪烁了。
我们首先复习一下 Keil 写程序的过程,建立工程-->保存工程-->建立文件-->添加文件到工程-->编写程序-->编译-->下载程序。
LED 对于有 C 基础的同学来说很简单,那我先写出来,大家可以先看下。没有C 语言基础的同学也可以跟着抄一遍,下节课我会补充部分 C 语言基础知识,这样你先抄一遍后,再跟着看 C 语言基础知识的时候也比较容易理解透彻。
纯文本复制
#<reg52.h>
sbit LED = P0^0;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
main(){ //void 即函数类型
//以下为声明语句部分
unsigned int i = 0; //定义一个变量 i,并赋初值 0
//以下为执行语句部分
ENLED = 0; //U3、U4 两片 74HC138 总使能
ADDR3 = 1; //使能 U3 使之正常输出
ADDR2 = 1; //经 U3 的 Y6 输出开启Q16
ADDR1 = 1;
ADDR0 = 0;
(1){
LED = 0; //点亮小灯
for (i=0; i<30000; i++); //延时一段时间
LED = 1; //熄灭小灯
for (i=0; i<30000; i++); //延时一段时间
}
}
大家把这个程序编译一下,下载到里,就会发现 LED2 这个小灯会闪烁了。
⑺ Keil四个LED灯点亮程序
keil使用教程编写第一个led灯程序
1、新建一个空文件夹
2、打开keil-->newuVisionproject
3、选择目录,命名文件
4、选择芯片
5、添加文件
6、编写C51单片机程序
7、生成可以加载单片机里的hex文件
8、编译生成hex文件
9、将hex文件导入单片机
⑻ Keil编程:51单片机键盘控制LED
刚开始 输出0X55 或0xAA即可
然后判断按键是否按下
单灯流水 for(i=0;i<8;i++)
{ P1=0x01>>i;delayms(200);}
双灯流水
for(i=0;i<8;i+=2)
{ P1=0x03>>i;delayms(500);}
呼吸灯不知怎样呼吸,假如一个灯渐亮渐暗程序如下:
for(i=0;i<100;i++)
{ LED=0;delay100us(i);LED=1;delay100us(100-i);}
假设LED=0是点亮,那么上面就逐渐变亮过程
一亮一灭是10ms 250次就是2·5S
逐渐变暗过程和上面一样,只不过把LED=0 LED=1相互颠倒一下就是了
⑼ 单片机软件keil怎么用
1.首先,开启我们的keil软件,具体的安装步骤就不做太多的介绍了;
2.开启后,点击菜单栏上的Project选项,创建我们的工程,
3.点击后,在箭头所指的文本框中输入你的芯片型号进行查找,...
4.选中芯片点击Ok即可,在左侧的文本框中,选中图中选项右键选择Add New...选项,...
5.选择.c的文件,输入文件名以及文件的存储目录,