求个简单的单片机程序,最好能有电路图

不要跑马灯和LED顺序显示的那个了,多谢了

#include"reg51.h"

#defineuchar unsigned char

uchardisplay_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

 

uchartime[]={0,0,0,0};

 

voiddelay05ms(void)

{

 uchar i;

 for(i=250;i>0;i--);

}

 

voiddisplay()

{

  uchar i,k;

  k=0x80;

  for(i=0;i<8;i++)

  {

  P2=0;

  P0=display_code[time[i]/10];

  P2=k;

  k=k>>1;

  delay();

P0=display_code[time[i]%10];

  P2=k;

  k=k>>1;

  delay();

}

  P2=0;

}

 

voidcalc()

{

time[2]++;

if(time[2]>59)

{

time[2]=0;

time[1]++;

if(time[1]>59)

{

time[1]=0;

time[0]++;

if(time[0]>23)

{

time[0]=0;

}

}

}

 

voidmain(void)

{

uchari;

while(1)

{

for(i=0;i<250;i++)

{

display();

}

calc();

}

}

简易电子时钟。。

追问

这个不错,是51单片机的吗,如果能解释下代码就好了,抱歉,我是小白

追答

#include"reg51.h" //包含的库文件
#define uchar unsigned char //定义常量 uchar代表unsigned char
uchardisplay_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
//上面这行定义是共阳极数码管显示0-9,A-F
uchartime[]={0,0,0,0}; //定义中间就是,用于计算时分秒

voiddelay05ms(void) // 这个函数定义0.5s左右的时间
{
uchar i;
for(i=250;i>0;i--);
}

voiddisplay() //这是显示的程序
{
uchar i,k;
k=0x80; //
for(i=0;i>1;//移到下一位显示,以下类同
delay();
P0=display_code[time[i]%10];
P2=k;
k=k>>1;
delay();
}
P2=0;
}

voidcalc()//这是上电后计算时分秒之关系
{
time[2]++;//秒加1
if(time[2]>59)//当秒大于59时
{
time[2]=0;//秒等于0
time[1]++;//分钟加1
if(time[1]>59) //分大于59时
{
time[1]=0;//分钟为0
time[0]++;//小时加1
if(time[0]>23) //小时大于23时,
{
time[0]=0;//小时为0
}
}
}

voidmain(void) //主函数
{
uchari;
while(1)
{
for(i=0;i<250;i++)
{
display(); //调用显示程序
}
calc();//调用计算函数
}
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-09-22
1602显示
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="1234567890";
//uchar code table1[]="0987654321";
sbit RS = P2^4; //定义端口
sbit RW = P2^5;
sbit EN = P2^6;
int num;

void delay(uint z) //延时
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=110;y>0;y--);
}
}

void write_com(uchar com) //写命令
{
RS=0;
P0=com;
delay(5);
EN=1;
delay(5);
EN=0;
}
void write_date(uchar date)
{
RS=1;
P0=date;
delay(5);
EN=1;
delay(5);
EN=0;
}
void init()
{
RW=0; //必须写0
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
main()
{
init();
while(1)
{
write_com(0x80+1);
for( num=0;num<10;num++)
{
write_date(table[num]);
delay(5);
}
}
}
第2个回答  2014-09-22
#include <reg51.h>
unsigned long count = 0;
unsigned long show_count = 0;

unsigned char digest[11] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x83,0xF8,0x80,0x98,0xC6};
unsigned char scancode[8] = {0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80};

sbit P1_0 = P1^0;

#define HIGH_BIT 0xFB
#define LOW_BIT 0x80

void Disp(int id)
{
P2 = 0;
P2 = scancode[id];
P0 = 0xff;
switch (id)
{
case 0: P0 = digest[(show_count / 10000000) % 10]; break;
case 1: P0 = digest[(show_count / 1000000) % 10]; break;
case 2: P0 = digest[(show_count / 100000) % 10]; break;
case 3: P0 = digest[(show_count / 10000) % 10]; break;
case 4: P0 = digest[(show_count / 1000) % 10]; break;
case 5: P0 = digest[(show_count / 100) % 10]; break;
case 6: P0 = digest[(show_count /10) % 10]; break;
case 7: P0 = digest[show_count % 10]; break;
}
}

void Timer0() interrupt 1
{
static unsigned int scount = 0;
static unsigned char rcount = 0;
TH0 = HIGH_BIT;
TL0 = LOW_BIT + 34;
scount++;

if (scount == 800) //1 second
{
scount = 0;
show_count = count;
count = 0;
}else if (scount % 2 == 0)
{
rcount++;
if (rcount == 8) rcount = 0;
Disp(rcount);
}

count += (TH1 << 8) | TL1;
TH1 = TL1 = 0;
}

