利用单片机串口,设计两位数的秒计数(0-59)?

作者&投稿:延度 (若有异议请与网页底部的电邮联系)
利用单片机设计59秒计时器~

共阳共阴只是你在选COM端时给其高低电平的问题无关大雅
我给一段PIC单片机的程序让你参考一下,如果你看懂的话应该能做出来了
#include
#include
//此程序实现计时秒表功能,时钟显示范围00.00~99.99秒,分辨度:0.01秒
unsigned char s0,s1,s2,s3;
//定义0.01 秒、0.1 秒、1秒、10秒计时器
unsigned char s[4];
unsigned char k ,data ,sreg;
unsigned int i;
const table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90};
//不带小数点的显示段码表
const table0[10]={0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10};
//带小数点的显示段码表
//TMR0初始化子程序
void tmint()
{
T0CS=0; //TMR0工作于定时器方式
PSA=1; //TMR0不用分频
T0IF=0; //清除TMR0的中断标志
T0IE=1; //TMR0中断允许
}
//spi显示初始化子程序
void SPIINIT()
{
PIR1=0;
SSPCON=0x30;
SSPSTAT=0xC0;
//设置SPI的控制方式,允许SSP方式,并且时钟下降沿发送。与"74HC595,当其
//SCLK从低到高跳变时,串行输入寄存器"的特点相对应
TRISC=0xD7; //SDO引脚为输出,SCK引脚为输出
TRISA5=0; //RA5引脚置为输出,输出显示锁存信号
}
//系统其它部分初始化子程序
void initial()
{
TRISB1=0;
TRISB2=0;
TRISB4=1;
TRISB5=1; //设置与键盘有关的各口的输入输出方式
RB1=0;
RB2=0; //建立键盘扫描的初始条件
}
//SPI传输数据子程序
void SPILED(data)
{
SSPBUF=data; //启动发送
do {

}while(SSPIF==0);
SSPIF=0;
}
//显示子程序,显示4位数
void dispaly()
{
RA5=0; //准备锁存
for(k=4;k>0;k--)
{
data=s[k-1];
if(k==3) data=table0[data];//第二位需要显示小数点
else data=table[data];
SPILED(data); //发送显示段码
}
for(k=0;k<4;k++)
{
data=0xFF;
SPILED(data); //连续发送4个DARK,使显示好看一些
}
RA5=1; //最后给锁存信号,代表显示任务完成
}
//软件延时子程序
void DELAY()
{
for(i = 3553; --i ;) continue;
}
//键扫描子程序
void KEYSCAN()
{
while(1){
while(1)
{
dispaly(); //调用一次显示子程序
if ((RB5==0)||(RB4==0)) break;
}
DELAY(); //若有键按下,则软件延时
if ((RB5==0)||(RB4==0)) break;//若还有键按下,则终止循环扫描,返回
}
}
//等键松开子程序
void keyrelax()
{
while(1){
dispaly(); //调用一次显示子程序
if ((RB5==1)&&(RB4==1)) break;
} //为防止按键过于灵敏,每次等键松开才返回
}
//系统赋值初始化子程序
void inizhi()
{
s0=0x00;
s[0]=s0;
s1=0x00;
s[1]=s1;
s2=0x00;
s[2]=s2;
s3=0x00;
s[3]=s3; //s0=s1=s2=s3=0,并放入显示缓冲数组中
sreg=0x00; //tmr0中断次数寄存器清0
}
//中断服务程序
void interrupt clkint(void)
{
TMR0=0X13; //对TMR0写入一个调整值。因为写入TMR0后接着的
//两个周期不能增量,中断需要3个周期的响应时间,
//以及C语言自动进行现场保护要消耗周期
T0IF=0; //清除中断标志
CLRWDT();
sreg=sreg+1; //中断计数器加1
if(sreg==40) //中断次数为40后,才对S0,S1,S2,S3 操作
{
sreg=0;
s0=s0+1;
if(s0==10){
s0=0 ;
s1=s1+1;
if(s1==10){
s1=0 ;
s2=s2+1;
if(s2==10){
s2=0;
s3=s3+1;
if(s3==10) s3=0 ;
}
}
}
}
s[0]=s0;
s[1]=s1;
s[2]=s2;
s[3]=s3;
}
//主程序
main()
{
OPTION=0XFF;
tmint(); //TMR0初始化
SPIINIT(); //spi显示初始化
initial(); //系统其它部分初始化
di(); //总中断禁止
while(1) {
inizhi(); //系统赋值初始化
KEYSCAN(); //键扫描,直到开始键按下
keyrelax(); //等键松开
ei(); //总中断允许
TMR0=0X08;
KEYSCAN(); //键扫描直到停止键按下,在键扫描时有显示
keyrelax() ; //等键松开
di(); //总中断禁止
KEYSCAN(); //键扫描到清0键按下,在键扫描时有显示
keyrelax() ; //等键松开
}
}

