标题: 单片机程序怎么把共阴数码管程序改成共阳的 [打印本页]
作者: 啊啊啊12138 时间: 2017-5-10 22:11
标题: 单片机程序怎么把共阴数码管程序改成共阳的
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- //数码管位端口定义
- sbit w1=P2^0;
- sbit w2=P2^1;
- sbit w3=P2^2;
- sbit w4=P2^3;
- sbit w5=P2^4;
- ////////按键/////////////////////
- sbit key1=P3^0;//设置时间
- sbit key2=P3^1;//加
- sbit key3=P3^2;//减
- sbit key4=P3^3;//闹钟
- sbit beep=P1^0;//蜂鸣器
- /////共阴数码管段信号编码////////
- uchar code table[10]=//0---9
- {0xFC,0x60,0xDA,0xF2,0x66,
- 0xB6,0xBE,0xE0,0xFE,0xF6};//
- uchar num,miao,fen,shi;//计时 时分秒变量
- uchar fen1,shi1;//闹钟变量
- uchar d1,d2,d3,d4;//显示拆分数据
- void delay(uint ms)//1ms 延时函数 数据保持用的
- {
- uchar x;
- for(ms;ms>0;ms--)
- for(x=110;x>0;x--);
- }
- void display()//显示函数
- {
- d1=shi/10;//小时
- d2=shi%10;//
- d3=fen/10;//
- d4=fen%10;//分钟
- w1=0;P0=table[d1];delay(10);//第1位显示数据
- P0=0x00;w1=1;//关闭显示消除动态扫描阴影
- w2=0;P0=table[d2]|0x01;delay(10);//第2位显示数据
- P0=0x00;w2=1;//关闭显示消除动态扫描阴影
- w3=0;P0=table[d3];delay(10);//第3位显示数据
- P0=0x00;w3=1;//关闭显示消除动态扫描阴影
- w4=0;P0=table[d4]|0x01;delay(10);//第4位显示数据
- P0=0x00;w4=1;//关闭显示消除动态扫描阴影
- }
- void disp_set()//显示函数
- {
- d1=shi1/10;//小时
- d2=shi1%10;//
- d3=fen1/10;//
- d4=fen1%10;//分钟
- w1=0;P0=table[d1];delay(10);//第1位显示数据
- P0=0x00;w1=1;//关闭显示消除动态扫描阴影
- w2=0;P0=table[d2]|0x01;delay(10);//第2位显示数据
- P0=0x00;w2=1;//关闭显示消除动态扫描阴影
- w3=0;P0=table[d3];delay(10);//第3位显示数据
- P0=0x00;w3=1;//关闭显示消除动态扫描阴影
- w4=0;P0=table[d4]|0x01;delay(10);//第4位显示数据
- P0=0x00;w4=1;//关闭显示消除动态扫描阴影
- }
- void keyscan()//调时按键扫描函数
- {
- uchar k_flag,set_flag;
- if(key1==0)//按键按下 一下所有按键执行的模式都是一样的
- {
- delay(10);//延时消除按键抖动
- if(key1==0)//确定按键按下
- {
- k_flag=1;
- }
- while(key1==0)display();//等待按键松手
- }
- while(k_flag==1)//开始调整小时数据
- {
- display();
- if(key1==0)
- {
- delay(10);//延时消抖
- if(key1==0)
- {
- k_flag=2;
- }
- while(key1==0)display();
- }
- if(key2==0)
- {
- delay(10);
- if(key2==0)
- {
- shi++;
- if(shi==24)shi=0;
- }
- while(key2==0)display();
- }
- if(key3==0)
- {
- delay(10);
- if(key3==0)
- {
- if(shi==0)shi=24;
- shi--;
- }
- while(key3==0)display();
- }
- }
- while(k_flag==2)//开始调整分钟数据
- {
- display();
- if(key1==0)
- {
- delay(10);//延时消抖
- if(key1==0)
- {
- k_flag=3;
- }
- while(key1==0)display();
- }
- if(key2==0)
- {
- delay(10);
- if(key2==0)
- {
- fen++;
- if(fen==60)fen=0;
- }
- while(key2==0)display();
- }
- if(key3==0)
- {
- delay(10);
- if(key3==0)
- {
- if(fen==0)fen=60;
- fen--;
- }
- while(key3==0)display();
- }
- }
- ///////设置定时时间///////////////////////////////////////////////
- if(key4==0)
- {
- delay(10);
- if(key4==0)
- {
- set_flag=1;
- }
- while(key4==0)disp_set();
- }
- while(set_flag==1)
- {
- disp_set();
- if(key2==0)
- {
- delay(10);
- if(key2==0)
- {
- shi1++;
- if(shi1==24)shi1=0;
- }
- while(key2==0)disp_set();
- }
- if(key3==0)
- {
- delay(10);
- if(key3==0)
- {
- if(shi1==0)shi1=24;
- shi1--;
- }
- while(key3==0)disp_set();
- }
- if(key4==0)
- {
- delay(10);
- if(key4==0)
- {
- set_flag=2;
- }
- while(key4==0)disp_set();
- }
- }
- while(set_flag==2)
- {
- disp_set();
- if(key2==0)
- {
- delay(10);
- if(key2==0)
- {
- fen1++;
- if(fen1==60)fen1=0;
- }
- while(key2==0)disp_set();
- }
- if(key3==0)
- {
- delay(10);
- if(key3==0)
- {
- if(fen1==0)fen1=60;
- fen1--;
- }
- while(key3==0)disp_set();
- }
- if(key4==0)
- {
- delay(10);
- if(key4==0)
- {
- set_flag=0;
- }
- while(key4==0)disp_set();
- }
- }
- }
- void main()
- {
- TMOD=0x01;//定时器0 16位计时模式
- TH0=(65536-50000)/256; //50ms定时
- TL0=(65536-50000)%256; //50ms定时
- EA=1;//开启总中断
- ET0=1;//开启定时器中断
- TR0=1;//开启定时器
- w5=1;
- while(1)
- {
- w5=~w5;
- display();//显示函数
- keyscan();//按键扫描函数
- }
- }
- void T0_time() interrupt 1
- {
- TH0=(65536-50000)/256; //50ms定时
- TL0=(65536-50000)%256; //50ms定时
- num++;//加一次50ms定时
- if(num==20)//1S
- {
- num=0;
- miao++;
- if(miao==60)
- {
- miao=0;
- fen++;
- if(fen==60)
- {
- fen=0;
- shi++;
- if(shi==24)shi=0;
- }
- }
- }
- }
复制代码
作者: 啊啊啊12138 时间: 2017-5-10 22:18
突然发现这段函数和平时的共阴数码管函数好像不一样,突然不会改了 数码管1号口接的是P0.7
/////共阴数码管段信号编码////////
uchar code table[10]=//0---9
{0xFC,0x60,0xDA,0xF2,0x66,
0xB6,0xBE,0xE0,0xFE,0xF6};//
有人会修改吗?
作者: maidezhu 时间: 2017-5-10 23:10
下个这个软件就好了可以给你算数组
-
无标题.png
(95.67 KB, 下载次数: 116)
作者: zl2168 时间: 2017-5-10 23:37
关键是先改电路。光改程序是改不好的。程序是配合电路的。一上来就贴出冗长程序,说明你思路错了,理解错了。
作者: yzwzfyz 时间: 2017-5-10 23:46
说明你并未真正地了解LED驱动的原理。
作者: 桂木桂马 时间: 2017-5-11 14:27
如果是io口直接驱动的数码管程序的话只要把输出取反就可以了,如果是用7段译码器就不一样了
作者: joeky 时间: 2017-5-11 15:13
io口直接驱动的数码管程序的话只要把输出取反就可以了
作者: zl2168 时间: 2017-5-11 18:39
io口直接驱动,若是共阴LED,怎么直接驱动?20uA,会亮么?
作者: 啊啊啊12138 时间: 2017-5-12 00:15
我修改过线路,然后稍微改了程序,发现只能显示出0000 按下功能按键毫无反应,所以来求助了
作者: 啊啊啊12138 时间: 2017-5-12 00:15
我去下载试试,谢谢提醒
作者: 啊啊啊12138 时间: 2017-5-12 00:35
试过直接取反,没有用
作者: 啊啊啊12138 时间: 2017-5-12 00:37
共阴是直接驱动,共阳加上245芯片
作者: 啊啊啊12138 时间: 2017-5-12 00:38
io直接驱动,但是直接取反没效果
作者: zl2168 时间: 2017-5-12 09:02
本帖最后由 zl2168 于 2017-5-12 19:14 编辑
给你各介绍几个共阴和共阳的扫描显示案例,你自己去研读改进吧!
共阴动态显示:
实例57 74LS139选通4位LED数码管动态显示
实例58 74LS138选通8位LED数码管动态显示
实例58 74LS138选通8位LED动态显示.rar
(44.76 KB, 下载次数: 5)
实例59 74LS595串行选通8位LED数码管动态显示
[attach]62755[/attach]
实例59 74LS595×2选通8位LED动态显示.rar
(45.12 KB, 下载次数: 4)
共阴静态显示:
实例53 CC4511 BCD码驱动3位LED数码管静态显示
实例53 CC4511 BCD码驱动3位LED静态显示.rar
(43.76 KB, 下载次数: 4)
共阳动态显示:
实例53 CC4511 BCD码驱动3位LED数码管静态显示
实例56 PNP晶体管选通3位LED动态显示.rar
(47.41 KB, 下载次数: 6)
共阳静态显示:
实例52 74LS377并行输出3位LED静态显示
实例52 74LS377并行输出3位LED静态显示.rar
(42.73 KB, 下载次数: 3)
实例54 74LS164串行扩展3位LED数码管静态显示
实例54 74LS164串行扩展3位LED静态显示.rar
(57.84 KB, 下载次数: 4)
实例55 CC4094串行扩展3位LED数码管静态显示
实例55 CC4094串行扩展3位LED静态显示.rar
(37.46 KB, 下载次数: 3)
实例56 74LS595串行扩展3位LED数码管静态显示
实例56 74LS595串行扩展3位LED静态显示.rar
(39.7 KB, 下载次数: 4)
先Proteus仿真一下,确认有效。
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。书中电路和程序设计有详细说明,程序语句条条有注解。
仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
作者: jjx@qq 时间: 2017-5-12 14:02
共阴编码 改成共阳编码
作者: jjx@qq 时间: 2017-5-12 14:04
code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管 0-9
作者: 啊啊啊12138 时间: 2017-5-12 15:36
恩,我多看看,谢谢
作者: 2695919781 时间: 2017-5-12 16:36
换一个芯片
作者: zl2168 时间: 2017-5-13 08:37
给你9个案例了,共阴共阳、静态动态、串行并行,都有。
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |