电子时钟代码

合集下载

单片机 lcd1602电子时钟代码

单片机 lcd1602电子时钟代码
{
uchar shi,ge;
shi=date/10; //数据分离
ge=date%10;
write_com(0x80+add);
write_data(0x30+shi);
write_data(0x30+ge);
}
void display1(add,uint date)
{
i=0;
lcd_rw=0;
lcd_en=0;
write_com(0x38); //显示模式设置,16*2显示,5*7点阵,8位数据口
write_com(0x0c); //开显式,不显示光标,光标不闪烁
write_com(0x06); //当读或写一个字符后地址指针加1,
{
ri=1;yue++;//闰年
}
else if(ri==31&&(yue==4||yue==6||yue==9||yue==11))
{
ri=1;yue++;
}
else if(ri==32)
sbit lcd_rw=P3^6;
uchar num=0,i,j=0;
uchar code table_0[]=" 2000-02-28 MON ";
uchar code table_1[]=" 23:59:57 ";
uchar code table_2[]="MONTUEWEDTHUFRISATSUN";
uchar shi=23,fen=59,miao=57; //必须定义为全局变量,局部变量用完一次即释放,LCD上不会有显示

单片机时钟程序设计代码

单片机时钟程序设计代码

单片机时钟程序设计代码好的,由于你没有给出具体的单片机型号,下面是一个基于 51 单片机的时钟程序设计示例:```c#include <reg52.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>// 定义变量char str[20];int i=0;int j=0;int k=0;int time=0;int flag=0;int h=0,m=0,s=0;void delay(int xms){int i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}void time0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;time++;if(time==20){time=0;s++;if(s==60){s=0;m++;if(m==60){m=0;h++;}}}// 将时间数据转换为字符串sprintf(str," %02d:%02d:%02d",h,m,s);// 输出时间字符串for(i=0;i<16;i++){P0=str[i];delay(1000);}}void main(){// 初始化定时器 0 为 16 位定时器模式,计数初值为 50000 TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;while(1);}```该程序利用 51 单片机的定时器 0 来产生定时中断,每 20 次中断为 1 秒,通过对秒、分、时的累计来实现时钟功能。

在中断服务函数中,将当前时间转换为字符串,并通过循环输出到 P0 口。

基于单片机电子时钟的设计与实现

基于单片机电子时钟的设计与实现

基于单片机电子时钟的设计与实现一、设计目标设计一个基于单片机的电子时钟,能够准确显示时间并能够进行设置和调整。

二、硬件设计1.时钟部分:采用晶振芯片提供准确的时钟信号2.数码管显示部分:使用共阴数码管进行数字显示3.按键部分:设计几个按键用于设置和调整时间4.电源部分:采用直流电源供电三、软件设计1.功能设计a.时间设置功能:通过按键可以设置当前的时间,包括小时、分钟和秒钟。

b.时间调整功能:通过按键可以调整当前的时间,包括小时、分钟和秒钟。

c.时间显示功能:通过数码管可以实时显示当前的时间。

2.代码实现以C语言为例,以下是一个基于单片机的电子时钟的代码实现示例:```c#include <reg51.h>sbit DS18B20=P1^3; // 定义18B20数据线接口sbit beep=P2^3; // 定义蜂鸣器接口unsigned char hour,min,sec; // 定义小时、分钟、秒钟变量//函数声明void Delay_1ms(unsigned int count);bit Ds18b20Init(;unsigned char Ds18b20ReadByte(;void ReadTime(;void WriteTime(;void DisplayTime(;//主函数void mainP2=0x00;WriteTime(; // 写入时间while(1)ReadTime(; // 读取时间DisplayTime(; // 显示时间Delay_1ms(1000); // 延时1秒}//毫秒延时函数void Delay_1ms(unsigned int count) unsigned int i, j;for(i=0; i<count; i++)for(j=0; j<1275; j++);//18B20初始化函数bit Ds18b20Initbit presence;DS18B20=0;Delay_1ms(100); // 延时450us~1000us DS18B20=1;Delay_1ms(10); // 延时15us~60us presence=DS18B20;Delay_1ms(30); // 延时60us~240us return presence;//18B20读取字节函数unsigned char Ds18b20ReadByte unsigned char i, dat;for(i=0; i<8; i++)DS18B20=0;//主机发起读时序_nop_(; // 延时1us_nop_(; // 延时1us_nop_(; // 延时1usDS18B20=1;//主机释放总线_nop_(; // 延时1us_nop_(; // 延时1us_nop_(; // 延时1usdat,=(DS18B20<<i); // 读取数据位,存放在dat变量中Delay_1ms(3); // 读时序完成后等待48us再接收下一位}return dat;//读取时间函数void ReadTimeunsigned char temp;temp=0x00;while(temp!=0xaa)Ds18b20Init(; // 初始化温度传感器Delay_1ms(1);DS18B20=0xcc;Delay_1ms(1);DS18B20=0xbe;Delay_1ms(1);temp=Ds18b20ReadByte(; // 读取时间数组的标志位}for(temp=0; temp<7; temp++)//写入时间函数void WriteTimeunsigned char i,j;while(1)Ds18b20Init(;Delay_1ms(1);DS18B20=0xcc;Delay_1ms(1);DS18B20=0x4e;Delay_1ms(1);for(i=0; i<7; i++)DS18B20=0x55;Delay_1ms(1);DS18B20=0xaa;Delay_1ms(1);Ds18b20Init(;Delay_1ms(1);DS18B20=0xcc;Delay_1ms(1);DS18B20=0x48;Delay_1ms(1);j=Ds18b20ReadByte(; // 判断是否写入成功if(j==0x0a)break;}//显示时间函数void DisplayTimeP1=seg[hour/10]; // 显示十位小时P2=(P2&0xf0),0x08; // 点亮第一个数码管Delay_1ms(5); // 延时一段时间P2=0x0f;//熄灭数码管P1=seg[hour%10]; // 显示个位小时P2=(P2&0xf0),0x04; // 点亮第二个数码管Delay_1ms(5); // 延时一段时间P2=0x0f;//熄灭数码管P1=seg[min/10]; // 显示十位分钟P2=(P2&0xf0),0x02; // 点亮第三个数码管Delay_1ms(5); // 延时一段时间P2=0x0f;//熄灭数码管P1=seg[min%10]; // 显示个位分钟P2=(P2&0xf0),0x01; // 点亮第四个数码管Delay_1ms(5); // 延时一段时间P2=0x0f;//熄灭数码管P1=0x00;//空显示P2=0x00;//熄灭数码管```四、总结通过以上的硬件设计和软件实现,可以实现一个基于单片机的电子时钟。

8086数字电子钟的设计 附程序代码

8086数字电子钟的设计 附程序代码

附件3课程设计(综合实验)报告( 2011 -- 2012 年度第 1 学期)名称:硬件课程与实践题目:8086数字电子钟的设计院系:班级:学号:学生姓名:指导教师:设计周数:2周成绩:日期:2011年09月01日一、课程设计的目的与要求1. 综合运用学过的相关软、硬件知识,利用伟福LAB6000实验设备,设计具有实用功能的电子钟,实现电子时钟的准确运行、校时等功能。

2.熟悉伟福LAB6000的功能,掌握数码管设计和键盘设计的要领及相关技术,能够利用实验设备实现电子钟系统的设计。

3.提高自己的硬件设计分析能力,同时培养软硬结合的系统设计思维,从而提高设计系统的可行性和准确性。

二、课程设计正文A.设计题目:8086数字电子钟的设计:1.设计并完成LED七段数码管数字钟电路。

2.数字钟显示格式为:HH:MM:SS。

3.具有通过键盘能够调整时、分、秒及设置闹铃的功能。

4.具有暂停时间及复位功能。

B.设计方案本设计采用LAB6000伟福仿真实验箱,利用4MHz脉冲信号源和多级分频电路产生脉冲信号,4MHz脉冲信号经过F/64分频后得到62.5KHz脉冲信号,将脉冲信号传递给8253定时器,定时器每0.000016秒中断一次,在中断服务程序中对中断次数进行计数,0.000016秒计数62500次就是1秒,然后在中断服务程序中对秒计数得到分和小时值并判断闹铃是否到时。

编写键盘扫描和LED显示程序完成设置时间、定闹铃及数码管显示功能。

C.硬件原理1.七段数码管显示和键盘扫描显示图1.1七段数码管图1.2伟福实验台六位LED的电路图及寻址空间实验箱提供了6位八段数码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。

将KEY/LED CS接到CS0上,则实验箱中八位段码输出地址为08004H,位码输出地址为08002H。

实验箱提供了一个6×4的小键盘,将KEY/LED CS信号接到CS0上,则列扫描地址为08002H,行码地址为08001H。

LED数字显示电子时钟源程序代码

LED数字显示电子时钟源程序代码

LED数字显示电子时钟源程序代码程序:(注已完全经过调试,达到预期目的)#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar count=0;sbit LED=P1^0;uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //显示数码管0,1,3,4,5,6,7,8,9 uchar miao=0,fen=0,hour=0;void delay(uint i) //延迟函数{uint j;for(;i>0;i--)for(j=124;j>0;j--);}void init(){ET0=1;TMOD=0x51; //选定定时器0,1和中断0,1TH0=(65536-25000)/256;TL0=(65536-25000)%256; //设定时器0时间为250ms一次ET1=1;TH1=0xff;TL1=0xff; //定时器1为中断EX0=1;IT0=1; //中断0开EX1=1;IT1=1; //中断1开TR0=1; //定时器0开TR1=1; //定时器1开EA=1; //总中断开}void display() //时钟显示函数{P0=tab[hour/10%10];P2=0xfe;delay(1);P0=tab[hour%10];P2=0xfd;delay(1);P0=tab[fen/10%10];P2=0xfb;delay(1);P0=tab[fen%10];P2=0xf7;delay(1);P0=tab[miao/10%10];P2=0xef;delay(1);P0=tab[miao%10];P2=0xdf;delay(1);}void main() //主函数{init();LED=0;while(1){display();}}void T0_int() interrupt 1 //定时器0函数{TH0=(65536-25000)/256;TL0=(65536-25000)%256;count++;if(count==20){count=0;miao= miao +1;LED=~LED;if(sec==60){miao=0;fen= fen +1;if(fen ==60){fen =0;hour=hour+1;if(hour==24)hour=0;}}}}void T1_int() interrupt 3 //定时器1函数控制秒针加1 {TH1=0xff;TL1=0xff;miao=miao+1;if(miao ==60)miao =0;}void I1_int() interrupt 2 //中断1函数控制按键分针加1 {EX0=0;fen= fen +1;if(fen ==60)fen =0;EX0=1;}void I0_int() interrupt 0 //中断函数0控制按键时针加1 {EX1=0;hour=hour+1;if(hour==24)hour=0;EX1=1;}。

单片机电脑时钟的程序代码

单片机电脑时钟的程序代码

#include<reg51.h>sbit P10=P1^0;sbit P11=P1^1;sbit P12=P1^2;sbit P13=P1^3;sbit P20=P2^0;sbit P21=P2^1;sbit P22=P2^2;sbit P23=P2^3;sbit P24=P2^4;sbit P25=P2^5;sbit P26=P2^6;sbit P32=P3^2;unsigned int year=2011,month=5,diary=16,hour=12,minute=0,flag=0;unsigned char code led[]={0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; main(void){TMOD=0x11;TR0=1;ET0=1;EA=1;while(1);}void timer0() interrupt 1{static unsigned char Bit=0,huan=0,m=0,n=0,l=0,k=0,a=0;static unsigned int i=0,z=0,num=0;TH0=0xee;TL0=0x00;if(flag==0){P23=1;P24=1;P25=1;P26=1;z++;if(z==200)z=0;if(++i%12000==0){i=0;if(++minute==60){minute=0;if(++hour==24){hour=0;if(++diary==31){diary=1;if(++month==13){month=1;year++;} } } }} }if(P20==1){m=1;}if(P20==0&&m==1){flag++;m=0;i=0;huan=0;num=0;P23=1;P24=1;P25=0;P26=0;if(flag>4)flag =0;}if(P21==1){n=1;}if(P21==0&&n==1){n=0;switch(flag){case(1):switch(huan){case(0):if(year<10000) year++; break;case(1):if(year<10000) year+=100; break; }break;case(2):switch(huan){case(0):if(diary<31) diary++; break;case(1):if(month<13) month++; break; }break;case(3):switch(huan){case(0):if(minute<60) minute++;break;case(1):if(hour<24) hour++; break; }break;} }if(P22==1){l=1;}if(P22==0&&l==1){l=0;switch(flag){case(1):switch(huan){case(0):if(year>0) year--; break;case(1):if(year>100) year-=100;break; }break;case(2):switch(huan){case(0):if(diary>1) diary--; break;case(1):if(month>1) month--; break; }break;case(3):switch(huan){case(0):if(minute>0) minute--; break;case(1):if(hour>0) hour--; break; }break;} }if(P32==1){k=1;}if(P32==0&&k==1){k=0;if(flag==4&&a==0)a=1;if(flag==4&&a==1)a=0;if(flag!=4)switch(huan){case(0):huan=1;P23=0;P24=0;P25=1;P26=1;break;case(1):huan=0;P23=1;P24=1;P25=0;P26=0;break; } }if(a==1) {i++;if(i>1){i=0;num++;if(num==9999){num=0;}}}if(Bit>3){Bit=0;}Bit++;P1|=0xff;switch(flag){case(0):if(z<100)switch(Bit-1){case(0):P0=led[minute%10]; P13=0;break;case(1):P0=led[minute/10]; P12=0;break;case(2):P0=(led[hour%10])|0x80;P11=0;break;case(3):P0=led[hour/10]; P10=0;break;}elseswitch(Bit-1){case(0):P0=led[minute%10]; P13=0;break;case(1):P0=led[minute/10]; P12=0;break;case(2):P0=(led[hour%10]); P11=0;break;case(3):P0=led[hour/10]; P10=0;break;}break;case(1):switch(Bit-1){case(0):P0=led[year%10]; P13=0;break;case(1):P0=led[year%100/10]; P12=0;break;case(2):P0=led[year%1000/100]; P11=0;break;case(3):P0=led[year/1000]; P10=0;break;}break;case(2):switch(Bit-1){case(0):P0=led[diary%10]; P13=0;break;case(1):P0=led[diary/10]; P12=0;break;case(2):P0=led[month%10]|0x80; P11=0;break;case(3):P0=led[month/10]; P10=0;break;}break;case(3):switch(Bit-1){case(0):P0=led[minute%10]; P13=0;break;case(1):P0=led[minute/10]; P12=0;break;case(2):P0=led[hour%10]|0x80; P11=0;break;case(3):P0=led[hour/10]; P10=0;break;}break;case(4):switch(Bit-1){case(0):P0=led[num%10]; P13=0;break;case(1):P0=led[num%100/10]; P12=0;break;case(2):P0=(led[num%1000/100])|0x80;P11=0;break;case(3):P0=led[num/1000]; P10=0;break;}break;}}。

多功能数字时钟fpga源代码

多功能数字时钟fpga源代码

多功能数字时钟fpga源代码以下是一个基于FPGA的多功能数字时钟的简化源代码示例。

请注意,由于FPGA设计和编程的复杂性,这里提供的代码只是一个概念性的框架,并不能直接用于生产环境。

此外,代码的长度和详细程度可能会因具体的FPGA型号、设计工具和需求而有所不同。

verilogmodule DigitalClock(input wire clk, // 输入时钟信号input wire rst, // 复位信号output wire [5:0] sec, // 秒output wire [5:0] min, // 分output wire [4:0] hour // 时);reg [25:0] counter = 0; // 26位计数器reg [5:0] sec_reg = 0, min_reg = 0, hour_reg = 0; // 寄存器always @(posedge clk or posedge rst) beginif (rst) begincounter <= 0;sec_reg <= 0;min_reg <= 0;hour_reg <= 0;end else begincounter <= counter + 1;if (counter == 50000000) begin // 假设时钟频率为50MHz,则每1秒计数器加1counter <= 0;sec_reg <= sec_reg + 1;if (sec_reg == 60) beginsec_reg <= 0;min_reg <= min_reg + 1;if (min_reg == 60) beginmin_reg <= 0;hour_reg <= hour_reg + 1;if (hour_reg == 24)hour_reg <= 0;endendendendendassign sec = sec_reg;assign min = min_reg;assign hour = hour_reg;endmodule以上代码是用Verilog语言编写的,它是一种硬件描述语言,常用于FPGA和ASIC设计。

51单片机时钟代码(带秒表闹钟功能)

51单片机时钟代码(带秒表闹钟功能)

51单片机时钟代码(带秒表闹钟功能)#include#include#defineucharunignedchar#defineuintunignedintbitbeep=P1^5;//蜂鸣器bitLED1=P1"6;//LED灯bitep=P2"7;//1602使能端bitr=P2八6;//1602bitrw=P2八5;//1602bit0二P3八4;//停止闹铃和小灯bit1二P3八5;//功能键bit2二P3飞;//增大键bit3二P3X;//减小键bit4二P3「;//bit5=P3^2;bit6二P3八3;bit7=P3^0;uchar1num,4num,count,count1,judge=0;charec,min,hour,miao,fen,hi,ec1,min1,diwei;voiddelay(uintz){ uint某,y;for(某二z;某〉0;某--)for(y=100;y〉0;y—);}voiddi(){beep=0;delay(50);beep=1;}bitlcd_bz()//测试LCD忙碌状态{bitreult;r=0;rw=1;ep=1;_nop_();_nop_();_nop_();_nop_();reult=(bit)(P0&0某80);ep=0;returnreult;}_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;}voidwrite_data(uchardat)//写入字符显示数据到LCD{while(lcd_bz());//等待LCD空闲r=1;rw=0;ep=0;P0=dat;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_( );_nop_();_nop_();_nop_();ep=0;}ucharhi,ge;hi=dat/10;ge=dat;write_data(0某30+hi);write_data(0某30+ge);}voidwrite_alarm(ucharadd,uchardat){ucharhi1,ge1;hi1=dat/10;ge1=dat;count=0;//clearwrite_data('A');delay(5);hi=17;voidkeycan()//按键扫描{if(l==0){delay(5);if(1==0){1num++;while(!1);di(); if(1num==1){TR0=0;if(1num==2){if(1num==3){if(1num==4){1num=0;if(1num!=0){if(2==0){delay(5);if(2==0){while(!2);di();if(1num==1){ec++;if(ec==60)ec=0;min++;if(min==60)min=0;if(1num==3){hour++;if(hour==24)hour=0;delay(5);if(3==0){while(!3);di();if(1num==1){ec--;if(ec<0)ec=59;if(1num==2){min--;if(min<0)min=59;hour--;if(hour<0)hour=23;}voidkeycan1(){if(4==0){delay(5);if(4==0){4num++;while(!4);di();if(4num==1){TR0=0;if(4num==3){if(4num==4){if(4num!=0){if(5==0){delay(5);if(5==0){while(!5);di();if(4num==1){miao++;if(miao==60)miao=0; write_alarm(10,miao);if(4num==2){fen++;if(fen==60)fen=0;if(4num==3){hi++;if(hi==24)hi=0;write_alarm(4,hi);if(6==0){delay(5);if(6==0){while(!6);di();if(4num==1){miao--;if(miao<0)miao=59;if(4num==2){fen--;if(fen<0)fen=59;write_alarm(7,fen);if(4num==3){hi--;if(hi<0)hi=23;}}if(7==0){delay(5);if(7==0){while(!7)di();judge++;}}if(judge==2){TL0=0某b0;TH0=0某3c; {ec=0;min++;if(min==60){min=0;hour++;if(hour==24){hour=0;}}}}}if(judge==3){judge=0;ec1=0;min1=0;diwei=0;write_alarm(10,miao);write_alarm(7,fen);write_alarm(4,hi);wr ite_alarm(10,miao);write_alarm(7,fen);write_alarm(4,hi);} if(count==20){count=0;ec++;if(ec==60){ec=0;min++;if(min==60){min=0;hour++;if(hour==24){hour=0;}}}}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西安邮电大学硬件课程设计报告院系名称:计算机学院学生姓名:王哲指导老师:杨锐班级:0901学号:时间:porta equ1400hportb equ1401hportc equ1402hportcontrol equ1403htimer0equ1440htimer1equ1441htimer2equ1442htimer_control equ1443h;-------------------------------------------------------------data segmentledbuf db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码datbuf db00h,00h,00h,00h;存放要显示4位copybuf db00h,00h,00h,00hdata ends;--------------------------------------------------------------code segmentassume cs:code,ds:data;---------------------------------------start:mov ax,datamov ds,axcall read_cmoscall p8254mov dx,portcontrol;将8255设为A\B口输出,A为段码输出,B为位码输出mov al,10000001Bout dx,al;---------------------------------------------------------------loop2:call dispmov dx,1402hin al,dxmov bl,aland bl,02htest bl,02hjnz resetmov bh,aland bh,04htest bh,04hjnz stopout2:and al,01htest al,1hjnz hellojmp loop2;----------------------------------------------------------------stop:push sipush axmov si,0mov al,datbuf[si]mov copybuf[si],almov al,datbuf[si+1]mov copybuf[si+1],almov al,datbuf[si+2]mov copybuf[si+2],almov al,datbuf[si+3]mov copybuf[si+3],alpop axpop sipause:call disp1mov dx,1402hin al,dxmov ah,aland al,01htest al,1hjnz plus2out3:and ah,04htest ah,04hjz out2jmp pausereset:mov si,0hmov datbuf[si],0hmov datbuf[si+1],0hmov datbuf[si+2],0hmov datbuf[si+3],0hjmp loop2hello:call pluscall p8254jmp loop2plus2:call pluscall p8254jmp out3;-----------------------------------------------------------------exit:mov dx,portbmov al,0ffh;关掉数码管显示out dx,almov ah,4ch;返回DOSint21h;----------------------------------------------------------------plus procpush axpush bxpush dxmov si,0mov al,datbuf[si]cmp al,09hjnc al9inc almov datbuf[si],aljmp out1al9:mov datbuf[si],00hmov ah,datbuf[si+1]cmp ah,05hjnc ah5inc ahmov datbuf[si+1],ahjmp out1ah5:mov datbuf[si+1],00hmov bl,datbuf[si+2]cmp bl,09hjnc bl9inc blmov datbuf[si+2],bljmp out1bl9:mov datbuf[si+2],00hmov bh,datbuf[si+3]cmp bh,05hjnc bh5inc bhmov datbuf[si+3],bhjmp out1bh5:mov datbuf[si+3],00hout1:pop dxpop bxpop axretplus endp;----------------------------------------------------------------------disp procmov cx,0900hagain:mov si,offset datbufmov bl,0fehdispnext:mov al,[si]push bxmov bx,offset ledbufxlatmov dx,portaout dx,alpop bxmov al,blmov dx,portbout dx,alpush cxmov cx,0E000hdelay:loop delaypop cx;延时稳定时间cmp bl,11110111B;判断是否六位全部显示jz doneinc si;未全部显示,指针指向下一个需要显示的数,改变位码rol bl,1jmp dispnextdone:dec cxjnz againretdisp endp;--------------------------------------------------------------------------------------------------read_cmos procpush axpush bxmov si,offset datbufmov dx,70hmov al,02hout dx,almov dx,71hin al,dxmov bl,aland al,0fhmov[si+2],almov al,blsar al,4and al,0fhmov[si+3],al;---------------------------mov dx,70hmov al,00hout dx,almov dx,71hin al,dxmov bl,aland al,0fhmov[si],almov al,blsar al,4and al,0fhmov[si+1],al;-----------------------------------------pop bxpop axretread_cmos endp;----------------------------------------------------------p8254proc;---------------------------------------push axpush dxmov dx,1443h;写控制字mov al,00110000bout dx,al;---------------------------------------mov dx,1440hmov al,0e8hout dx,almov dx,1440hmov al,03hout dx,alpop dxpop ax;---------------------------------------retp8254endp;---------------------------------------------------------------------------disp1procmov cx,0900hagain1:mov si,offset copybufmov bl,0fehdispnext1:mov al,[si]push bxmov bx,offset ledbufxlatmov dx,portaout dx,alpop bxmov al,blmov dx,portbout dx,alpush cxmov cx,0E000hdelay1:loop delay1pop cx;延时稳定时间cmp bl,11110111B;判断是否六位全部显示jz done1inc si;未全部显示,指针指向下一个需要显示的数,改变位码rol bl,1jmp dispnext1done1:dec cxjnz again1retdisp1endp;-------------------------------------------------------------------------code endsend start;接线:A口作为段码输出,B口作为位码输出,位控对应关系注意:pb0控制个位显示,依次类推,所以pb0接x4,pb1接x3,依次类推。

相关文档
最新文档