void main()
{
TMOD = 0x51;
// 11.0592 Mhz 1.152 ms
TH0 = HIGH_BIT;
TL0 = LOW_BIT;
//initalize output counter
TH1 = 0;
TL1 = 0;

EA=1;
ET0=1;
TR0=1;
TR1=1;

for (;;);
}
请采纳。
第3个回答  2014-09-22
你要什么图?proteus的还是DXP的?追问

我是小白,就像楼上的就好

求个简单的单片机程序,最好能有电路图
include"reg51.h"defineuchar unsigned char uchardisplay_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};uchartime[]={0,0,0,0};voiddelay05ms(void){ uchar i;for(i=250;i>0;i--);} voiddisplay(){ uchar i,k;k=0x80...

如何自己做一个最简单的单片机?希望各位大神能把制作要用的元器件的个...
复位电路:上电复位对于单片机来说是必不可少的,复位电路只需要一个10uf电解电容以及一个10k下拉电阻,如果测试时需要手动复位的机制可以加一个轻触开关,RST端接单片机的RST引脚即可,电路图如下:晶振电路:晶振电路也很简单,即一个无源晶体振荡器加上两个起振电容,起振电容的大小根据晶振的频率决定,...

求写程序!89C52单片机,按按键1点亮LED,按按键2熄灭LED,两个按键另一...
求写程序!我的是89C52单片机,想用两个按键和一个LED来实现,按下按键1点亮LED,按下按键2熄灭LED,两个按键另一端是接5V,LED另一端也是接5V。最好配上原理图。感激不尽 提醒一下:两个按键另一端接5V地!!!电路参考如下:代码参考如下:include<reg52.h> sbit LED = P2^7;define ON0 ...

求一个用单片机设计测量电阻电容的电路图
如果是51单片机,最简单但切实可行的电路图方案如下:测电阻:接一个参考电容到p0.0和地之间,待测电阻一头接p1.0,另一头接p0.0,测电容阻:接一个参考电阻到p0.1和p1.1地之间,待测电容一头接p0.1,另一头接地。

单片机数字时钟程序及电路图
_delay_ms(1);LCD_Write_Command(0x0c);\/\/显示模式设置:显示开,无光标,光标不闪烁 _delay_ms(1);LCD_Write_Command(0x01);\/\/清屏幕指令,将以前的显示内容清除 _delay_ms(1);} \/ 函数名称:LCD_POS 输 入:uchar pos 输 出:无 功 能:字符显示位置 \/ void LCD_POS(uchar pos)...

求一个简单的单片机用数码管显示计时60秒的C语言程序,程序一定要带有解...
\/***程序仿真用89c52 数码管用共阳极数码管 P0口段选,P3.0和P3.1位选 定时器2用法见百度“T2CON”***\/ include<reg52.h> define uint unsigned int define uchar unsigned char uchar code num[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; \/\/共阳极...

...控制步进电机正反转,简单易懂的C语言程序,最好带注释,步进电机部分...
第1行设置由输入端X1作为启动,Y1输出3万个脉冲,脉冲频率600赫兹(每秒600个脉冲的频率),由于只有Y1输出脉冲,没有设置方向输出端,所以电机正转。第3、4行由X2同时启动两行作为反转,Y1输出3万个脉冲,频率为800赫兹,Y1输出脉冲的同时方向输出端Y2同时输出方向信号,因此,电机反转。反转的3万个...

求用C语言编写一个单片机89C51电子时钟程序,有时,分,秒,还有电路图
uchar starts_time[7]={0x00,0x10,0x22,0x20,0x05,0x04,0x10}; \/\/初始化后设置uchar Sec;uchar Cent;uchar Hour;uchar Year;uchar Day;uchar Week;uchar Month;\/***\/ \/\/根据选择调整相应项目void Set(uchar sel,uchar sel_1) { uchar address,time; uchar max,min; if(sel==1)...

AT89S51单片机c语言程序单片机最小系统的硬件原理接线图
为深入理解AT89S51单片机的硬件原理与接线图,本篇将逐一解析关键步骤,以助于构建单片机最小系统。首先,电源接线至关重要。VCC引脚(PIN40)应接入电源正极,GND引脚(PIN20)则连接至电源地线,确保单片机正常供电。为避免电源纹波对系统性能造成干扰,建议在VCC与GND之间并联一个0.1uF的退耦电容,有效滤...

求一个关于单片机的蜂鸣器的C语言程序,如果好,可行的话有追加分~
6. 报警产生器 1. 实验任务 用P1.0输出1KHz和500Hz的音频信号驱动扬声器,作报警信号,要求1KHz信号响100ms,500Hz信号响200ms,交替进行,P1.7接一开关进行控制,当开关合上响报警信号,当开关断开告警信号停止,编出程序。2. 电路原理图 图4.6.1 3. 系统板上硬件连线 (1. 把“单片机...

相似回答