AT89C51单片机C语言编程16*16点阵程序

作者&投稿:唱享 (若有异议请与网页底部的电邮联系)
求助,求AT89C51控制16X16单片机点阵的C51程序~

首先搞明白 两个芯片的原理, 154 是16路选 1路的 ,就相当于数码管的位选了, 595 是串行输出 并行输出的,两片级联,就相当于是同时输出16个状态,可以控制两个数码管,

16*16 的点阵, 那么 就相当于 你要16个位选 每个位选控制的是两个数码管, 总体的显示不难的,154 就不说了,595 就是送数,给脉冲, 一个脉冲 595就会把IO口的状态送入 595的输出口,同时595输出右移一位, 你就送16次,移位16次,然后 输出就可以了

我有电路图,但没写程序,要吗?要的话我发给你


#include <reg52.h>
unsigned char code tab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};  //控制列,P2控制,低电平显示
unsigned char code digittab[10][8]={{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00}, //0 控制行,P0控制,高电平显示,八行十个数字
{0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00}, //1
{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00}, //2
{0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00}, //3
{0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00}, //4
{0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00}, //5
{0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00}, //6
{0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00}, //7
{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00}, //8
{0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00} //9
};

unsigned int time;
unsigned char a,b;

sbit duan=P3^6;//数码管段显示
sbit wei=P3^7;//数码管位显示

/***************************************/ 
/*          主程序                     */ 
/***************************************/
void main(void)
{
 duan=1;
 P0=0X00;
 duan=0;  //关闭数码管段显示
 wei=1;  //数码管位显示,,点阵行控制

TMOD=0x01;//初装中断值
TH0=(65536-3000)/256;
TL0=(65536-3000)%256;
TR0=1;
ET0=1;
EA=1;

while(1)
 {;}
}

/***************************************/ 
/*          中断子程序                 */ 
/***************************************/ 
void t0(void) interrupt 1 using 0   //中断
{
TH0=(65536-3000)/256;
TL0=(65536-3000)%256;
P2=tab[a]; //共阳点阵,P2控制低电平,P0控制高电平
P0=digittab[b][a]; //P0控制锁存器74HC573输出高电平控制行
  a++;
if(a==8)
{
  a=0;
}
  time++;
if(time==233)
{
  time=0;
  b++;
if(b==10)
{
  b=0;
}
}
}


我有成套项目和图和程序,功能上要改一下,可代你做调试好


