A. 怎麼用c語言寫單片機89C51的程序,要寫的程序是,0~99秒的秒錶,到99s停止,並且有滴的一聲
可根據以下程序修改:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a , b=0;
sbit wei1=P1.0;
sbit wei2=P1.1;
//共陰數碼管七段碼
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延時程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<164;j++)
{;}
}
}
void display( uchar a)) //顯示程序
{
P0= table[a/10];//十位
wei1=1;
Delay1ms(2) ;
wei1=0;
P0= table[a%10];//個位
wei2=1;
Delay1ms(2) ;
wei2=0;
}
void main(void )//主程序
{
TMOD=0x01;// 定時器1工作方式一
ET0=1;
EA=1;
TH0=(65536-50000)/256;//定時50ms
TL0=(65536-50000)%256;
TR0=1;
while(1)
{
display(b);
}
}
//中斷子程序
//因為 中斷程序很短,只花不到1ms,而中斷間隔50ms,完全沒必要關中斷
void Timer0(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==100)//100次是5 秒
{ a=0;b++;}
if(b==100)
{ b=0;}
}
B. 單片機:麻煩寫個程序,用C語言編寫,實現秒錶功能,如圖
#include <reg51.H>
#define uc unsigned char
uc code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰極0到9
uc ms50,s;//定義變數:50毫秒,秒
void timer0(void) interrupt 1 using 0
{
TH0 = 0x3c;//定時器賦予初值,定時0.05秒
TL0 = 0xb0;
ms50++;
if(ms50==20)//定時1秒
{
ms50=0;s++;
P0=table[s/10];//分解出十位
P2=table[s%10];//分解出個?
}
if(s==60)s=0;//超過1分鍾,恢復為0秒
}
void main(void)
{
ms50=0;
s=0;
TMOD = 1;//0000 0001,也就是T0(低四位有效),定時(第三位),方式1(最低位01)
TH0 = 0x3c;//定時器賦予初值,定時0.05秒
TL0 = 0xb0;
EA = 1; //總中斷允許
ET0 = 1;//定時中斷0,允許
TR0 = 1; //啟動定時器
while(1);
}
C. 用C語言編寫秒錶的程序(單片機控制的時鍾設計)
這個程序可以實現秒的計時,按鍵控制開始、暫停、清零功能,更多功能自己在看清程序的基礎上進行改進。
#include <reg51.H>
sbit P3_5 =P3^5;
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};
unsigned char second;
unsigned char keycnt;
unsigned int tcnt;
void main(void)
{
unsigned char i,j;
TMOD=0x02;
ET0=1;
EA=1;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
while(1)
{
if(P3_5==0)
{
for(i=20;i>0;i--)
for(j=248;j>0;j--);
if(P3_5==0)
{
keycnt++;
switch(keycnt)
{
case 1:
TH0=0x06;
TL0=0x06;
TR0=1;
break;
case 2:
TR0=0;
break;
case 3:
keycnt=0;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
break;
}
while(P3_5==0);
}
}
}
}
void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==4000)
{
tcnt=0;
second++;
if(second==100)
{
second=0;
}
P1=dispcode[second/10];
P2=dispcode[second%10];
}
}
D. 51單片機的4位數碼管做簡易秒錶C語言程序
我寫了個六位數碼管的程序,放到這里讓你參考一下,希望對你有用!
/*******************************************************************
數碼管時鍾秒錶篇
功能簡介:該程序有兩個功能:時鍾,秒錶。key1,key2和key3鍵用來調節
時鍾,根據LED的亮閃狀態調節時鍾(當八個LED全亮時為時鍾顯示狀態,第一
個LED亮時為調節小時狀態,第二個LED亮時為調節分鍾狀態,第三個LED亮時為
調節秒鍾狀態),key4鍵為秒錶功能鍵。
實施步驟:第一步:開啟定時器,完成數碼管時鍾走動功能;第二步:完成
數碼管時鍾調節功能;第三步:完成數碼管秒錶顯示功能。
操作提示:功能鍵有四個,第二行第以列按鍵為調節鍵,第二行第二列按鍵
為增加數據鍵,第二行第三列按鍵為減少鍵,第二行第四列按鍵為秒錶功能鍵。
********************************************************************
********************************************************************/
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep=P2^3;
sbit la=P2^6;
sbit wela=P2^7;
uchar code table1[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //數碼管位選編碼
uchar code table2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,
0x79,0x71,0x00};
uchar temp; //temp為按鍵變數
int light,flag; //flag用來控制數碼管顯示的狀態(顯示時鍾或者顯示秒錶),light用來控制時鍾和秒錶的led顯示
uchar shi2,ge2,shi1,ge1; //這四個變數用來分離出實參的十位和個位
uchar num,num1,num2,num3; //num,num1用來計數,num2用來控制調節的時分秒,num3用來改變秒錶狀態下的顯示狀態
int miao,fen,shi; //時鍾變數
uchar mfen,mmiao,mmmiao; //秒錶變數
void delay(uint z)
{
uint i,j;
for(i=0;i<z;i++)
for(j=0;j<110;j++);
}
void timeinit()
{
TMOD=0x11;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
TH1=(65536-4608)/256;
TL1=(65536-4608)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=0;
}
void timedisplay0() interrupt 1
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
num++;
if(num==20)
{
num=0;
miao++; //開啟時鍾功能
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
}
}
}
}
void timedisplay1() interrupt 3
{
TH1=(65536-4608)/256;
TL1=(65536-4608)%256;
num1++;
if(num1==2)
{
num1=0;
mmmiao++;
if(mmmiao==100) //開啟秒錶功能
{
mmmiao=0;
mmiao++;
if(mmiao==60)
{
mmiao=0;
mfen++;
if(mfen==60)
mfen=0;
}
}
}
}
void display(uchar add,uchar date) //數碼管顯示信息函數(帶有小數點)
{
shi2=date/10;
ge2=date%10;
P0=0xff;
wela=1;
P0=table1[add];
wela=0;
P0=0;
la=1;
P0=table2[shi2];
la=0;
delay(1);
P0=0xff;
wela=1;
P0=table1[add+1];
wela=0;
P0=0;
la=1;
P0=table2[ge2]|0x80;
la=0;
delay(1);
}
void display1(uchar add,uchar date) //數碼管顯示數據(不帶有小數點)
{
shi1=date/10;
ge1=date%10;
P0=0xff;
wela=1;
P0=table1[add];
wela=0;
P0=0;
la=1;
P0=table2[shi1];
la=0;
delay(1);
P0=0xff;
wela=1;
P0=table1[add+1];
wela=0;
P0=0;
la=1;
P0=table2[ge1];
la=0;
delay(1);
}
void keyscan()
{
P3=0xfd;
temp=P3; //第二行功能鍵
if(temp!=0xfd)
{
delay(5);
if(temp!=0xfd)
{
beep=0;
switch(temp)
{
case 0xed: num2++; //第一個按鍵用來控制調節時,分,秒
TR0=0;
light=1;
if(num2==4)
{
num2=0;
light=0;
TR0=1;
}
break;
case 0xdd: if(num2==1) //第二鍵用來增加數據
{
shi++;
if(shi==24)
shi=0;
}
if(num2==2)
{
fen++;
if(fen==60)
fen=0;
}
if(num2==3)
{
miao++;
if(miao==60)
miao=0;
}
break;
case 0xbd: if(num2==1) //第三個鍵用來減小數據
{
shi--;
if(shi==-1)
shi=23;
}
if(num2==2)
{
fen--;
if(fen==-1)
fen=59;
}
if(num2==3)
{
miao--;
if(miao==-1)
miao=59;
}
break;
case 0x7d: flag=1; //第四個鍵用來開啟秒錶
num3++;
TR1=1;
if(num3==1)
mfen=mmiao=mmiao=0; //清除上次殘留數據
if(num3==2)
TR1=0; //暫停秒錶
if(num3==3)
{
mfen=mmiao=mmmiao=0; //秒錶清零
TR1=0;
}
if(num3==4) //重新開啟秒錶
TR1=1;
if(num3==5) //暫停秒錶
TR1=0;
if(num3==6) //切換為顯示時鍾狀態
{
flag=0;
num3=0;
}
break;
}
while(temp!=0xfd)
{
temp=P3;
}
beep=1;
}
}
}
int main()
{
timeinit();
beep=1;
while(1)
{
keyscan();
if(light==0)
{
if(miao%2==0) //當數碼管顯示時鍾狀態時,八個led將以亮一秒滅一秒的狀態循環下去
P1=0;
else
P1=0xff;
}
else
{
if(num2==1)
P1=0xfe;
if(num2==2)
P1=0xfd;
if(num2==3)
P1=0xfb;
}
if(flag==0) //顯示時鍾
{
display(1,shi);
display(3,fen);
display1(5,miao);
}
else //顯示秒錶
{
display(1,mfen);
display(3,mmiao);
display1(5,mmmiao);
}
}
return 0;
}
E. 用51單片機設計3位led數碼顯示管作秒錶00.0-99.0求設計電路與c語言程序
#include "STC12C54.H"
#define uchar unsigned char
#define uint unsigned int
#define dataport P1//P1直接驅動數碼管的8個陽極
sbit wei1=P3^3;//再有三個管腳接3個三極體驅動數碼管的陰極
sbit wei2=P3^4;
sbit wei3=P3^5;
uint a=0;//中斷次數計數,一次50ms,20次為1 秒
//共陰數碼管七段碼
uchar TABLE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//延時子程序
void delay1ms(uint t)
{
uint i,j,k;
for(i=t;i>0;i--)
for(j=15;j>0;j--)
for(k=27;k>0;k--);
}
//顯示子程序
void display(uint n)
{
uchar a1,a2,a3;
a1=n/100%10;
a2=n/10%10;
a3=n%10;
wei1=1;
dataport=TABLE[a1];
delay1ms(1);
wei1=0;
dataport=0x80|TABLE[a2];//這里多個小數點
delay1ms(1);
wei3=1;
dataport=TABLE[a3];
delay1ms(1);
wei3=0;
}
void init(void)
{
TMOD=0X01;
TH0=(655536-50000)/256;//定時50ms
TL0=(655536-50000)%256;
EA=1;
ET0=1;
TR0=1;
P1M0=0;
P1M1=0xff;//P1口設為推挽輸出,驅動能力強
P3M0=0;
P3M1=0x38;//P3.3P3.4 P3.5口設為推挽輸出
}
void main(void)//主程序
{
init();//初始狀態設定
while(1)
{
display(a/2);//顯示計數值,以十分之一秒為單位
}
}
void timer0(void)interrupt 1//中斷子程序
{
TH0=(655536-50000)/256;
TL0=(655536-50000)%256;
a++;
if(a==1980)a=0;//1980次是99秒
}
F. 單片機怎麼設計一個0-9的一位數秒錶,用定時器實現 c語言程序及其注釋
#include
#define
uchar
unsigned
char
uchar
distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar
times,num;
void
t0isr()
interrupt
1
{
TH0=(65536-50000)/256;
//重置初值
TL0=(65536-50000)%256;
times++;
if(times>=20)
//1秒是否到
{
times=0;
num--;
//1秒到後,計數值減1
P0=distab[num];
//顯示
if(num==0)num=9;
//到0後再賦值為9
}
}
main()
{
TMOD=0x01;
//定時器0為16為定時
TH0=(65536-50000)/256;
//50毫米中斷一次
TL0=(65536-50000)%256;
ET0=1;
EA=1;
num=9;
times=0;
TR0=1;
while(1);
}
G. 用52單片機C語言編寫程序,實現00~59計時。要求用T0,工作方式1。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit la=P2^6; //段選
sbit wela=P2^7; //位選
uchar shi,ge,num1,num2; //變數
uchar code table[]={0x3f,0x06,0x5b,0x4f, //共陰極字型碼
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint x) //延時子程序
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
void init()
{
TMOD=0x01; //設置定時器0的工作方式
TH0=(65536-50000)/256; //裝初值
TL0=(65536-50000)%256;
EA=1; //開總中斷
ET0=1; //開定時器0中斷
TR0=1; //啟動定時器0
}
void display() //顯示子程序
{
la=1;
P0=table[ge]; //送段選數據
la=0;
P0=0xff; //送位選數據前關閉所有顯示
wela=1;
P0=0xfe; //送位選數據
wela=0;
delay(5); //延時
la=1;
P0=table[shi];
la=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(5);
}
void main()
{
init();
while(1)
{
display();
}
}
void timer() interrupt 1
{
TH0=(65536-50000)/256; //重裝初值
TL0=(65536-50000)%256;
num1++;
if(num1==20) //到了20次,1秒時間到
{
num1=0; //清0重新計數
num2++;
if(num2==60)
num2=0;
P1=0x00;
delay(500);
P1=0xff;
shi=num2/10; //把一個2位數分離後分別送數碼管顯示
ge=num2%10; //十位和個位
}
}
試了的,可以放心,採納吧!