看手册啊,没用过这东西
不过估计是中断里处理不对,中断先清中断标志,不用重新配置计时器。

利用单片机串口,驱动两位数码管显示秒计数,可以用两片74LS164串联接在串口引脚RXD、TXD上,串口工作在方式0,这样,用串口发送方式输出两位数码管显示秒计数。如下仿真图。




求单片机简易数字钟的课程设计 :要求自制一个单片机最小系统,包括串口...
求单片机简易数字钟的课程设计 :要求自制一个单片机最小系统,包括串口下载、复位电路,采用内部定时器计 5 采用外部时钟芯片DS1302,设计一个具有秒、分、日、月、年的数字时钟,采用四位一体数码管显示相关信息,秒、分显示一页,日、月显示一页,年显示一页。QQ1282031855... 采用外部时钟芯片DS1302,设计一个具有...

题目:两个单片机利用串行口方式1进行串行单工通信
}\/***\/\/* 发送数据到串口 *\/\/***\/void Send_one_byte(uchar dat){ES =0;TI=0;SBUF = dat; \/\/SUBF接受\/发送缓冲器(又叫串行通信特殊功能寄存器) while(!TI

用89C52单片机与PC串口通信,谁能帮忙写代码?要用C语言编写的_百度知 ...
单片机定时发送字串给PC机 include < reg52.h > include < intrins.h > include < stdio.h > define uchar unsigned char define uint unsigned int \/ 延时函数 \/ void delay(int ms){ uchar i;while(ms--){ for(i=0;i<250;i++){ _nop_();_nop_();_nop_();_nop_();} } }...

51单片机与PC机的串口通讯设计的一个问题
1、用串口调试助手 2、用PC机通过串口控制8952让端口上的LED亮灭很简单,如只需发送0XFE内容,再让P0=SUBF就可让P0口上的一个LED灭。3、若要实现双工方式,设置SCON=0X50,也就是让REN=1即可,4、若要有语音提示,在主程序相应位置加一发音程序即可。以上希望能帮到你。

51单片机如何进行串口通信,并制定通信协议.
A和B的通信,你先调试一台机器,比如A,和电脑连接,用串口调试助手(网上找)查看A的收发数据是否正常,然后A和B联调 串口通信距离不远一般不会出错,波特率较低,除了奇偶校验,你可以指定一个简单的通信协议,来验证是否数据正常 这类程序网上很多,你不清楚就搜索51串口程序,出来一大堆,找个有注释的看看,...

用51单片机怎么通过独立按键实现串口通信 比如说你按下一个键S1 在串 ...
用键盘检测程序检测按键按下,检测到按下就用串口向上位机发送字符“1”的ASCII码值,这样在串口调试助手里就可以看到字符“1”了

我想利用串口,向单片机的P1.0发送一串字节,比如00 E0 1C 1C E0 F8...
仅仅一个P1.0恐怕不行,还需要一个时钟CLK口 才比较好控制。不然会有一定误差产生误码。如果仅仅是P1.0的话,可以用定时器来做,因为波特率是9600,所以每一位信号占用时间约为是104us,因此编程如下:KEYSTA EQU P3.0 KEYEND EQU P3.1 ORG 0000H LJMP MAIN ORG 000BH LJMP T0ISR ORG ...

51单片机串行口工作方式1,波特率9600,fosc=6MHz,请用查询 的方法编写发 ...
如下即可:JNB RI,CLR RI MOV A,SUBF MOV SUBF,A JNB TI,CLR TI 别忘了采纳。

求用keil实现单片机与PC机串口通信
*p;\/*--- uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS ---*\/void DelayUs2x(unsigned char t){ while(--t);}\/*--- mS延时函数,含有输入参数 un...

51单片机串口通信能干神马?想用它控制1602或者12864有没有可能,应该怎...
单片机串口通信应用非常广泛,远程通信、单片机多机控制啊,一个主单片机控制10几个副单片机通信,这个就没有必要多说了,你想用电脑PC串口和单片机串口控制1602液晶显示数据,通过电脑PC串口调试助手发生数据,单片机把接收到电脑PC串口发送的数据,送到LCD1602液晶显示,这个很简单,例如:你把单片机串口接收...

永修县17770658494: 10秒50秒100秒的计数定时器单片机编程 -
锻宁苯磺: ;;晶体振荡f=12Mhz TEN_BUF EQU 30H ;10秒 计数器 TWE_BUF EQU 31H ;20s FIF_BUF EQU 32H ;50s SENCOND EQU 40H ;s counter; TEN_LED REG P1.0 ;DISPLAY TWE_LED REG P1.1 FIF_LED REG P1.2; TEN_KEY REG P1.4 ;KEY ...

永修县17770658494: 设计一个单片机编程,两位的简易秒表,记时单位60 - 50s,用两位的数码管 -
锻宁苯磺: #include unsigend char sec = 0; unsigend char code ledchar[] = {0xC0,x0F9, 0xA4, 0xB0 ,0x99, 0x92, 0x82, 0xF8, 0x80 ,0x90}; void ConfigTimer0() {TMOD = 0x01;TH0 = 0xFC; TL0 = 0x18; ET0 = 1; TR0= 1; EA = 1;} void main() ...

永修县17770658494: 单片机80c51设计一个两位计数器, -
锻宁苯磺: 使用计数器,两位数码管的显示有软件编写:把计数器得到的数进行分位处理——找出相应字形——显示——(返回循环)

永修县17770658494: 如何设计这个单片机数字秒表程序? -
锻宁苯磺: 根据以下程序稍做修改,就可以了 下面程序启动和暂停共用一个按键 #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit key1=P1^0; sbit key2=P1^1; sbit wei1=P1^2;//四个个数码管的位驱动(阳极) sbit wei2=P1^3; ...

永修县17770658494: 单片机的秒表设计的程序 -
锻宁苯磺: 这个程序本身思路都已经非常清晰了呀,主要就是再把流程优化下即可了.定时器T0只负责产生秒信号,用两个计数单元来计数需要显示的内容,在低位秒信号满100后清零同时把高位单元加一,还有就是对按键的处理和显示的处理问题上,比如两个键同时按下如何处理,显示是用锁位来实现,还是不停的动态扫描实现等等

永修县17770658494: 单片机100秒倒计时程序(两位数码管,设置复位和开始两个按钮 -
锻宁苯磺: 简单说两句,这个也不是很难,有很多种方案,说一个吧,首先是两位数码管的驱动,可以选择单片机带max7219然后外扩两个led数码管,硬件连接既简单也成熟,并且单片机驱动程序也是很成熟的,这样通过程序可以随时改变数码管显示,然后就是复位键和开始键,可以使用中断或查询方式,如果是中断,直接将其连接到外部中断和1上,如果是查询直接连到单片机的两个GPIO上,最好做个防抖动电路,防止多次运行,具体程序应该也不是很困难,呵呵,就是有点麻烦.

永修县17770658494: 用at89c51单片机做一个秒表计时器 -
锻宁苯磺: 参考一下:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/295f9639bccb7c2f96ddd86f.html

永修县17770658494: 单片机 用汇编编写一个电子秒表 利用STC89C51单片机的T0、T1的定时计数器,来完成对电子秒表设计 -
锻宁苯磺: 按你的要求写了一个,电路图在我的百度空间: http://hi.baidu.com/47okey/blog/item/180367355f735da6d1a2d328.html ;12M晶振 2010 12 21 调试完成 STRT EQU P3.0 STP EQU P3.1 CLRR EQU P3.2 ORG 00H SJMP MAIN ORG 0BH AJMP T0...

永修县17770658494: 用单片机汇编语言编写60秒计时器! -
锻宁苯磺:;数码管段选接P1口,位选接P2.0和P2.1, ;采用定时器T1定时10ms,60H为1s计数单元,计数100次为1sORG 0000H ;程序从0地址开始 LJMP MAIN ;跳到MAIN处执行 ORG 001BH ;定时器T1 LJMP TIME1 ORG 0030H MAIN:MOV TMOD,...

永修县17770658494: 利用单片机设计59秒计时器 -
锻宁苯磺: 我写的STC89C52的利用定时器1在六位数码管前三位显示秒表.精确到0.01秒,你可以参考下,改下IO口.不知道你的硬件设计只能给予程序参考. #include #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7;...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网