adc0808,89c51。模拟温控系统。
\/\/ 描述: 延时t ms函数 \/\/ 参数: t \/\/ 返回: 无 \/\/ 备注: 12MHZ t=1延时时间约1ms \/\/ 版本: 2011\/01\/01 First version \/\/***\/ voidDelay_ms(unsigned int t)\/\/延时1ms { unsigned int i,j;for(i=0;i<t;i++)for(j=0;j<120;j++);} \/ 中值滤波函数 \/ ucharmed...

单片机89c51的电子时钟课程设计
include <reg52.h> include<stddef.h> define uchar unsigned char define uint unsigned int define LCD1602_FLAG define LCD1602_PORT P0 sbit lcd1602_rs=P2^0;sbit lcd1602_e=P2^2;sbit lcd1602_rw=P2^1;sbit lcd1602_busy=P0^7;sbit key_ch=P3^5;sbit key_add=P3^6;sbit key_minus=P3...

单片机89C51用LCD做的数字时钟,时分秒正常运行,可调,并有闹钟,响时十...
\/*用1602液晶显示电子时钟,通过P1口连接独立按键可以调整时间*\/ include<reg52.h> define uint unsigned int define uchar unsigned char uchar code table[]="2010-05-18";uchar code time[]="23:58:00";uchar code xi1[]="mon";uchar code xi2[]="tue";uchar code xi3[]="wed";ucha...

单片机期末考试复习题急求!!谢谢符合条件必采纳!
28、当系统处于正常工作状态且振荡稳定后,在RST引脚上加一个 高 电平并维持 2 个机器周期,可将系统复位。29、是非题:单片机89C51复位后,其PC指针初始化为0000H,使单片机从该地址单元开始执行程序。T 30、单片机89C51复位后,其I\/O口锁存器的值为 0FFH ,堆栈指针的值为 ...

用stc-isp给单片机烧写程序,选项中单倍速双倍速的意义?
标准的51要12个时钟脉冲才能运行一条最短的指令,如NOP stc89C5X在设计时进行了优化,改成了只要6个时钟脉冲完成一条最基本的指令,选择12T\/单倍速时,内部会对时钟进行二分频,实际频率降低一半,以兼容AT89C51之类的芯片.选择6T\/双倍速时,不分频,速度比常规51快一倍.选择不同的对程序只是执行时间不同...

89c51单片机 锯齿波波形发生器编译问题 下面程序哪里有问题啊 有的话...
注释的符号有问题。汇编语言一般使用“;”;C语言一般使用“\/\/”或者“\/* *\/” 。另C语言中还有Outdate与前面定义的不一样,要改为outdate。

单片机C语言程序,看不懂,求讲解
该子程序是在硬件产生中断的时候,跳转到相应中断入口后,再跳转到这个中断服务程序的。请注意函数后面的“interrupt x”声明,这是C51的扩展内容。“用示波器测波形是测p1.0引脚,为什么是这个引脚,怎么确定的?p1_0不是个变量名吗?”P1_0这个符号在前面的头文件 t89c51cc02.h 中有定义。至于“...

89c51单片机的P3口接一个共阳极的数码管,P1口接4*4的键盘,每个键的键值...
include<reg52.h> define uint unsigned int define uchar unsigned char \/\/sbit w=P3^4;uchar code dula[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};\/\/数码管段选 uchar temp,num,key;char display();void dula(uchar aa);void...

基于CH341T的单片机下载原理图有疑问。
可以,STC的所有单片机都是用串口来下载程序。其他的支持串口烧录的单片机也可以用它这个图来下。 但像AT89S51\/52就不行了。这个图不行可以试下用PL2303芯片USB转RS232方案,比CH340便宜很多,才2块一片。

用51单片机做一个LED显示的电子钟
用89C51设计LED电子钟6个数码管显示时分秒,要求通过键盘输入初值,打上开关K1时允许设定时间,按下开关K1时开始运行显示时间,K2用做选择是24小时制还是12小时...T_CLK=0; T_RST=1; \/\/重新工作 write_byte(addr); \/\/写入地址 temp=read_byte(); T_RST=0; T_CLK=1; \/\/停止工作 return(temp);}\/***...

和田地区13847045126: 用C语言怎么在单片机AT89C51上编写一个用一个开关控制16个灯亮和灭的程序 -
墨政欣妥: 你买一块单片机开发板对照单片机编程书就能搞定了,花点时间.需求有点模糊,要具体.

和田地区13847045126: 用C语言编写AT89C51单片机程序,设计一个智能数字钟. -
墨政欣妥: 基本要求:1.C语言程序要求是模块化设计.2.该闹钟基于AT89C51单片机及相关外围电路进行设计.3.该闹钟有6个数码管(共阳极),可分别显示时间(时、分、秒)、及定时时间(分、秒).4.该闹钟有4个按钮,S1是切换显示按键,该键按下时可分别实现切换正常走时显示、设定走时显示、设置定时时间,启动定时,回到正常状态等功能.S2是设定键,即该键按下,将分别选中需要设定的选项.S3键是加键,即按下去表示相应选项加1.S4键是减键,即按下去表示相应的选项减1.5.该闹钟可以定时时间到,LED将发出提示闪光,且持续30s.发挥要求:1.定时时间可被打断,即打断后恢复时继续计时.2.设置闹钟报警功能;3.能切换显示年月日等信息.

和田地区13847045126: 请大神们帮我编个简单的AT89C51单片机的c语言程序 -
墨政欣妥: #include "reg51.h" void main(void) {P1=P1 | 0X40;//P1.6=1P1=P1 & 0X7F;//P1.7=0P0=P0 | 0X07;//P0.0=1,P0.1=1,P0.2=1while(1){if((P1 & 0X40)==0)//P1.6=0{P0=P0 & 0XF8;//P0.0=0,P0.1=0,P0.2=0}if((P1 & 0X80)>0)//P1.7=1{PCON=PCON | 2;//睡眠}} }

和田地区13847045126: 用AT89C51单片机编写一个C语言程序实现2个数码管秒计数器,用4个按键分别控制暂停、加一秒、减一秒和继续 -
墨政欣妥: #include<reg51.h>#define uchar unsigned char; uchar LED1,LED2; uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar num=0;sec,key; void delay(unsigned int a) { unsigned int i,j; for(i=0;i<a;i++) for(j=0;j<120;j++); } void ...

和田地区13847045126: 利用AT89C51单片机实现两个共阳数码管倒数计时120秒,求程序!!要求是C语言的 -
墨政欣妥: 只利用两个数码管显示,那么肯定是显示16进制的数值,用到定时器,用静态显示或动态显示都行的.

和田地区13847045126: at89c51电路板,设计一个汇编程序,实现16个灯逐个闪烁,每个闪烁5次 -
墨政欣妥: ORG 0000H LJMP MAIN ORG 000BH LJMP T0ISR ORG 0030H MAIN: MOV TMOD,#01H MOV TH0,#HIGH(65536-60000) MOV TL0,#LOW(65536-60000) SETB TR0 SETB ET0 SETB EA MOV R2,#10 CLR 00H MOV A,#0FEH MOV P1,#0FFH ...

和田地区13847045126: 单片机用c语言编一个程序,要求用内部定时/计数器对30个脉冲进行计数,并同时对这三十个脉冲进行计时. -
墨政欣妥: 看了一下你的要求,单片机里有个GATE位的设置如果你懂得用,编这个程序就不难了.下面是我个人按照你要求刚编的程序:/*********************** 功能:内部定时/计数器记录脉冲个数和这些脉冲通过后所用的时间.硬件:单片机用AT89c51,...

和田地区13847045126: 使用51单片机完成任务开关控制器的编程 -
墨政欣妥: #include#define uchar unsigned char void delay(uchar a) { uchar i; while(a--)for(i=0;i} main() { uchar i; for(i=0;i { P2=0x00; delay(200); P2=0xff; delay(200); } while(1) { i=P3; P2=i; } }

和田地区13847045126: 求助,求AT89C51控制16X16单片机点阵的C51程序 -
墨政欣妥: 首先搞明白 两个芯片的原理, 154 是16路选 1路的 ,就相当于数码管的位选了, 595 是串行输出 并行输出的,两片级联,就相当于是同时输出16个状态,可以控制两个数码管, 16*16 的点阵, 那么 就相当于 你要16个位选 每个位选控制的是两个数码管, 总体的显示不难的,154 就不说了,595 就是送数,给脉冲, 一个脉冲 595就会把IO口的状态送入 595的输出口,同时595输出右移一位, 你就送16次,移位16次,然后 输出就可以了

和田地区13847045126: 用AT89C52 通过3个独立按键控制16路LED灯的轮流点亮、逐个点亮、间隔点亮的C语言程序 -
墨政欣妥: 先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用>5(假设字长为8位),则得到的是 11111101 总之,在C中,左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变.实际应用中可以根据情况用左/右移做快速的乘/除运算,这样...

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